Path: utzoo!attcan!uunet!ateng!chip From: chip@ateng.ateng.com (Chip Salzenberg) Newsgroups: comp.sources.bugs Subject: Deliver 1.00 patch #6 Message-ID: <1988Nov30.171915.6703@ateng.ateng.com> Date: 30 Nov 88 22:19:15 GMT Organization: A T Engineering, Tampa, FL Lines: 432 This is an offical patch for deliver 1.00. Please apply it. Patch number: 6 Date: 29 Nov 1988 Priority: HIGH for Berkeley Unix, LOW otherwise Changes: Patch #5 introduced the "uid" program. Unfortunately, I never tested it under BSD, so I didn't realize that link errors would result from uid's use of deliver's sysdep.o. So now I've separated getopt() into its own module, since that's the only function that uid needed anyway. (So much for my monthly mistake allowance.) Index: patchlevel.h Prereq: 5 *************** *** 1 **** ! #define PATCHLEVEL 5 --- 1 ---- ! #define PATCHLEVEL 6 Index: Makefile *************** *** 1,4 **** ! # $Header: Makefile,v 1.11 88/11/28 18:45:20 network Exp $ # # Makefile for deliver # --- 1,4 ---- ! # $Header: Makefile,v 1.12 88/11/30 16:24:30 network Exp $ # # Makefile for deliver # *************** *** 67,81 **** HDRS = config.h context.h deliver.h dest.h patchlevel.h misc.h ! SRC1 = context.c copymsg.c debug.c dest.c dfile.c lock.c ! SRC2 = main.c mbox.c procs.c subs.c sysdep.c uucp.c ! SRCS = $(SRC1) $(SRC2) ! UIDSRC = uid.c - OBJS = context.o copymsg.o debug.o dest.o dfile.o lock.o \ - main.o mbox.o procs.o subs.o sysdep.o uucp.o - # # For GNU Make. Sorry about the ugliness. # --- 67,83 ---- HDRS = config.h context.h deliver.h dest.h patchlevel.h misc.h ! DELSRC1 = context.c copymsg.c debug.c dest.c dfile.c lock.c ! DELSRC2 = main.c mbox.c procs.c subs.c sysdep.c uucp.c ! DELSRCS = $(DELSRC1) $(DELSRC2) ! UIDSRCS = uid.c ! COMSRCS = getopt.c ! DELOBJS = context.o copymsg.o debug.o dest.o dfile.o lock.o \ ! main.o mbox.o procs.o subs.o sysdep.o uucp.o ! UIDOBJS = uid.o ! COMOBJS = getopt.o # # For GNU Make. Sorry about the ugliness. # *************** *** 83,88 **** --- 85,96 ---- .PHONY: all install lint shar clean clobber # + # The default target. + # + + all: deliver uid + + # # "make clobber" implies "make clean". # *************** *** 92,103 **** # How to compile and link the program. # ! all: deliver uid - deliver: $(OBJS) - $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) - $(OBJS): $(HDRS) - install: deliver uid @if [ `./uid -uU | fgrep '(root)' | wc -l` -ne 2 ]; \ then \ --- 100,109 ---- # How to compile and link the program. # ! deliver: $(DELOBJS) $(COMOBJS) ! $(CC) $(LDFLAGS) -o $@ $(DELOBJS) $(COMOBJS) $(LIBS) ! $(DELOBJS): $(HDRS) install: deliver uid @if [ `./uid -uU | fgrep '(root)' | wc -l` -ne 2 ]; \ then \ *************** *** 110,116 **** chmod 4711 $(BIN)/deliver clean:: ! rm -f $(OBJS) clobber:: rm -f deliver --- 116,122 ---- chmod 4711 $(BIN)/deliver clean:: ! rm -f $(DELOBJS) clobber:: rm -f deliver *************** *** 119,143 **** # (I wish that the System V "id" program were available everywhere.) # ! uid: $(UIDSRC) sysdep.o ! $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(UIDSRC) sysdep.o $(LIBS) ! @rm -f $@.o ! uid: config.h clobber:: rm -f uid # # Look for fuzz. # lint: deliver.lint uid.lint ! deliver.lint: $(HDRS) $(SRCS) ! lint $(SRCS) -lc $(LIBS) >$@ ! uid.lint: uid.c ! lint uid.c -lc $(LIBS) >$@ clean:: rm -f *.lint --- 125,157 ---- # (I wish that the System V "id" program were available everywhere.) # ! uid: $(UIDSRCS) $(COMOBJS) config.h ! $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(UIDSRCS) $(COMOBJS) $(LIBS) ! @rm -f $(UIDOBJS) clobber:: rm -f uid # + # Common subroutines + # + + $(COMOBJS): config.h + + clean:: + rm -f $(COMOBJS) + + # # Look for fuzz. # lint: deliver.lint uid.lint ! deliver.lint: $(HDRS) $(DELSRCS) $(COMSRCS) ! lint $(DELSRCS) $(COMSRCS) -lc $(LIBS) >$@ ! uid.lint: config.h $(UIDSRCS) $(COMSRCS) ! lint $(UIDSRCS) $(COMSRCS) -lc $(LIBS) >$@ clean:: rm -f *.lint *************** *** 147,158 **** # shar: $(DELSHAR).01 $(DELSHAR).02 $(DELSHAR).03 ! $(DELSHAR).01: $(DOCS) $(MF) $(HDRS) $(UIDSRC) ! $(SHAR) >$@ $(DOCS) $(MF) $(HDRS) $(UIDSRC) ! $(DELSHAR).02: $(SRC1) ! $(SHAR) >$@ $(SRC1) ! $(DELSHAR).03: $(SRC2) ! $(SHAR) >$@ $(SRC2) clobber:: rm -f $(DELSHAR).?? --- 161,172 ---- # shar: $(DELSHAR).01 $(DELSHAR).02 $(DELSHAR).03 ! $(DELSHAR).01: $(DOCS) $(MF) $(HDRS) $(UIDSRCS) $(COMSRCS) ! $(SHAR) >$@ $(DOCS) $(MF) $(HDRS) $(UIDSRCS) $(COMSRCS) ! $(DELSHAR).02: $(DELSRC1) ! $(SHAR) >$@ $(DELSRC1) ! $(DELSHAR).03: $(DELSRC2) ! $(SHAR) >$@ $(DELSRC2) clobber:: rm -f $(DELSHAR).?? Index: getopt.c *************** *** 0 **** --- 1,95 ---- + /* $Header: getopt.c,v 1.2 88/11/30 16:24:50 network Exp $ + * + * A version of the public-domain getopt() function, as found + * in the SVID and fine Unix manuals everywhere. + * + * $Log: getopt.c,v $ + * Revision 1.2 88/11/30 16:24:50 network + * patch6: Separate getopt() into its own module. + * + */ + + #include "config.h" + + /*---------------------------------------------------------------------- + * Get command line options. + * This is essentially the public domain version, just reformatted to + * match the rest of the deliver program. + */ + + #ifndef HAS_GETOPT + + int opterr = 1; + int optind = 1; + int optopt = 0; + char *optarg = NULL; + + #define ERR(what,c) \ + if (!opterr) {} else fprintf(stderr,"%s: %s -- %c\n", argv[0], what, c); + + int + getopt(argc, argv, opts) + int argc; + char **argv; + char *opts; + { + static int sp = 1; + int c; + char *cp; + + if (sp == 1) + { + if (optind >= argc + || argv[optind][0] != '-' || argv[optind][1] == '\0') + return EOF; + + if (strcmp(argv[optind], "--") == NULL) + { + optind++; + return EOF; + } + } + + optopt = c = argv[optind][sp]; + + if (c == ':' || (cp = strchr(opts, c)) == NULL) + { + ERR("illegal option", c); + if (argv[optind][++sp] == '\0') + { + optind++; + sp = 1; + } + return '?'; + } + + if (*++cp == ':') + { + if (argv[optind][sp + 1] != '\0') + optarg = &argv[optind++][sp + 1]; + else if (++optind >= argc) + { + ERR("option requires an argument", c); + sp = 1; + return '?'; + } + else + optarg = argv[optind++]; + + sp = 1; + } + else + { + if (argv[optind][++sp] == '\0') + { + sp = 1; + optind++; + } + + optarg = NULL; + } + + return c; + } + + #endif /* !HAS_GETOPT */ Index: sysdep.c *************** *** 1,4 **** ! /* $Header: sysdep.c,v 1.5 88/11/26 13:21:15 network Exp $ * * Routines which are (or might well be) system-dependant. * I've put the message routines here since you may need to use --- 1,4 ---- ! /* $Header: sysdep.c,v 1.6 88/11/30 16:24:56 network Exp $ * * Routines which are (or might well be) system-dependant. * I've put the message routines here since you may need to use *************** *** 5,10 **** --- 5,13 ---- * the ANSIinstead of . * * $Log: sysdep.c,v $ + * Revision 1.6 88/11/30 16:24:56 network + * patch6: Separate getopt() into its own module. + * * Revision 1.5 88/11/26 13:21:15 network * patch4: Add return type of signal handlers to config.h. * patch4: Provide a version of getopt() for systems that lack it. *************** *** 308,392 **** } #endif /* !HAS_PUTENV */ - - /*---------------------------------------------------------------------- - * Get command line options. - * This is essentially the public domain version, reformatted to - * my style and using my error message routine. - */ - - #ifndef HAS_GETOPT - - int opterr = 1; - int optind = 1; - int optopt = 0; - char *optarg = NULL; - - int - getopt(argc, argv, opts) - int argc; - char **argv; - char *opts; - { - static int sp = 1; - int c; - char *cp; - - if (sp == 1) - { - if (optind >= argc - || argv[optind][0] != '-' || argv[optind][1] == '\0') - return EOF; - - if (strcmp(argv[optind], "--") == NULL) - { - optind++; - return EOF; - } - } - - optopt = c = argv[optind][sp]; - - if (c == ':' || (cp = strchr(opts, c)) == NULL) - { - if (opterr) - error("illegal option -- %c\n", c); - if (argv[optind][++sp] == '\0') - { - optind++; - sp = 1; - } - return '?'; - } - - if (*++cp == ':') - { - if (argv[optind][sp + 1] != '\0') - optarg = &argv[optind++][sp + 1]; - else if (++optind >= argc) - { - if (opterr) - error("option requires an argument -- %c\n", c); - sp = 1; - return '?'; - } - else - optarg = argv[optind++]; - - sp = 1; - } - else - { - if (argv[optind][++sp] == '\0') - { - sp = 1; - optind++; - } - - optarg = NULL; - } - - return c; - } - - #endif /* !HAS_GETOPT */ --- 311,313 ---- -- Chip Salzenberg or A T Engineering Me? Speak for my company? Surely you jest! Beware of programmers carrying screwdrivers.