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_util.c | |
parent | b207ff4bd88564215ef7c68e61ec46aa4cb461c1 (diff) | |
download | glibc-0d204b0a522b9fef2168e1808a0566c9209d0893.tar.gz glibc-0d204b0a522b9fef2168e1808a0566c9209d0893.tar.xz glibc-0d204b0a522b9fef2168e1808a0566c9209d0893.zip |
update from main archive 961016 cvs/libc-961019 cvs/libc-961018 cvs/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_util.c')
-rw-r--r-- | sunrpc/rpc_util.c | 283 |
1 files changed, 167 insertions, 116 deletions
diff --git a/sunrpc/rpc_util.c b/sunrpc/rpc_util.c index ebb037a05e..cb4561ef39 100644 --- a/sunrpc/rpc_util.c +++ b/sunrpc/rpc_util.c @@ -1,11 +1,11 @@ -/* @(#)rpc_util.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,84 +27,96 @@ * 2550 Garcia Avenue * Mountain View, California 94043 */ -#ifndef lint -static char sccsid[] = "@(#)rpc_util.c 1.5 87/06/24 (C) 1987 SMI"; -#endif + +/* + * From: @(#)rpc_util.c 1.11 89/02/22 (C) 1987 SMI + */ +char util_rcsid[] = + "$Id$"; /* - * rpc_util.c, Utility routines for the RPC protocol compiler - * Copyright (C) 1987, Sun Microsystems, Inc. + * rpc_util.c, Utility routines for the RPC protocol compiler */ #include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <unistd.h> #include "rpc_scan.h" #include "rpc_parse.h" #include "rpc_util.h" +#include "proto.h" + +#define ARGEXT "argument" char curline[MAXLINESIZE]; /* current read line */ -char *where = curline; /* current point in line */ -int linenum = 0; /* current line number */ +const char *where = curline; /* current point in line */ +int linenum = 0; /* current line number */ -char *infilename; /* input filename */ +const char *infilename; /* input filename */ -#define NFILES 4 -char *outfiles[NFILES]; /* output file names */ +#define NFILES 7 +const char *outfiles[NFILES]; /* output file names */ int nfiles; -FILE *fout; /* file pointer of current output */ -FILE *fin; /* file pointer of current input */ +FILE *fout; /* file pointer of current output */ +FILE *fin; /* file pointer of current input */ -list *defined; /* list of defined things */ +list *defined; /* list of defined things */ + +static int findit(const definition *def, const char *type); +static const char *fixit(const char *type, const char *orig); +static int typedefed(const definition *def, const char *type); +static const char *toktostr(tok_kind kind); +static void printbuf(void); +static void printwhere(void); /* - * Reinitialize the world + * Reinitialize the world */ -reinitialize() +void +reinitialize(void) { - bzero(curline, MAXLINESIZE); + memset(curline, 0, MAXLINESIZE); where = curline; linenum = 0; defined = NULL; } /* - * string equality + * string equality */ -streq(a, b) - char *a; - char *b; +int +streq(const char *a, const char *b) { return (strcmp(a, b) == 0); } /* - * find a value in a list + * find a value in a list */ -char * -findval(lst, val, cmp) - list *lst; - char *val; - int (*cmp) (); - +definition * +findval(list *lst, const char *val, + int (*cmp)(const definition *, const char *)) { + for (; lst != NULL; lst = lst->next) { - if ((*cmp) (lst->val, val)) { + if (cmp(lst->val, val)) { return (lst->val); } } - return (NULL); + return NULL; } /* - * store a value in a list + * store a value in a list */ void -storeval(lstp, val) - list **lstp; - char *val; +storeval(list **lstp, definition *val) { list **l; list *lst; + for (l = lstp; *l != NULL; l = (list **) & (*l)->next); lst = ALLOC(list); lst->val = val; @@ -112,24 +124,18 @@ storeval(lstp, val) *l = lst; } - -static -findit(def, type) - definition *def; - char *type; +static int +findit(const definition *def, const char *type) { return (streq(def->def_name, type)); } - -static char * -fixit(type, orig) - char *type; - char *orig; +static const char * +fixit(const char *type, const char *orig) { definition *def; - def = (definition *) FINDVAL(defined, type, findit); + def = findval(defined, type, findit); if (def == NULL || def->def_kind != DEF_TYPEDEF) { return (orig); } @@ -143,29 +149,25 @@ fixit(type, orig) } } -char * -fixtype(type) - char *type; +const char * +fixtype(const char *type) { return (fixit(type, type)); } -char * -stringfix(type) - char *type; +const char * +stringfix(const char *type) { if (streq(type, "string")) { - return ("wrapstring"); - } else { - return (type); + return "wrapstring"; + } + else { + return type; } } void -ptype(prefix, type, follow) - char *prefix; - char *type; - int follow; +ptype(const char *prefix, const char *type, int follow) { if (prefix != NULL) { if (streq(prefix, "enum")) { @@ -183,11 +185,8 @@ ptype(prefix, type, follow) } } - -static -typedefed(def, type) - definition *def; - char *type; +static int +typedefed(const definition *def, const char *type) { if (def->def_kind != DEF_TYPEDEF || def->def.ty.old_prefix != NULL) { return (0); @@ -196,9 +195,8 @@ typedefed(def, type) } } -isvectordef(type, rel) - char *type; - relation rel; +int +isvectordef(const char *type, relation rel) { definition *def; @@ -211,7 +209,7 @@ isvectordef(type, rel) case REL_POINTER: return (0); case REL_ALIAS: - def = (definition *) FINDVAL(defined, type, typedefed); + def = findval(defined, type, typedefed); if (def == NULL) { return (0); } @@ -221,50 +219,50 @@ isvectordef(type, rel) } } - -static char * -locase(str) - char *str; +char * +locase(const char *str) { char c; static char buf[100]; char *p = buf; - while (c = *str++) { + while ((c = *str++)!=0) { *p++ = (c >= 'A' && c <= 'Z') ? (c - 'A' + 'a') : c; } *p = 0; return (buf); } +void +pvname_svc(const char *pname, const char *vnum) +{ + f_print(fout, "%s_%s_svc", locase(pname), vnum); +} void -pvname(pname, vnum) - char *pname; - char *vnum; +pvname(const char *pname, const char *vnum) { f_print(fout, "%s_%s", locase(pname), vnum); } - /* - * print a useful (?) error message, and then die + * print a useful (?) error message, and then die */ void -error(msg) - char *msg; +error(const char *msg) { printwhere(); - f_print(stderr, _("%s, line %d: "), infilename, linenum); + f_print(stderr, "%s, line %d: ", infilename, linenum); f_print(stderr, "%s\n", msg); crash(); } /* * Something went wrong, unlink any files that we may have created and then - * die. + * die. */ -crash() +void +crash(void) { int i; @@ -274,55 +272,50 @@ crash() exit(1); } - void -record_open(file) - char *file; +record_open(const char *file) { if (nfiles < NFILES) { outfiles[nfiles++] = file; - } else { - f_print(stderr, _("too many files!\n")); + } + else { + f_print(stderr, "too many files!\n"); crash(); } } static char expectbuf[100]; -static char *toktostr(); /* - * error, token encountered was not the expected one + * error, token encountered was not the expected one */ void -expected1(exp1) - tok_kind exp1; +expected1(tok_kind exp1) { - s_print(expectbuf, _("expected '%s'"), + s_print(expectbuf, "expected '%s'", toktostr(exp1)); error(expectbuf); } /* - * error, token encountered was not one of two expected ones + * error, token encountered was not one of two expected ones */ void -expected2(exp1, exp2) - tok_kind exp1, exp2; +expected2(tok_kind exp1, tok_kind exp2) { - s_print(expectbuf, _("expected '%s' or '%s'"), + s_print(expectbuf, "expected '%s' or '%s'", toktostr(exp1), toktostr(exp2)); error(expectbuf); } /* - * error, token encountered was not one of 3 expected ones + * error, token encountered was not one of 3 expected ones */ void -expected3(exp1, exp2, exp3) - tok_kind exp1, exp2, exp3; +expected3(tok_kind exp1, tok_kind exp2, tok_kind exp3) { - s_print(expectbuf, _("expected '%s', '%s' or '%s'"), + s_print(expectbuf, "expected '%s', '%s' or '%s'", toktostr(exp1), toktostr(exp2), toktostr(exp3)); @@ -330,9 +323,7 @@ expected3(exp1, exp2, exp3) } void -tabify(f, tab) - FILE *f; - int tab; +tabify(FILE *f, int tab) { while (tab--) { (void) fputc('\t', f); @@ -340,7 +331,6 @@ tabify(f, tab) } - static token tokstrings[] = { {TOK_IDENT, "identifier"}, {TOK_CONST, "const"}, @@ -378,9 +368,8 @@ static token tokstrings[] = { {TOK_EOF, "??????"} }; -static char * -toktostr(kind) - tok_kind kind; +static const char * +toktostr(tok_kind kind) { token *sp; @@ -388,10 +377,8 @@ toktostr(kind) return (sp->str); } - - -static -printbuf() +static void +printbuf(void) { char c; int i; @@ -399,7 +386,7 @@ printbuf() # define TABSIZE 4 - for (i = 0; c = curline[i]; i++) { + for (i = 0; (c = curline[i])!=0; i++) { if (c == '\t') { cnt = 8 - (i % TABSIZE); c = ' '; @@ -412,9 +399,8 @@ printbuf() } } - -static -printwhere() +static void +printwhere(void) { int i; char c; @@ -434,3 +420,68 @@ printwhere() } (void) fputc('\n', stderr); } + +char * +make_argname(const char *pname, const char *vname) +{ + char *name; + + name = malloc(strlen(pname) + strlen(vname) + strlen(ARGEXT) + 3); + if (!name) { + fprintf(stderr, "failed in malloc"); + exit(1); + } + sprintf(name, "%s_%s_%s", locase(pname), vname, ARGEXT); + return name; +} + +bas_type *typ_list_h; +bas_type *typ_list_t; + +void +add_type(int len, const char *type) +{ + bas_type *ptr; + + + if ((ptr = malloc(sizeof(bas_type))) == NULL) { + fprintf(stderr, "failed in malloc"); + exit(1); + } + + ptr->name=type; + ptr->length=len; + ptr->next=NULL; + if(typ_list_t == NULL) + { + + typ_list_t=ptr; + typ_list_h=ptr; + } + else + { + + typ_list_t->next=ptr; + typ_list_t=ptr; + } + +} + + +bas_type *find_type(const char *type) +{ + bas_type *ptr; + + ptr=typ_list_h; + + + while(ptr != NULL) + { + if(strcmp(ptr->name,type) == 0) + return(ptr); + else + ptr=ptr->next; + }; +return(NULL); +} + |