diff options
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); +} + |