Here is another patch which do not use want_directory,
this patch will remove the dead codes in table.c, and just use
is_directory for generate a warning.


Index: osprey/driver/table.c
===================================================================
--- osprey/driver/table.c       (revision 3448)
+++ osprey/driver/table.c       (working copy)
@@ -752,6 +752,7 @@
        fprintf(f, "get_option(int *argi, char *argv[])\n");
        fprintf(f, "{\n");
        fprintf(f, "/* don't reset optargs, as may contain needed info */\n");
+       fprintf(f, "char* path;\n");
        fprintf(f, "optargd = 0;\n");
        fprintf(f, "switch (argv[*argi][optindex]) {\n");
        i = 0;
@@ -827,7 +828,9 @@
                                   || options[i].syntax ==
needs_directory_or_null
 #endif
                                   ) {
-                               fprintf(f, "\tif
(is_directory(next_string(argv,argi))) {\n");
+                         fprintf(f, "\tpath=next_string(argv,argi);\n");
+                         fprintf(f, "\tif (!is_directory(path) &&
fullwarn)\n");
+                         fprintf(f, "\t\twarning(\"%%s is not a
directory\", path);\n");
                        }
                        fprintf(f, "\t\toptargs = get_optarg(argv, argi);\n");
                        if (options[i].syntax == needs_decimal) {
@@ -846,41 +849,14 @@
                          fprintf(f, "\t\treturn
add_string_option(%s,optargs);\n",
                                  options[i].flag);
                        fprintf(f, "\t\t/* NOTREACHED */\n");
-                       if (options[i].syntax == needs_directory
-#ifdef KEY
-                           || options[i].syntax == needs_directory_or_null
-#endif
-                           ) {
-                               fprintf(f, "\t} else if
(!is_last_char(argv,argi)) {\n");
-                               fprintf(f, "\t\tif (fullwarn) {\n");
-                               fprintf(f, "\t\t\twarning(\"%%s does
not refer to a valid directory\", option_name);\n");
-                               fprintf(f, "\t\t}\n");
-                               fprintf(f, "\t\toptargs =
get_optarg(argv,argi);\n");
-                               fprintf(f, "\t\tget_next_arg(argi);\n");
-#ifdef KEY
-                               fprintf(f, "\t\treturn
add_any_string_option(%s,optargs);\n",
-                                       options[i].flag);
-#else
-                               fprintf(f, "\t\treturn
add_string_option(%s,optargs);\n",
-                                       options[i].flag);
-#endif
-                               fprintf(f, "\t\t/* NOTREACHED */\n");
-                       }
-#ifdef KEY
-                       // Ignore %D? option if no dir arg is found by changing
-                       // them into -dummy.
-                       if (options[i].syntax == needs_directory_or_null) {
-                               fprintf(f, "\t} else {\n");
-                               fprintf(f, "\t  optargs =
current_string(argv,argi);\n");
-                               fprintf(f, "\t  get_next_arg(argi);\n");
-                               fprintf(f, "\t  return O_dummy;\n");
-                       }
-#endif
                        if (options[i].syntax != needs_string
                            && options[i].syntax != needs_string_or_dash
+                           && options[i].syntax != needs_directory
+                           && options[i].syntax != needs_directory_or_null
                                        ) {
                                fprintf(f, "\t}\n");
                        }
+
                        if (strlen(options[i].name) > 2) {
                                fprintf(f, "\t}\n");
                        }


On Thu, Dec 30, 2010 at 10:42 AM, David Coakley <dcoak...@gmail.com> wrote:
> I will not have a chance to look closely until next week, but I have a
> few minor complaints... we can always address these later if the bug
> is blocking progress.
>
> The comment for want_directory() is exactly the same as the comment
> for is_directory().  This looks like an error.
>
> Also, I think it is strange to have a boolean function that always
> returns TRUE.  Maybe the code generated by table.c should change
> instead.
>
> -David Coakley / AMD Open Source Compiler Engineering
>
> On Wed, Dec 29, 2010 at 3:18 PM, Sun Chan <sun.c...@gmail.com> wrote:
>> go ahead.
>> Sun
>>
>> On Tue, Dec 28, 2010 at 11:31 PM, Wu Yongchong <wuyongch...@gmail.com> wrote:
>>> Hi, David
>>>
>>> Could you please help review this patch
>>> See https://bugs.open64.net/show_bug.cgi?id=709
>>>
>>> In revision 3437 , the function want_directory has been remove
>>> considering it's a dead function, but it's not true. This function
>>> will always return TRUE no matter the path is a directory or not.
>>> If it's replace with is_directory, the following situation will fail .
>>>
>>> There is no directory named libs
>>> $ opencc -I ./libs  test.c
>>> opencc WARNING: unknown flag: -I
>>> gcc: ./libs: No such file or directory
>>>
>>>
>>> Here is the patch.
>>> Index: osprey/driver/file_utils.c
>>> ===================================================================
>>> --- osprey/driver/file_utils.c  (revision 3437)
>>> +++ osprey/driver/file_utils.c  (working copy)
>>> @@ -163,6 +163,13 @@
>>>                return FALSE;
>>>  }
>>>
>>> +boolean want_directory (char *path)
>>> +{
>>> +  if (is_directory(path) && fullwarn)
>>> +    warning("%s is not a directory", path);
>>> +  return TRUE;
>>> +}
>>> +
>>>  /* check if directory is writable */
>>>  boolean
>>>  directory_is_writable (char *path)
>>> Index: osprey/driver/file_utils.h
>>> ===================================================================
>>> --- osprey/driver/file_utils.h  (revision 3437)
>>> +++ osprey/driver/file_utils.h  (working copy)
>>> @@ -61,6 +61,9 @@
>>>  /* check whether is a directory */
>>>  extern boolean is_directory (char *path);
>>>
>>> +/* check whether is a directory */
>>> +extern boolean want_directory (char *path);
>>> +
>>>  /* check whether directory is writable */
>>>  extern boolean directory_is_writable (char *path);
>>>
>>> Index: osprey/driver/table.c
>>> ===================================================================
>>> --- osprey/driver/table.c       (revision 3437)
>>> +++ osprey/driver/table.c       (working copy)
>>> @@ -827,7 +827,7 @@
>>>                                   || options[i].syntax ==
>>> needs_directory_or_null
>>>  #endif
>>>                                   ) {
>>> -                               fprintf(f, "\tif
>>> (is_directory(next_string(argv,argi))) {\n");
>>> +                               fprintf(f, "\tif
>>> (want_directory(next_string(argv,argi))) {\n");
>>>                        }
>>>                        fprintf(f, "\t\toptargs = get_optarg(argv, 
>>> argi);\n");
>>>                        if (options[i].syntax == needs_decimal) {
>>>
>>>
>>> --
>>> yongchong
>>>
>>> ------------------------------------------------------------------------------
>>> Learn how Oracle Real Application Clusters (RAC) One Node allows customers
>>> to consolidate database storage, standardize their database environment, 
>>> and,
>>> should the need arise, upgrade to a full multi-node Oracle RAC database
>>> without downtime or disruption
>>> http://p.sf.net/sfu/oracle-sfdevnl
>>> _______________________________________________
>>> Open64-devel mailing list
>>> Open64-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>
>>
>



-- 
yongchong

------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to