X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=binutils%2Fnlmheader.y;h=f42ae905805e5f77fc3f9de2d8675bd97ca2136a;hb=1a2ab13a57bdddae90088e334aa792d2af742a3d;hp=248bec3a503b4f8801e76b5ef385c55c6de00d78;hpb=e98fe4f7b54cbdf29aef9287bbb1bea8801dd05a;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/nlmheader.y b/binutils/nlmheader.y index 248bec3a50..f42ae90580 100644 --- a/binutils/nlmheader.y +++ b/binutils/nlmheader.y @@ -1,21 +1,23 @@ %{/* nlmheader.y - parse NLM header specification keywords. - Copyright (C) 1993 Free Software Foundation, Inc. + Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2005, 2007 + Free Software Foundation, Inc. -This file is part of GNU Binutils. + This file is part of GNU Binutils. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ /* Written by Ian Lance Taylor . @@ -26,14 +28,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ This implementation is based on the description in the NetWare Tool Maker Specification manual, edition 1.0. */ -#include -#include -#include -#include "bfd.h" #include "sysdep.h" -#include "bucomm.h" +#include "safe-ctype.h" +#include "bfd.h" #include "nlm/common.h" #include "nlm/internal.h" +#include "bucomm.h" #include "nlmconv.h" /* Information is stored in the structures pointed to by these @@ -50,7 +50,7 @@ char *check_procedure; /* File named by CUSTOM. */ char *custom_file; /* Whether to generate debugging information (DEBUG). */ -boolean debug_info; +bfd_boolean debug_info; /* Procedure named by EXIT. */ char *exit_procedure; /* Exported symbols (EXPORT). */ @@ -60,7 +60,7 @@ struct string_list *input_files; /* Map file name (MAP, FULLMAP). */ char *map_file; /* Whether a full map has been requested (FULLMAP). */ -boolean full_map; +bfd_boolean full_map; /* File named by HELP. */ char *help_file; /* Imported symbols (IMPORT). */ @@ -76,7 +76,7 @@ char *sharelib_file; /* Start procedure name (START). */ char *start_procedure; /* VERBOSE. */ -boolean verbose; +bfd_boolean verbose; /* RPC description file (XDCDATA). */ char *rpc_file; @@ -91,22 +91,21 @@ static char *symbol_prefix; #define yyerror(msg) nlmheader_error (msg); /* Local functions. */ -static int yylex PARAMS ((void)); -static void nlmlex_file_push PARAMS ((const char *)); -static boolean nlmlex_file_open PARAMS ((const char *)); -static int nlmlex_buf_init PARAMS ((void)); -static char nlmlex_buf_add PARAMS ((int)); -static long nlmlex_get_number PARAMS ((const char *)); -static void nlmheader_identify PARAMS ((void)); -static void nlmheader_warn PARAMS ((const char *, int)); -static void nlmheader_error PARAMS ((const char *)); -static struct string_list * string_list_cons PARAMS ((char *, - struct string_list *)); -static struct string_list * string_list_append PARAMS ((struct string_list *, - struct string_list *)); -static struct string_list * string_list_append1 PARAMS ((struct string_list *, - char *)); -static char *xstrdup PARAMS ((const char *)); +static int yylex (void); +static void nlmlex_file_push (const char *); +static bfd_boolean nlmlex_file_open (const char *); +static int nlmlex_buf_init (void); +static char nlmlex_buf_add (int); +static long nlmlex_get_number (const char *); +static void nlmheader_identify (void); +static void nlmheader_warn (const char *, int); +static void nlmheader_error (const char *); +static struct string_list * string_list_cons (char *, struct string_list *); +static struct string_list * string_list_append (struct string_list *, + struct string_list *); +static struct string_list * string_list_append1 (struct string_list *, + char *); +static char *xstrdup (const char *); %} @@ -121,8 +120,8 @@ static char *xstrdup PARAMS ((const char *)); %token CHECK CODESTART COPYRIGHT CUSTOM DATE DEBUG DESCRIPTION EXIT %token EXPORT FLAG_ON FLAG_OFF FULLMAP HELP IMPORT INPUT MAP MESSAGES %token MODULE MULTIPLE OS_DOMAIN OUTPUT PSEUDOPREEMPTION REENTRANT -%token SCREENNAME SHARELIB STACK STACKSIZE START SYNCHRONIZE -%token THREADNAME TYPE VERBOSE VERSION XDCDATA +%token SCREENNAME SHARELIB STACK START SYNCHRONIZE +%token THREADNAME TYPE VERBOSE VERSIONK XDCDATA /* Arguments. */ @@ -141,7 +140,7 @@ static char *xstrdup PARAMS ((const char *)); /* The entire file is just a list of commands. */ -file: +file: commands ; @@ -161,7 +160,7 @@ command: } | CODESTART STRING { - nlmheader_warn ("CODESTART is not implemented; sorry", -1); + nlmheader_warn (_("CODESTART is not implemented; sorry"), -1); free ($2); } | COPYRIGHT QUOTED_STRING @@ -172,7 +171,7 @@ command: len = strlen ($2); if (len >= NLM_MAX_COPYRIGHT_MESSAGE_LENGTH) { - nlmheader_warn ("copyright string is too long", + nlmheader_warn (_("copyright string is too long"), NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1); len = NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1; } @@ -197,15 +196,15 @@ command: free ($3); free ($4); if (version_hdr->month < 1 || version_hdr->month > 12) - nlmheader_warn ("illegal month", -1); + nlmheader_warn (_("illegal month"), -1); if (version_hdr->day < 1 || version_hdr->day > 31) - nlmheader_warn ("illegal day", -1); + nlmheader_warn (_("illegal day"), -1); if (version_hdr->year < 1900 || version_hdr->year > 3000) - nlmheader_warn ("illegal year", -1); + nlmheader_warn (_("illegal year"), -1); } | DEBUG { - debug_info = true; + debug_info = TRUE; } | DESCRIPTION QUOTED_STRING { @@ -214,7 +213,7 @@ command: len = strlen ($2); if (len > NLM_MAX_DESCRIPTION_LENGTH) { - nlmheader_warn ("description string is too long", + nlmheader_warn (_("description string is too long"), NLM_MAX_DESCRIPTION_LENGTH); len = NLM_MAX_DESCRIPTION_LENGTH; } @@ -248,12 +247,12 @@ command: | FULLMAP { map_file = ""; - full_map = true; + full_map = TRUE; } | FULLMAP STRING { map_file = $2; - full_map = true; + full_map = TRUE; } | HELP STRING { @@ -300,7 +299,7 @@ command: if (output_file == NULL) output_file = $2; else - nlmheader_warn ("ignoring duplicate OUTPUT statement", -1); + nlmheader_warn (_("ignoring duplicate OUTPUT statement"), -1); } | PSEUDOPREEMPTION { @@ -317,7 +316,7 @@ command: len = strlen ($2); if (len >= NLM_MAX_SCREEN_NAME_LENGTH) { - nlmheader_warn ("screen name is too long", + nlmheader_warn (_("screen name is too long"), NLM_MAX_SCREEN_NAME_LENGTH); len = NLM_MAX_SCREEN_NAME_LENGTH; } @@ -335,11 +334,6 @@ command: var_hdr->stackSize = nlmlex_get_number ($2); free ($2); } - | STACKSIZE STRING - { - var_hdr->stackSize = nlmlex_get_number ($2); - free ($2); - } | START STRING { start_procedure = $2; @@ -355,7 +349,7 @@ command: len = strlen ($2); if (len >= NLM_MAX_THREAD_NAME_LENGTH) { - nlmheader_warn ("thread name is too long", + nlmheader_warn (_("thread name is too long"), NLM_MAX_THREAD_NAME_LENGTH); len = NLM_MAX_THREAD_NAME_LENGTH; } @@ -371,9 +365,9 @@ command: } | VERBOSE { - verbose = true; + verbose = TRUE; } - | VERSION STRING STRING STRING + | VERSIONK STRING STRING STRING { long val; @@ -381,21 +375,23 @@ command: version_hdr->majorVersion = nlmlex_get_number ($2); val = nlmlex_get_number ($3); if (val < 0 || val > 99) - nlmheader_warn ("illegal minor version number (must be between 0 and 99)", + nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"), -1); else version_hdr->minorVersion = val; val = nlmlex_get_number ($4); - if (val < 1 || val > 26) - nlmheader_warn ("illegal revision number (must be between 1 and 26)", + if (val < 0) + nlmheader_warn (_("illegal revision number (must be between 0 and 26)"), -1); + else if (val > 26) + version_hdr->revision = 0; else version_hdr->revision = val; free ($2); free ($3); free ($4); } - | VERSION STRING STRING + | VERSIONK STRING STRING { long val; @@ -403,7 +399,7 @@ command: version_hdr->majorVersion = nlmlex_get_number ($2); val = nlmlex_get_number ($3); if (val < 0 || val > 99) - nlmheader_warn ("illegal minor version number (must be between 0 and 99)", + nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"), -1); else version_hdr->minorVersion = val; @@ -498,7 +494,7 @@ string_list: /* If strerror is just a macro, we want to use the one from libiberty since it will handle undefined values. */ #undef strerror -extern char *strerror (); +extern char *strerror PARAMS ((int)); /* The lexer is simple, too simple for flex. Keywords are only recognized at the start of lines. Everything else must be an @@ -539,9 +535,8 @@ static struct input current; /* Start the lexer going on the main input file. */ -boolean -nlmlex_file (name) - const char *name; +bfd_boolean +nlmlex_file (const char *name) { current.next = NULL; return nlmlex_file_open (name); @@ -550,8 +545,7 @@ nlmlex_file (name) /* Start the lexer going on a subsidiary input file. */ static void -nlmlex_file_push (name) - const char *name; +nlmlex_file_push (const char *name) { struct input *push; @@ -568,21 +562,20 @@ nlmlex_file_push (name) /* Start lexing from a file. */ -static boolean -nlmlex_file_open (name) - const char *name; +static bfd_boolean +nlmlex_file_open (const char *name) { current.file = fopen (name, "r"); if (current.file == NULL) { fprintf (stderr, "%s:%s: %s\n", program_name, name, strerror (errno)); ++parse_errors; - return false; + return FALSE; } current.name = xstrdup (name); current.lineno = 1; current.state = BEGINNING_OF_LINE; - return true; + return TRUE; } /* Table used to turn keywords into tokens. */ @@ -593,7 +586,7 @@ struct keyword_tokens_struct int token; }; -struct keyword_tokens_struct keyword_tokens[] = +static struct keyword_tokens_struct keyword_tokens[] = { { "CHECK", CHECK }, { "CODESTART", CODESTART }, @@ -621,13 +614,13 @@ struct keyword_tokens_struct keyword_tokens[] = { "SCREENNAME", SCREENNAME }, { "SHARELIB", SHARELIB }, { "STACK", STACK }, - { "STACKSIZE", STACKSIZE }, + { "STACKSIZE", STACK }, { "START", START }, { "SYNCHRONIZE", SYNCHRONIZE }, { "THREADNAME", THREADNAME }, { "TYPE", TYPE }, { "VERBOSE", VERBOSE }, - { "VERSION", VERSION }, + { "VERSION", VERSIONK }, { "XDCDATA", XDCDATA } }; @@ -643,7 +636,7 @@ static int lex_pos; ((void) (lex_buf != NULL ? lex_pos = 0 : nlmlex_buf_init ())) static int -nlmlex_buf_init () +nlmlex_buf_init (void) { lex_size = 10; lex_buf = xmalloc (lex_size + 1); @@ -661,8 +654,7 @@ nlmlex_buf_init () : nlmlex_buf_add (c))) static char -nlmlex_buf_add (c) - int c; +nlmlex_buf_add (int c) { if (lex_pos >= lex_size) { @@ -677,7 +669,7 @@ nlmlex_buf_add (c) code. */ static int -yylex () +yylex (void) { int c; @@ -686,7 +678,7 @@ tail_recurse: c = getc (current.file); /* Commas are treated as whitespace characters. */ - while (isspace ((unsigned char) c) || c == ',') + while (ISSPACE (c) || c == ',') { current.state = IN_LINE; if (c == '\n') @@ -739,9 +731,9 @@ tail_recurse: if (c == '\n') ++current.lineno; } - while (isspace ((unsigned char) c)); + while (ISSPACE (c)); BUF_INIT (); - while (! isspace ((unsigned char) c) && c != EOF) + while (! ISSPACE (c) && c != EOF) { BUF_ADD (c); c = getc (current.file); @@ -749,7 +741,7 @@ tail_recurse: BUF_FINISH (); ungetc (c, current.file); - + nlmlex_file_push (lex_buf); goto tail_recurse; } @@ -759,25 +751,22 @@ tail_recurse: if (current.state == BEGINNING_OF_LINE) { BUF_INIT (); - while (isalnum ((unsigned char) c) || c == '_') + while (ISALNUM (c) || c == '_') { - if (islower ((unsigned char) c)) - BUF_ADD (toupper ((unsigned char) c)); - else - BUF_ADD (c); + BUF_ADD (TOUPPER (c)); c = getc (current.file); } BUF_FINISH (); - if (c != EOF && ! isspace ((unsigned char) c) && c != ',') + if (c != EOF && ! ISSPACE (c) && c != ',') { nlmheader_identify (); - fprintf (stderr, "%s:%d: illegal character in keyword: %c\n", + fprintf (stderr, _("%s:%d: illegal character in keyword: %c\n"), current.name, current.lineno, c); } else { - int i; + unsigned int i; for (i = 0; i < KEYWORD_COUNT; i++) { @@ -791,9 +780,9 @@ tail_recurse: return keyword_tokens[i].token; } } - + nlmheader_identify (); - fprintf (stderr, "%s:%d: unrecognized keyword: %s\n", + fprintf (stderr, _("%s:%d: unrecognized keyword: %s\n"), current.name, current.lineno, lex_buf); } @@ -830,7 +819,7 @@ tail_recurse: if (c == EOF) { nlmheader_identify (); - fprintf (stderr, "%s:%d: end of file in quoted string\n", + fprintf (stderr, _("%s:%d: end of file in quoted string\n"), current.name, start_lineno); ++parse_errors; } @@ -842,7 +831,7 @@ tail_recurse: /* Gather a generic argument. */ BUF_INIT (); - while (! isspace (c) + while (! ISSPACE (c) && c != ',' && c != COMMENT_CHAR && c != '(' @@ -863,15 +852,14 @@ tail_recurse: /* Get a number from a string. */ static long -nlmlex_get_number (s) - const char *s; +nlmlex_get_number (const char *s) { long ret; char *send; ret = strtol (s, &send, 10); if (*send != '\0') - nlmheader_warn ("bad number", -1); + nlmheader_warn (_("bad number"), -1); return ret; } @@ -881,13 +869,13 @@ nlmlex_get_number (s) number. */ static void -nlmheader_identify () +nlmheader_identify (void) { static int done; if (! done) { - fprintf (stderr, "%s: problems in NLM command language input:\n", + fprintf (stderr, _("%s: problems in NLM command language input:\n"), program_name); done = 1; } @@ -896,9 +884,7 @@ nlmheader_identify () /* Issue a warning. */ static void -nlmheader_warn (s, imax) - const char *s; - int imax; +nlmheader_warn (const char *s, int imax) { nlmheader_identify (); fprintf (stderr, "%s:%d: %s", current.name, current.lineno, s); @@ -910,8 +896,7 @@ nlmheader_warn (s, imax) /* Report an error. */ static void -nlmheader_error (s) - const char *s; +nlmheader_error (const char *s) { nlmheader_warn (s, -1); ++parse_errors; @@ -920,9 +905,7 @@ nlmheader_error (s) /* Add a string to a string list. */ static struct string_list * -string_list_cons (s, l) - char *s; - struct string_list *l; +string_list_cons (char *s, struct string_list *l) { struct string_list *ret; @@ -935,9 +918,7 @@ string_list_cons (s, l) /* Append a string list to another string list. */ static struct string_list * -string_list_append (l1, l2) - struct string_list *l1; - struct string_list *l2; +string_list_append (struct string_list *l1, struct string_list *l2) { register struct string_list **pp; @@ -950,9 +931,7 @@ string_list_append (l1, l2) /* Append a string to a string list. */ static struct string_list * -string_list_append1 (l, s) - struct string_list *l; - char *s; +string_list_append1 (struct string_list *l, char *s) { struct string_list *n; register struct string_list **pp; @@ -969,8 +948,7 @@ string_list_append1 (l, s) /* Duplicate a string in memory. */ static char * -xstrdup (s) - const char *s; +xstrdup (const char *s) { unsigned long len; char *ret;