diff options
| author | Paul Eggert | 2012-05-09 17:27:32 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-05-09 17:27:32 -0700 |
| commit | db5a3003037a018f47151bb6daaf249d422be2ba (patch) | |
| tree | 11d9c39e9004ce36773b5b37c818b0e212c16d98 | |
| parent | 5cb6795418c32b8077e3818680a65cba00ea66b6 (diff) | |
| download | emacs-db5a3003037a018f47151bb6daaf249d422be2ba.tar.gz emacs-db5a3003037a018f47151bb6daaf249d422be2ba.zip | |
etags: pacify gcc -Wstack-protector on Ubuntu 12.04 x86
* etags.c: Include <stdarg.h>.
(error): Declare as printf-style, as that's what it really is.
All uses changed.
(add_regex): Use single char rather than array-of-one char.
| -rw-r--r-- | lib-src/ChangeLog | 8 | ||||
| -rw-r--r-- | lib-src/etags.c | 39 |
2 files changed, 27 insertions, 20 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index cf7494cb5d5..fe00c29cff7 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog | |||
| @@ -1,3 +1,11 @@ | |||
| 1 | 2012-05-10 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | etags: pacify gcc -Wstack-protector on Ubuntu 12.04 x86 | ||
| 4 | * etags.c: Include <stdarg.h>. | ||
| 5 | (error): Declare as printf-style, as that's what it really is. | ||
| 6 | All uses changed. | ||
| 7 | (add_regex): Use single char rather than array-of-one char. | ||
| 8 | |||
| 1 | 2012-05-05 Jim Meyering <meyering@redhat.com> | 9 | 2012-05-05 Jim Meyering <meyering@redhat.com> |
| 2 | 10 | ||
| 3 | * lib-src/pop.c (pop_stat, pop_list, pop_multi_first, pop_last): | 11 | * lib-src/pop.c (pop_stat, pop_list, pop_multi_first, pop_last): |
diff --git a/lib-src/etags.c b/lib-src/etags.c index c88473ad525..ccf97a8357f 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c | |||
| @@ -158,6 +158,7 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4"; | |||
| 158 | # endif | 158 | # endif |
| 159 | #endif /* HAVE_UNISTD_H */ | 159 | #endif /* HAVE_UNISTD_H */ |
| 160 | 160 | ||
| 161 | #include <stdarg.h> | ||
| 161 | #include <stdlib.h> | 162 | #include <stdlib.h> |
| 162 | #include <string.h> | 163 | #include <string.h> |
| 163 | #include <stdio.h> | 164 | #include <stdio.h> |
| @@ -380,7 +381,7 @@ static void get_tag (char *, char **); | |||
| 380 | static void analyse_regex (char *); | 381 | static void analyse_regex (char *); |
| 381 | static void free_regexps (void); | 382 | static void free_regexps (void); |
| 382 | static void regex_tag_multiline (void); | 383 | static void regex_tag_multiline (void); |
| 383 | static void error (const char *, const char *); | 384 | static void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2); |
| 384 | static void suggest_asking_for_help (void) NO_RETURN; | 385 | static void suggest_asking_for_help (void) NO_RETURN; |
| 385 | void fatal (const char *, const char *) NO_RETURN; | 386 | void fatal (const char *, const char *) NO_RETURN; |
| 386 | static void pfatal (const char *) NO_RETURN; | 387 | static void pfatal (const char *) NO_RETURN; |
| @@ -1140,7 +1141,7 @@ main (int argc, char **argv) | |||
| 1140 | case 'o': | 1141 | case 'o': |
| 1141 | if (tagfile) | 1142 | if (tagfile) |
| 1142 | { | 1143 | { |
| 1143 | error ("-o option may only be given once.", (char *)NULL); | 1144 | error ("-o option may only be given once."); |
| 1144 | suggest_asking_for_help (); | 1145 | suggest_asking_for_help (); |
| 1145 | /* NOTREACHED */ | 1146 | /* NOTREACHED */ |
| 1146 | } | 1147 | } |
| @@ -1224,7 +1225,7 @@ main (int argc, char **argv) | |||
| 1224 | 1225 | ||
| 1225 | if (nincluded_files == 0 && file_count == 0) | 1226 | if (nincluded_files == 0 && file_count == 0) |
| 1226 | { | 1227 | { |
| 1227 | error ("no input files specified.", (char *)NULL); | 1228 | error ("no input files specified."); |
| 1228 | suggest_asking_for_help (); | 1229 | suggest_asking_for_help (); |
| 1229 | /* NOTREACHED */ | 1230 | /* NOTREACHED */ |
| 1230 | } | 1231 | } |
| @@ -1447,7 +1448,7 @@ get_language_from_langname (const char *name) | |||
| 1447 | language *lang; | 1448 | language *lang; |
| 1448 | 1449 | ||
| 1449 | if (name == NULL) | 1450 | if (name == NULL) |
| 1450 | error ("empty language name", (char *)NULL); | 1451 | error ("empty language name"); |
| 1451 | else | 1452 | else |
| 1452 | { | 1453 | { |
| 1453 | for (lang = lang_names; lang->name != NULL; lang++) | 1454 | for (lang = lang_names; lang->name != NULL; lang++) |
| @@ -2233,7 +2234,7 @@ put_entries (register node *np) | |||
| 2233 | { | 2234 | { |
| 2234 | /* Ctags mode */ | 2235 | /* Ctags mode */ |
| 2235 | if (np->name == NULL) | 2236 | if (np->name == NULL) |
| 2236 | error ("internal error: NULL name in ctags mode.", (char *)NULL); | 2237 | error ("internal error: NULL name in ctags mode."); |
| 2237 | 2238 | ||
| 2238 | if (cxref_style) | 2239 | if (cxref_style) |
| 2239 | { | 2240 | { |
| @@ -2773,7 +2774,7 @@ consider_token (register char *str, register int len, register int c, int *c_ext | |||
| 2773 | case dignorerest: | 2774 | case dignorerest: |
| 2774 | return FALSE; | 2775 | return FALSE; |
| 2775 | default: | 2776 | default: |
| 2776 | error ("internal error: definedef value.", (char *)NULL); | 2777 | error ("internal error: definedef value."); |
| 2777 | } | 2778 | } |
| 2778 | 2779 | ||
| 2779 | /* | 2780 | /* |
| @@ -3061,7 +3062,7 @@ make_C_tag (int isfun) | |||
| 3061 | make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""), | 3062 | make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""), |
| 3062 | token_name.len + 17, isfun, token.line, | 3063 | token_name.len + 17, isfun, token.line, |
| 3063 | token.offset+token.length+1, token.lineno, token.linepos); | 3064 | token.offset+token.length+1, token.lineno, token.linepos); |
| 3064 | error ("INVALID TOKEN", NULL); | 3065 | error ("INVALID TOKEN"); |
| 3065 | } | 3066 | } |
| 3066 | 3067 | ||
| 3067 | token.valid = FALSE; | 3068 | token.valid = FALSE; |
| @@ -5706,7 +5707,7 @@ add_regex (char *regexp_pattern, language *lang) | |||
| 5706 | { | 5707 | { |
| 5707 | static struct re_pattern_buffer zeropattern; | 5708 | static struct re_pattern_buffer zeropattern; |
| 5708 | char sep, *pat, *name, *modifiers; | 5709 | char sep, *pat, *name, *modifiers; |
| 5709 | char empty[] = ""; | 5710 | char empty = '\0'; |
| 5710 | const char *err; | 5711 | const char *err; |
| 5711 | struct re_pattern_buffer *patbuf; | 5712 | struct re_pattern_buffer *patbuf; |
| 5712 | regexp *rp; | 5713 | regexp *rp; |
| @@ -5719,7 +5720,7 @@ add_regex (char *regexp_pattern, language *lang) | |||
| 5719 | 5720 | ||
| 5720 | if (strlen (regexp_pattern) < 3) | 5721 | if (strlen (regexp_pattern) < 3) |
| 5721 | { | 5722 | { |
| 5722 | error ("null regexp", (char *)NULL); | 5723 | error ("null regexp"); |
| 5723 | return; | 5724 | return; |
| 5724 | } | 5725 | } |
| 5725 | sep = regexp_pattern[0]; | 5726 | sep = regexp_pattern[0]; |
| @@ -5738,7 +5739,7 @@ add_regex (char *regexp_pattern, language *lang) | |||
| 5738 | if (modifiers == NULL) /* no terminating separator --> no name */ | 5739 | if (modifiers == NULL) /* no terminating separator --> no name */ |
| 5739 | { | 5740 | { |
| 5740 | modifiers = name; | 5741 | modifiers = name; |
| 5741 | name = empty; | 5742 | name = ∅ |
| 5742 | } | 5743 | } |
| 5743 | else | 5744 | else |
| 5744 | modifiers += 1; /* skip separator */ | 5745 | modifiers += 1; /* skip separator */ |
| @@ -5749,7 +5750,7 @@ add_regex (char *regexp_pattern, language *lang) | |||
| 5749 | { | 5750 | { |
| 5750 | case 'N': | 5751 | case 'N': |
| 5751 | if (modifiers == name) | 5752 | if (modifiers == name) |
| 5752 | error ("forcing explicit tag name but no name, ignoring", NULL); | 5753 | error ("forcing explicit tag name but no name, ignoring"); |
| 5753 | force_explicit_name = TRUE; | 5754 | force_explicit_name = TRUE; |
| 5754 | break; | 5755 | break; |
| 5755 | case 'i': | 5756 | case 'i': |
| @@ -5763,12 +5764,7 @@ add_regex (char *regexp_pattern, language *lang) | |||
| 5763 | need_filebuf = TRUE; | 5764 | need_filebuf = TRUE; |
| 5764 | break; | 5765 | break; |
| 5765 | default: | 5766 | default: |
| 5766 | { | 5767 | error ("invalid regexp modifier `%c', ignoring", modifiers[0]); |
| 5767 | char wrongmod [2]; | ||
| 5768 | wrongmod[0] = modifiers[0]; | ||
| 5769 | wrongmod[1] = '\0'; | ||
| 5770 | error ("invalid regexp modifier `%s', ignoring", wrongmod); | ||
| 5771 | } | ||
| 5772 | break; | 5768 | break; |
| 5773 | } | 5769 | } |
| 5774 | 5770 | ||
| @@ -6423,13 +6419,16 @@ suggest_asking_for_help (void) | |||
| 6423 | exit (EXIT_FAILURE); | 6419 | exit (EXIT_FAILURE); |
| 6424 | } | 6420 | } |
| 6425 | 6421 | ||
| 6426 | /* Print error message. `s1' is printf control string, `s2' is arg for it. */ | 6422 | /* Output a diagnostic with printf-style FORMAT and args. */ |
| 6427 | static void | 6423 | static void |
| 6428 | error (const char *s1, const char *s2) | 6424 | error (const char *format, ...) |
| 6429 | { | 6425 | { |
| 6426 | va_list ap; | ||
| 6427 | va_start (ap, format); | ||
| 6430 | fprintf (stderr, "%s: ", progname); | 6428 | fprintf (stderr, "%s: ", progname); |
| 6431 | fprintf (stderr, s1, s2); | 6429 | vfprintf (stderr, format, ap); |
| 6432 | fprintf (stderr, "\n"); | 6430 | fprintf (stderr, "\n"); |
| 6431 | va_end (ap); | ||
| 6433 | } | 6432 | } |
| 6434 | 6433 | ||
| 6435 | /* Return a newly-allocated string whose contents | 6434 | /* Return a newly-allocated string whose contents |