aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2012-05-09 17:27:32 -0700
committerPaul Eggert2012-05-09 17:27:32 -0700
commitdb5a3003037a018f47151bb6daaf249d422be2ba (patch)
tree11d9c39e9004ce36773b5b37c818b0e212c16d98
parent5cb6795418c32b8077e3818680a65cba00ea66b6 (diff)
downloademacs-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/ChangeLog8
-rw-r--r--lib-src/etags.c39
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 @@
12012-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
12012-05-05 Jim Meyering <meyering@redhat.com> 92012-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 **);
380static void analyse_regex (char *); 381static void analyse_regex (char *);
381static void free_regexps (void); 382static void free_regexps (void);
382static void regex_tag_multiline (void); 383static void regex_tag_multiline (void);
383static void error (const char *, const char *); 384static void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
384static void suggest_asking_for_help (void) NO_RETURN; 385static void suggest_asking_for_help (void) NO_RETURN;
385void fatal (const char *, const char *) NO_RETURN; 386void fatal (const char *, const char *) NO_RETURN;
386static void pfatal (const char *) NO_RETURN; 387static 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 = &empty;
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. */
6427static void 6423static void
6428error (const char *s1, const char *s2) 6424error (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