diff options
author | Ulrich Drepper <drepper@redhat.com> | 1996-10-17 01:51:38 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1996-10-17 01:51:38 +0000 |
commit | 0d204b0a522b9fef2168e1808a0566c9209d0893 (patch) | |
tree | 70ea6e1aec8f2cc5ab9b53f4ef15f24a9503fd5a /sunrpc/rpc_scan.c | |
parent | b207ff4bd88564215ef7c68e61ec46aa4cb461c1 (diff) | |
download | glibc-0d204b0a522b9fef2168e1808a0566c9209d0893.zip glibc-0d204b0a522b9fef2168e1808a0566c9209d0893.tar.gz glibc-0d204b0a522b9fef2168e1808a0566c9209d0893.tar.bz2 |
update from main archive 961016cvs/libc-961019cvs/libc-961018cvs/libc-961017
Thu Oct 17 01:55:34 1996 Ulrich Drepper <drepper@cygnus.com>
* sunrpc/Makefile ($(objpfx)rpcsvc/%.h, $(objpfx)x%.c): Write
output to $@T and move to $@ later since the new rpcgen will not
overwrite existing files.
* po/Makefile (libc.pot): Fix typo.
Sun Oct 13 20:52:07 1996 Thorsten Kukuk <kukuk@weber.uni-paderborn.de>
Update rpcgen program to TI-rpc code.
* sunrpc/Makefile (rpcgen-objs): Add rpc_tblout.o and rpc_sample.o.
(distribute): Add proto.h.
* sunrpc/proto.h: New file. Prototypes for all the RPC functions.
* sunrpc/rpc_clntout.c: Change to allow generation of ISO C code.
* sunrpc/rpc_cout.c: Likewise.
* sunrpc/rpc_hout.c: Likewise.
* sunrpc/rpc_main.c: Likewise.
* sunrpc/rpc_parse.c: Likewise.
* sunrpc/rpc_parse.h: Likewise.
* sunrpc/rpc_scan.c: Likewise.
* sunrpc/rpc_scan.h: Likewise.
* sunrpc/rpc_svcout.c: Likewise.
* sunrpc/rpc_util.c: Likewise.
* sunrpc/rpc_util.h: Likewise.
* sunrpc/rpc_tblout.c: New file.
* sunrpc/rpc_sample.c: Likewise.
Thu Oct 17 00:26:20 1996 NIIBE Yutaka <gniibe@mri.co.jp>
* sysdeps/unix/opendir.c: Add semicolon for consistency.
Wed Oct 16 12:26:53 1996 Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
* locale/progams/localedef.c (main): Test with -1 to find out
whether read failed.
Wed Oct 16 14:54:59 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/i386/clone.S: Use JUMPTARGET and
PSEUDO_END macro.
Tue Oct 15 21:27:42 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/sigcontext.h: Removed.
Tue Oct 15 15:52:29 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/clone.S: Add CALL_MCOUNT.
* sysdeps/unix/sysv/linux/m68k/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sigreturn.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/socket.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S (__errno_location):
Likewise.
* sysdeps/unix/sysv/linux/m68k/syscall.S: Likewise.
Correct generation of system call.
Tue Oct 15 15:13:16 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (sysd-Makefile): Fix command so that it works in the
subdirectories.
(BUILD_CFLAGS): Change back using $(..) instead of
$(common-objpfx), the latter fails in the toplevel directory when
$(objdir) is relative.
(common-objdir-compile): Run compiler in $(objdir).
* sysdeps/posix/Makefile (mk-stdiolim): Likewise.
Tue Oct 15 23:39:48 1996 Ulrich Drepper <drepper@cygnus.com>
* string/string.h [__USE_SVID]: Add prototype for swab.
* time/sys/time.h [__USE_BSD]: Add prototype for ualarm.
Reported by Andreas Jaeger.
The available nlist implementation is not generally usable.
Especially on the currently supported ELF systems the nlist
function comes with the libelf.
* misc/Makefile (headers): Remove nlist.h.
(routines): Remove nlist.
* Makefile ($(objpfx)version-info.h): Include information about
system the libc is built on in version-info.h file.
* po/Makefile (distribute): Add header.pot.
Tue Oct 15 16:34:15 1996 Andreas Jaeger <aj@arthur.pfalz.de>
* sysdeps/unix/sysv/linux/sleep.c: Include file with prototype.
* sysdeps/unix/sysv/linux/reboot.c: Likewise.
* misc/error.c: Likewise.
Tue Oct 15 22:41:27 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/syscalls.list: Add {get,set}resuid.
Tue Oct 15 08:06:02 1996 Andreas Jaeger <aj@arthur.pfalz.de>
* crypt/Makefiel (rpath-link): Extend search path to current directory.
Fri Oct 11 09:18:06 1996 Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
* sysdeps/i386/i586/strlen.S: Correct handling of prolog for
aligning pointer.
Tue Oct 15 02:13:21 1996 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfprintf.c: Don't declare __flockfile as weak.
* crypt/md5-crypt.c (md5_crypt_r): Add cast to prevent warning.
Sun Oct 13 19:16:10 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/sysdep.h (POUND): Macro removed,
replaced by `&'.
(PSEUDO_END): Provide definition to use .size directive.
(PSEUDO): Don't interpret negative return values less than -128 as
syscall error.
* sysdeps/unix/sysv/linux/m68k/syscall.S (syscall): Likewise.
* sysdeps/m68k/bsd-_setjmp.S: Use PSEUDO_END macro to provide
.size directive.
* sysdeps/m68k/bsd-setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/clone.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sigreturn.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/socket.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Use PSEUDO_END instead of
explicit .size directive.
* libio/iogets.c: Warn when gets is used.
cd * time/strptime.c: Recognize %s, %u, %g, and %G format.
Diffstat (limited to 'sunrpc/rpc_scan.c')
-rw-r--r-- | sunrpc/rpc_scan.c | 220 |
1 files changed, 117 insertions, 103 deletions
diff --git a/sunrpc/rpc_scan.c b/sunrpc/rpc_scan.c index 41049b6..c0293a3 100644 --- a/sunrpc/rpc_scan.c +++ b/sunrpc/rpc_scan.c @@ -1,11 +1,11 @@ -/* @(#)rpc_scan.c 2.1 88/08/01 4.0 RPCSRC */ /* * Sun RPC is a product of Sun Microsystems, Inc. and is provided for * unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify Sun RPC without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or - * program developed by the user. + * program developed by the user or with the express written consent of + * Sun Microsystems, Inc. * * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR @@ -27,19 +27,24 @@ * 2550 Garcia Avenue * Mountain View, California 94043 */ -#ifndef lint -static char sccsid[] = "@(#)rpc_scan.c 1.6 87/06/24 (C) 1987 SMI"; -#endif /* - * rpc_scan.c, Scanner for the RPC protocol compiler - * Copyright (C) 1987, Sun Microsystems, Inc. + * From: @(#)rpc_scan.c 1.11 89/02/22 (C) 1987 SMI + */ +char scan_rcsid[] = + "$Id$"; + +/* + * rpc_scan.c, Scanner for the RPC protocol compiler + * Copyright (C) 1987, Sun Microsystems, Inc. */ #include <stdio.h> #include <ctype.h> -#include <strings.h> +#include <string.h> #include "rpc_scan.h" +#include "rpc_parse.h" #include "rpc_util.h" +#include "proto.h" #define startcomment(where) (where[0] == '/' && where[1] == '*') #define endcomment(where) (where[-1] == '*' && where[0] == '/') @@ -47,13 +52,21 @@ static char sccsid[] = "@(#)rpc_scan.c 1.6 87/06/24 (C) 1987 SMI"; static int pushed = 0; /* is a token pushed */ static token lasttok; /* last token, if pushed */ +static void unget_token(token *tokp); +static void findstrconst(const char **str, const char **val); +static void findchrconst(const char **str, const char **val); +static void findconst(const char **str, const char **val); +static void findkind(const char **mark, token *tokp); +static int cppline(const char *line); +static int directive(const char *line); +static void printdirective(const char *line); +static void docppline(const char *line, int *lineno, const char **fname); + /* - * scan expecting 1 given token + * scan expecting 1 given token */ void -scan(expect, tokp) - tok_kind expect; - token *tokp; +scan(tok_kind expect, token *tokp) { get_token(tokp); if (tokp->kind != expect) { @@ -62,13 +75,10 @@ scan(expect, tokp) } /* - * scan expecting 2 given tokens + * scan expecting any of the 2 given tokens */ void -scan2(expect1, expect2, tokp) - tok_kind expect1; - tok_kind expect2; - token *tokp; +scan2(tok_kind expect1, tok_kind expect2, token *tokp) { get_token(tokp); if (tokp->kind != expect1 && tokp->kind != expect2) { @@ -77,14 +87,10 @@ scan2(expect1, expect2, tokp) } /* - * scan expecting 3 given token + * scan expecting any of the 3 given token */ void -scan3(expect1, expect2, expect3, tokp) - tok_kind expect1; - tok_kind expect2; - tok_kind expect3; - token *tokp; +scan3(tok_kind expect1, tok_kind expect2, tok_kind expect3, token *tokp) { get_token(tokp); if (tokp->kind != expect1 && tokp->kind != expect2 @@ -93,43 +99,36 @@ scan3(expect1, expect2, expect3, tokp) } } - /* - * scan expecting a constant, possibly symbolic + * scan expecting a constant, possibly symbolic */ void -scan_num(tokp) - token *tokp; +scan_num(token *tokp) { get_token(tokp); switch (tokp->kind) { case TOK_IDENT: break; default: - error(_("constant or identifier expected")); + error("constant or identifier expected"); } } - /* - * Peek at the next token + * Peek at the next token */ void -peek(tokp) - token *tokp; +peek(token *tokp) { get_token(tokp); unget_token(tokp); } - /* - * Peek at the next token and scan it if it matches what you expect + * Peek at the next token and scan it if it matches what you expect */ int -peekscan(expect, tokp) - tok_kind expect; - token *tokp; +peekscan(tok_kind expect, token *tokp) { peek(tokp); if (tokp->kind == expect) { @@ -139,14 +138,11 @@ peekscan(expect, tokp) return (0); } - - /* - * Get the next token, printing out any directive that are encountered. + * Get the next token, printing out any directive that are encountered. */ void -get_token(tokp) - token *tokp; +get_token(token *tokp) { int commenting; @@ -161,14 +157,15 @@ get_token(tokp) for (;;) { if (!fgets(curline, MAXLINESIZE, fin)) { tokp->kind = TOK_EOF; - *where = 0; + *curline = 0; + where = curline; return; } linenum++; if (commenting) { break; } else if (cppline(curline)) { - docppline(curline, &linenum, + docppline(curline, &linenum, &infilename); } else if (directive(curline)) { printdirective(curline); @@ -182,10 +179,12 @@ get_token(tokp) where++; /* eat */ } } else if (commenting) { - where++; - if (endcomment(where)) { - where++; - commenting--; + for (where++; *where; where++) { + if (endcomment(where)) { + where++; + commenting--; + break; + } } } else if (startcomment(where)) { where += 2; @@ -196,7 +195,7 @@ get_token(tokp) } /* - * 'where' is not whitespace, comment or directive Must be a token! + * 'where' is not whitespace, comment or directive Must be a token! */ switch (*where) { case ':': @@ -256,6 +255,10 @@ get_token(tokp) tokp->kind = TOK_STRCONST; findstrconst(&where, &tokp->str); break; + case '\'': + tokp->kind = TOK_CHARCONST; + findchrconst(&where, &tokp->str); + break; case '-': case '0': @@ -272,13 +275,12 @@ get_token(tokp) findconst(&where, &tokp->str); break; - default: if (!(isalpha(*where) || *where == '_')) { char buf[100]; char *p; - s_print(buf, _("illegal character in file: ")); + s_print(buf, "illegal character in file: "); p = buf + strlen(buf); if (isprint(*where)) { s_print(p, "%c", *where); @@ -292,46 +294,67 @@ get_token(tokp) } } - - -static -unget_token(tokp) - token *tokp; +static void +unget_token(token *tokp) { lasttok = *tokp; pushed = 1; } - -static -findstrconst(str, val) - char **str; - char **val; +static void +findstrconst(const char **str, const char **val) { - char *p; + const char *p; + char *tmp; int size; p = *str; do { - *p++; + p++; } while (*p && *p != '"'); if (*p == 0) { - error(_("unterminated string constant")); + error("unterminated string constant"); } p++; size = p - *str; - *val = alloc(size + 1); - (void) strncpy(*val, *str, size); - (*val)[size] = 0; + tmp = alloc(size + 1); + strncpy(tmp, *str, size); + tmp[size] = 0; + *val = tmp; *str = p; } -static -findconst(str, val) - char **str; - char **val; +static void +findchrconst(const char **str, const char **val) { - char *p; + const char *p; + char *tmp; + int size; + + p = *str; + do { + p++; + } while (*p && *p != '\''); + if (*p == 0) { + error("unterminated string constant"); + } + p++; + size = p - *str; + if (size != 3) { + error("empty char string"); + } + tmp = alloc(size + 1); + strncpy(tmp, *str, size); + tmp[size] = 0; + *val = tmp; + *str = p; +} + +static void +findconst(const char **str, const char **val) +{ + const char *p; + char *tmp; int size; p = *str; @@ -346,14 +369,13 @@ findconst(str, val) } while (isdigit(*p)); } size = p - *str; - *val = alloc(size + 1); - (void) strncpy(*val, *str, size); - (*val)[size] = 0; + tmp = alloc(size + 1); + strncpy(tmp, *str, size); + tmp[size] = 0; + *val = tmp; *str = p; } - - static token symbols[] = { {TOK_CONST, "const"}, {TOK_UNION, "union"}, @@ -379,16 +401,13 @@ static token symbols[] = { {TOK_EOF, "??????"}, }; - -static -findkind(mark, tokp) - char **mark; - token *tokp; +static void +findkind(const char **mark, token *tokp) { - int len; token *s; - char *str; + const char *str; + char *tmp; str = *mark; for (s = symbols; s->kind != TOK_EOF; s++) { @@ -404,38 +423,33 @@ findkind(mark, tokp) } tokp->kind = TOK_IDENT; for (len = 0; isalnum(str[len]) || str[len] == '_'; len++); - tokp->str = alloc(len + 1); - (void) strncpy(tokp->str, str, len); - tokp->str[len] = 0; + tmp = alloc(len + 1); + strncpy(tmp, str, len); + tmp[len] = 0; + tokp->str = tmp; *mark = str + len; } -static -cppline(line) - char *line; +static int +cppline(const char *line) { return (line == curline && *line == '#'); } -static -directive(line) - char *line; +static int +directive(const char *line) { return (line == curline && *line == '%'); } -static -printdirective(line) - char *line; +static void +printdirective(const char *line) { f_print(fout, "%s", line + 1); } -static -docppline(line, lineno, fname) - char *line; - int *lineno; - char **fname; +static void +docppline(const char *line, int *lineno, const char **fname) { char *file; int num; @@ -453,7 +467,7 @@ docppline(line, lineno, fname) line++; } if (*line != '"') { - error(_("preprocessor error")); + error("preprocessor error"); } line++; p = file = alloc(strlen(line) + 1); @@ -461,7 +475,7 @@ docppline(line, lineno, fname) *p++ = *line++; } if (*line == 0) { - error(_("preprocessor error")); + error("preprocessor error"); } *p = 0; if (*file == 0) { |