On 27/08/2015 21:33, Shigio YAMAGUCHI wrote:

> Isn't there a way to decide whether it is a dead link?

Sure, test if fopen fails. :)

> It is not opentoken() but parsers that call die().

Yeah, that's what I meant.

> It might be difficult to force plug-in parsers not to die.

Plug-in parsers can do what they want, that's not the issue.

You ignore files when stat fails, why not ignore files when
fopen fails?  That's what the attached patch does.  Oh, I
was also able to successfully use skip on the broken link,
so I don't know what went wrong there.

-- 
Jason.
diff -urp global-6.5/libparser/asm_parse.y global-6-5/libparser/asm_parse.y
--- global-6.5/libparser/asm_parse.y    2015-06-10 11:45:09 +1000
+++ global-6-5/libparser/asm_parse.y    2015-06-10 11:45:09 +1000
@@ -147,8 +147,10 @@ line:      ASM_ENTRY '(' ASM_SYMBOL ')' error
 void
 assembly(const struct parser_param *param)
 {
-       if (linetable_open(param->file) == -1)
-               die("'%s' cannot open.", param->file);
+       if (linetable_open(param->file) == -1) {
+               warning("cannot open '%s'. ignored.", param->file);
+               return;
+       }
 
        asm_symtable = strbuf_open(0);
        asm_initscan();
diff -urp global-6.5/libparser/C.c global-6-5/libparser/C.c
--- global-6.5/libparser/C.c    2015-06-10 11:45:09 +1000
+++ global-6-5/libparser/C.c    2015-08-27 22:09:28 +1000
@@ -110,8 +110,10 @@ C_family(const struct parser_param *para
        savelevel = -1;
        startmacro = startsharp = 0;
 
-       if (!opentoken(param->file))
-               die("'%s' cannot open.", param->file);
+       if (!opentoken(param->file)) {
+               warning("cannot open '%s'. ignored.", param->file);
+               return;
+       }
        cmode = 1;                      /* allow token like '#xxx' */
        crflag = 1;                     /* require '\n' as a token */
        if (type == TYPE_YACC)
diff -urp global-6.5/libparser/Cpp.c global-6-5/libparser/Cpp.c
--- global-6.5/libparser/Cpp.c  2015-06-10 11:45:09 +1000
+++ global-6-5/libparser/Cpp.c  2015-08-27 22:09:27 +1000
@@ -90,8 +90,10 @@ Cpp(const struct parser_param *param)
        savelevel = -1;
        startclass = startthrow = startmacro = startsharp = startequal = 0;
 
-       if (!opentoken(param->file))
-               die("'%s' cannot open.", param->file);
+       if (!opentoken(param->file)) {
+               warning("cannot open '%s'. ignored.", param->file);
+               return;
+       }
        cmode = 1;                      /* allow token like '#xxx' */
        crflag = 1;                     /* require '\n' as a token */
        cppmode = 1;                    /* treat '::' as a token */
diff -urp global-6.5/libparser/java.c global-6-5/libparser/java.c
--- global-6.5/libparser/java.c 2015-06-10 11:45:09 +1000
+++ global-6-5/libparser/java.c 2015-08-27 22:09:29 +1000
@@ -62,8 +62,10 @@ java(const struct parser_param *param)
        level = classlevel = 0;
        startclass = startthrows = startequal = 0;
 
-       if (!opentoken(param->file))
-               die("'%s' cannot open.", param->file);
+       if (!opentoken(param->file)) {
+               warning("cannot open '%s'. ignored.", param->file);
+               return;
+       }
        while ((c = nexttoken(interested, java_reserved_word)) != EOF) {
                switch (c) {
                case SYMBOL:                                    /* symbol */
diff -urp global-6.5/libparser/php.l global-6-5/libparser/php.l
--- global-6.5/libparser/php.l  2015-06-10 11:45:09 +1000
+++ global-6-5/libparser/php.l  2015-06-10 11:45:09 +1000
@@ -285,8 +285,10 @@ php(const struct parser_param *param)
 
        level = 0;
        string = strbuf_open(0);
-       if (linetable_open(param->file) == -1)
-               die("'%s' cannot open.", param->file);
+       if (linetable_open(param->file) == -1) {
+               warning("cannot open '%s'. ignored.", param->file);
+               return;
+       }
 
        LEXRESTART(NULL);
        LEXLINENO = 1;
_______________________________________________
Bug-global mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-global

Reply via email to