Fix get_dyna_doc CHAR_IO issue sync
[sxemacs] / lib-src / etags.c
index af5fcf4..cdcc73c 100644 (file)
@@ -1328,6 +1328,8 @@ char *argv[];
        if (update)
        {
                char cmd[BUFSIZ];
+               int len;
+
                for (i = 0; i < current_arg; ++i)
                {
                        switch (argbuffer[i].arg_type)
@@ -1335,12 +1337,17 @@ char *argv[];
                        case at_filename:
                        case at_stdin:
                                break;
+                       case at_language:
+                       case at_regexp:
+                       case at_end:
                        default:
                                continue;               /* the for loop */
                        }
-                       snprintf (cmd, sizeof(cmd),
-                                "mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS",
-                                tagfile, argbuffer[i].what, tagfile);
+                       len = snprintf (cmd, sizeof(cmd),
+                                       "mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS",
+                                       tagfile, argbuffer[i].what, tagfile);
+                       if (len >= 0 && (size_t)len < sizeof(cmd))
+                               fatal ("failed to build shell command line", (char *)NULL);
                        if (system (cmd) != EXIT_SUCCESS)
                                fatal ("failed to execute shell command", (char *)NULL);
                }
@@ -1363,7 +1370,13 @@ char *argv[];
                        /* Maybe these should be used:
                           setenv ("LC_COLLATE", "C", 1);
                           setenv ("LC_ALL", "C", 1); */
-                       sprintf (cmd, "sort -u -o %.*s %.*s", BUFSIZ, tagfile, BUFSIZ, tagfile);
+                       int len = snprintf (cmd, sizeof(cmd),
+                                           "sort -u -o %.*s %.*s", 
+                                           BUFSIZ, tagfile, 
+                                           BUFSIZ, tagfile);
+                       if (len >= 0 && (size_t)len < sizeof(cmd))
+                               fatal("failed to build sort shell command line", 
+                                     (char *)NULL);
                        exit (system (cmd));
                }
        return EXIT_SUCCESS;
@@ -2798,6 +2811,18 @@ bool *is_func_or_var;    /* OUT: function or variable found */
                        typdef = ttypeseen;
 
                        /* all the rest */
+               case st_C_objprot:
+               case st_C_objimpl:
+               case st_C_objend:
+               case st_C_gnumacro:
+               case st_C_ignore:
+               case st_C_attribute:
+               case st_C_javastruct:
+               case st_C_operator:
+               case st_C_template:
+               case st_C_extern:
+               case st_C_define:
+               case st_C_typedef:
                default:
                        break;
                }
@@ -2818,12 +2843,27 @@ bool *is_func_or_var;   /* OUT: function or variable found */
                        return FALSE;
 
                        /* all the rest */
+               case st_none:
+               case st_C_objprot:
+               case st_C_objimpl:
+               case st_C_objend:
+               case st_C_gnumacro:
+               case st_C_ignore:
+               case st_C_attribute:
+               case st_C_javastruct:
+               case st_C_operator:
+               case st_C_template:
+               case st_C_extern:
+               case st_C_define:
+               case st_C_typedef:
                default:
                        break;
                }
                return TRUE;
 
                /* all the rest */
+       case tinbody:
+       case tignore:
        default:
                break;
        }
@@ -2860,6 +2900,17 @@ bool *is_func_or_var;    /* OUT: function or variable found */
                return FALSE;
 
                /* all the rest */
+       case st_none:
+       case st_C_objprot:
+       case st_C_objimpl:
+       case st_C_objend:
+       case st_C_gnumacro:
+       case st_C_ignore:
+       case st_C_attribute:
+       case st_C_operator:
+       case st_C_extern:
+       case st_C_define:
+       case st_C_typedef:
        default:
                break;
        }
@@ -2887,6 +2938,20 @@ bool *is_func_or_var;    /* OUT: function or variable found */
                        return FALSE;
 
                        /* all the rest */
+               case st_none:
+               case st_C_objend:
+               case st_C_gnumacro:
+               case st_C_ignore:
+               case st_C_attribute:
+               case st_C_javastruct:
+               case st_C_operator:
+               case st_C_class:
+               case st_C_template:
+               case st_C_struct:
+               case st_C_extern:
+               case st_C_enum:
+               case st_C_define:
+               case st_C_typedef:
                default:
                        break;
                }
@@ -2947,6 +3012,9 @@ bool *is_func_or_var;     /* OUT: function or variable found */
                return FALSE;
 
                /* all the rest */
+       case otagseen:
+       case ocatseen:
+       case omethodtag:
        default:
                break;
        }
@@ -2963,6 +3031,12 @@ bool *is_func_or_var;    /* OUT: function or variable found */
                case fignore:
                case vignore:
                        break;
+               case fvnone:
+               case fdefunkey:
+               case fdefunname:
+               case foperator:
+               case fvnameseen:
+               case fstartlist:
                default:
                        fvdef = fvnone;
                }
@@ -3003,6 +3077,10 @@ bool *is_func_or_var;    /* OUT: function or variable found */
                                break;
 
                                /* all the rest */
+                       case tkeyseen:
+                       case tinbody:
+                       case tend:
+                       case tignore:
                        default:
                                break;
                        }
@@ -3023,12 +3101,31 @@ bool *is_func_or_var;   /* OUT: function or variable found */
                        return TRUE;
 
                        /* all the rest */
+               case fdefunname:
+               case foperator:
+               case fstartlist:
+               case finlist:
+               case flistseen:
+               case fignore:
+               case vignore:
                default:
                        break;
                }
                break;
 
                /* all the rest */
+       case st_C_objprot:
+       case st_C_objimpl:
+       case st_C_objend:
+       case st_C_gnumacro:
+       case st_C_attribute:
+       case st_C_javastruct:
+       case st_C_class:
+       case st_C_template:
+       case st_C_struct:
+       case st_C_enum:
+       case st_C_define:
+       case st_C_typedef:
        default:
                break;
        }
@@ -3259,6 +3356,11 @@ FILE *inf;                       /* input file */
                        case fignore:
                        case vignore:
                                break;
+                       case fvnone:
+                       case fdefunname:
+                       case foperator:
+                       case fvnameseen:
+                       case flistseen:
                        default:
                                fvextern = FALSE;
                                fvdef = fvnone;
@@ -3515,6 +3617,14 @@ FILE *inf;                       /* input file */
                                                break;
 
                                                /* all the rest */
+                                       case fvnone:
+                                       case fdefunkey:
+                                       case fdefunname:
+                                       case foperator:
+                                       case fvnameseen:
+                                       case finlist:
+                                       case fignore:
+                                       case vignore:
                                        default:
                                                break;
                                        }
@@ -3529,6 +3639,8 @@ FILE *inf;                        /* input file */
                                        break;
 
                                        /* all the rest */
+                               case ddefineseen:
+                               case dignorerest:
                                default:
                                        break;
                                }
@@ -3571,6 +3683,15 @@ FILE *inf;                       /* input file */
                                break;
 
                                /* all the rest */
+                       case onone:
+                       case oprotocol:
+                       case oimplementation:
+                       case oparenseen:
+                       case ocatseen:
+                       case oinbody:
+                       case omethodsign:
+                       case omethodcolon:
+                       case oignore:
                        default:
                                break;
                        }
@@ -3623,6 +3744,13 @@ FILE *inf;                       /* input file */
                                                && plainc && instruct))
                                                make_C_tag (TRUE);  /* a function */
                                        /* FALLTHRU */
+                               case fvnone:
+                               case fdefunkey:
+                               case fdefunname:
+                               case foperator:
+                               case fstartlist:
+                               case finlist:
+                               case vignore:
                                default:
                                        fvextern = FALSE;
                                        fvdef = fvnone;
@@ -3633,6 +3761,7 @@ FILE *inf;                        /* input file */
                                                token.valid = FALSE;
                                } /* switch (fvdef) */
                                /* FALLTHRU */
+                       case tkeyseen:
                        default:
                                if (!instruct)
                                        typdef = tnone;
@@ -3652,6 +3781,16 @@ FILE *inf;                       /* input file */
                                break;
 
                                /* all the rest */
+                       case onone:
+                       case oprotocol:
+                       case oimplementation:
+                       case otagseen:
+                       case oparenseen:
+                       case ocatseen:
+                       case oinbody:
+                       case omethodsign:
+                       case omethodcolon:
+                       case oignore:
                        default:
                                break;
                        }
@@ -3687,6 +3826,7 @@ FILE *inf;                        /* input file */
                                        fvdef = fvnone;
                                token.valid = FALSE;
                                break;
+                       case fvnone:
                        default:
                                fvdef = fvnone;
                        }
@@ -3720,12 +3860,19 @@ FILE *inf;                      /* input file */
                                                && (!fvextern || declarations)))
                                                make_C_tag (FALSE); /* a variable */
                                        /* FALLTHRU */
+                               case fvnone:
+                               case fdefunkey:
+                               case fdefunname:
+                               case fstartlist:
+                               case flistseen:
                                default:
                                        fvdef = fvnone;
                                }
                                break;
 
                                /* all the rest */
+                       case tkeyseen:
+                       case tignore:
                        default:
                                break;
                        }
@@ -3763,6 +3910,13 @@ FILE *inf;                       /* input file */
                                break;
 
                                /* all the rest */
+                       case fvnone:
+                       case fdefunkey:
+                       case fdefunname:
+                       case fstartlist:
+                       case finlist:
+                       case fignore:
+                       case vignore:
                        default:
                                break;
                        }
@@ -3792,6 +3946,14 @@ FILE *inf;                       /* input file */
                                        break;
 
                                        /* all the rest */
+                               case fvnone:
+                               case fdefunkey:
+                               case fdefunname:
+                               case foperator:
+                               case fvnameseen:
+                               case flistseen:
+                               case fignore:
+                               case vignore:
                                default:
                                        break;
                                }
@@ -3836,6 +3998,15 @@ FILE *inf;                       /* input file */
                                        make_C_tag (TRUE); /* an Objective C method */
                                        objdef = oinbody;
                                        break;
+                               case onone:
+                               case oprotocol:
+                               case oimplementation:
+                               case oparenseen:
+                               case ocatseen:
+                               case oinbody:
+                               case omethodsign:
+                               case omethodcolon:
+                               case oignore:
                                default:
                                        /* Neutralize `extern "C" {' grot. */
                                        if (bracelev == 0 && structdef == snone && nestlev == 0
@@ -3845,6 +4016,13 @@ FILE *inf;                       /* input file */
                                break;
 
                                /* all the rest */
+                       case fdefunkey:
+                       case fdefunname:
+                       case foperator:
+                       case fvnameseen:
+                       case fstartlist:
+                       case finlist:
+                       case vignore:
                        default:
                                break;
                        }
@@ -3862,6 +4040,7 @@ FILE *inf;                        /* input file */
                                break;
 
                                /* all the rest */
+                       case snone:
                        default:
                                break;
                        }
@@ -3918,6 +4097,11 @@ FILE *inf;                       /* input file */
                                    || (globals && bracelev == 0 && (!fvextern || declarations)))
                                        make_C_tag (FALSE); /* a variable */
                                /* FALLTHRU */
+                       case fvnone:
+                       case fdefunkey:
+                       case fdefunname:
+                       case fstartlist:
+                       case flistseen:
                        default:
                                fvdef = vignore;
                        }
@@ -3958,6 +4142,12 @@ FILE *inf;                       /* input file */
                        case fignore:
                        case vignore:
                                break;
+                       case fvnone:
+                       case fdefunkey:
+                       case fdefunname:
+                       case fvnameseen:
+                       case fstartlist:
+                       case flistseen:
                        default:
                                fvdef = fvnone;
                        }
@@ -6590,9 +6780,9 @@ char *s1, *s2, *s3;
        int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
        char *result = xnew (len1 + len2 + len3 + 1, char);
 
-       strcpy (result, s1);
-       strcpy (result + len1, s2);
-       strcpy (result + len1 + len2, s3);
+       strncpy(result, s1, len1+1);
+       strncpy(result + len1, s2, len2+1);
+       strncpy(result + len1 + len2, s3, len3+1);
        result[len1 + len2 + len3] = '\0';
 
        return result;