mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
update from main archive 961016
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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user