Opinions, thoughts? Joerg Sonnenberger mentioned that getprogname() could be used.
On Sat, Nov 07, 2015 at 12:20:42PM +0100, Tobias Stoeckmann wrote: > Based on Todd's patch for at and cron, I did a grep through our base > tree to see if there are more occurrences of self-made __progname > handling. > > Here's the patch that fixes these cases. > > In newfs and newfs_ext2fs, I prevent an out-of-boundary access in case > someone calls them with argv[0] set to an empty string. And gomoku > get a little style while at it. > > > Index: bin/mt/mt.c > =================================================================== > RCS file: /cvs/src/bin/mt/mt.c,v > retrieving revision 1.36 > diff -u -p -u -p -r1.36 mt.c > --- bin/mt/mt.c 12 Nov 2013 04:36:02 -0000 1.36 > +++ bin/mt/mt.c 7 Nov 2015 11:16:25 -0000 > @@ -88,6 +88,8 @@ int _rmtmtioctop(int fd, struct mtop *c > struct mtget *_rmtstatus(int fd); > void _rmtclose(void); > > +extern char *__progname; > + > char *host = NULL; /* remote host (if any) */ > > int > @@ -133,7 +135,6 @@ _rmtclose(void) > #endif > } > > -char *progname; > int eject = 0; > > int > @@ -145,12 +146,7 @@ main(int argc, char *argv[]) > char *p, *tape, *realtape, *opts; > size_t len; > > - if ((progname = strrchr(argv[0], '/'))) > - progname++; > - else > - progname = argv[0]; > - > - if (strcmp(progname, "eject") == 0) { > + if (strcmp(__progname, "eject") == 0) { > opts = "t"; > eject = 1; > tape = NULL; > @@ -320,9 +316,9 @@ void > usage(void) > { > if (eject) > - (void)fprintf(stderr, "usage: %s [-t] device\n", progname); > + (void)fprintf(stderr, "usage: %s [-t] device\n", __progname); > else > (void)fprintf(stderr, > - "usage: %s [-f device] command [count]\n", progname); > + "usage: %s [-f device] command [count]\n", __progname); > exit(X_USAGE); > } > Index: bin/pax/options.c > =================================================================== > RCS file: /cvs/src/bin/pax/options.c,v > retrieving revision 1.91 > diff -u -p -u -p -r1.91 options.c > --- bin/pax/options.c 18 May 2015 20:26:16 -0000 1.91 > +++ bin/pax/options.c 7 Nov 2015 11:16:25 -0000 > @@ -184,14 +184,12 @@ char *chdname = NULL; > void > options(int argc, char **argv) > { > + extern char *__progname; > > /* > * Are we acting like pax, tar or cpio (based on argv[0]) > */ > - if ((argv0 = strrchr(argv[0], '/')) != NULL) > - argv0++; > - else > - argv0 = argv[0]; > + argv0 = __progname; > > if (strcmp(NM_TAR, argv0) == 0) { > tar_options(argc, argv); > Index: games/gomoku/main.c > =================================================================== > RCS file: /cvs/src/games/gomoku/main.c,v > retrieving revision 1.28 > diff -u -p -u -p -r1.28 main.c > --- games/gomoku/main.c 4 Nov 2015 21:22:10 -0000 1.28 > +++ games/gomoku/main.c 7 Nov 2015 11:16:26 -0000 > @@ -45,10 +45,11 @@ > #define PROGRAM 1 /* get input from program */ > #define INPUTF 2 /* get input from a file */ > > +extern char *__progname; > + > int interactive = 1; /* true if interactive */ > int debug; /* true if debugging */ > int test; /* both moves come from 1: input, 2: computer */ > -char *prog; /* name of program */ > FILE *debugfp; /* file for debug output */ > FILE *inputfp; /* file for debug input */ > > @@ -67,9 +68,7 @@ char *plyr[2]; /* who's who */ > static char you[LOGIN_NAME_MAX]; /* username */ > > int > -main(argc, argv) > - int argc; > - char **argv; > +main(int argc, char *argv[]) > { > char buf[128]; > char fname[PATH_MAX]; > @@ -81,12 +80,6 @@ main(argc, argv) > }; > char *tmpname; > > - prog = strrchr(argv[0], '/'); > - if (prog) > - prog++; > - else > - prog = argv[0]; > - > if ((tmpname = getlogin()) != NULL) > strlcpy(you, tmpname, sizeof(you)); > else > @@ -114,7 +107,7 @@ main(argc, argv) > default: > fprintf(stderr, > "usage: %s [-bcdu] [-D debugfile] [inputfile]\n", > - prog); > + __progname); > exit(1); > } > } > @@ -191,8 +184,8 @@ again: > } > } > if (interactive) { > - plyr[BLACK] = input[BLACK] == USER ? you : prog; > - plyr[WHITE] = input[WHITE] == USER ? you : prog; > + plyr[BLACK] = input[BLACK] == USER ? you : __progname; > + plyr[WHITE] = input[WHITE] == USER ? you : __progname; > bdwho(1); > } > > @@ -219,8 +212,8 @@ again: > input[WHITE] = PROGRAM; > break; > } > - plyr[BLACK] = input[BLACK] == USER ? you : prog; > - plyr[WHITE] = input[WHITE] == USER ? you : prog; > + plyr[BLACK] = input[BLACK] == USER ? you : __progname; > + plyr[WHITE] = input[WHITE] == USER ? you : __progname; > bdwho(1); > goto top; > > @@ -326,8 +319,7 @@ again: > } > > int > -readinput(fp) > - FILE *fp; > +readinput(FILE *fp) > { > char *cp; > int c; > @@ -344,8 +336,7 @@ readinput(fp) > * Handle strange situations. > */ > void > -whatsup(signum) > - int signum; > +whatsup(int signum) > { > int i, pnum, n, s1, s2, d1, d2; > struct spotstr *sp; > @@ -493,8 +484,7 @@ syntax: > * Display debug info. > */ > void > -dlog(str) > - char *str; > +dlog(char *str) > { > > if (debugfp) > @@ -506,10 +496,8 @@ dlog(str) > } > > void > -logit(str) > - char *str; > +logit(char *str) > { > - > if (debugfp) > fprintf(debugfp, "%s\n", str); > if (interactive) > @@ -522,8 +510,7 @@ logit(str) > * Deal with a fatal error. > */ > void > -qlog(str) > - char *str; > +qlog(char *str) > { > dlog(str); > if (interactive) > @@ -534,8 +521,7 @@ qlog(str) > > /* ARGSUSED */ > void > -quit(sig) > - int sig; > +quit(int sig) > { > if (interactive) { > bdisp(); /* show final board */ > @@ -548,10 +534,9 @@ quit(sig) > * Die gracefully. > */ > void > -panic(str) > - char *str; > +panic(char *str) > { > - fprintf(stderr, "%s: %s\n", prog, str); > + fprintf(stderr, "%s: %s\n", __progname, str); > fputs("resign\n", stdout); > quit(0); > } > Index: libexec/tradcpp/main.c > =================================================================== > RCS file: /cvs/src/libexec/tradcpp/main.c,v > retrieving revision 1.3 > diff -u -p -u -p -r1.3 main.c > --- libexec/tradcpp/main.c 9 Oct 2015 12:20:18 -0000 1.3 > +++ libexec/tradcpp/main.c 7 Nov 2015 11:16:26 -0000 > @@ -93,6 +93,8 @@ struct commandline_macro { > const char *expansion; > }; > > +extern char *__progname; > + > static struct array commandline_macros; > > static > @@ -937,17 +939,17 @@ check_arg_option(const char *opt, const > > DEAD static > void > -usage(const char *progname, const char *fmt, ...) > +usage(const char *fmt, ...) > { > va_list ap; > > - fprintf(stderr, "%s: ", progname); > + fprintf(stderr, "%s: ", __progname); > va_start(ap, fmt); > vfprintf(stderr, fmt, ap); > va_end(ap); > fprintf(stderr, "\n"); > > - fprintf(stderr, "Usage: %s [options] [infile [outfile]]\n", progname); > + fprintf(stderr, "Usage: %s [options] [infile [outfile]]\n", __progname); > fprintf(stderr, "Common options:\n"); > fprintf(stderr, " -C Retain comments\n"); > fprintf(stderr, " -Dmacro[=def] Predefine macro\n"); > @@ -1028,18 +1030,13 @@ freestringlater(char *s) > int > main(int argc, char *argv[]) > { > - const char *progname; > const char *inputfile = NULL; > const char *outputfile = NULL; > struct place cmdplace; > int i; > > - progname = strrchr(argv[0], '/'); > - progname = progname == NULL ? argv[0] : progname + 1; > - complain_init(progname); > - > if (pledge("stdio rpath wpath cpath", NULL) == -1) { > - fprintf(stderr, "%s: pledge: %s", progname, strerror(errno)); > + fprintf(stderr, "%s: pledge: %s", __progname, strerror(errno)); > exit(1); > } > > @@ -1067,7 +1064,7 @@ main(int argc, char *argv[]) > i++; > continue; > } > - usage(progname, "Invalid option %s", argv[i]); > + usage("Invalid option %s", argv[i]); > } > if (i < argc) { > inputfile = argv[i++]; > @@ -1076,7 +1073,7 @@ main(int argc, char *argv[]) > outputfile = argv[i++]; > } > if (i < argc) { > - usage(progname, "Extra non-option argument %s", argv[i]); > + usage("Extra non-option argument %s", argv[i]); > } > > mode.output_file = outputfile; > Index: libexec/tradcpp/place.c > =================================================================== > RCS file: /cvs/src/libexec/tradcpp/place.c,v > retrieving revision 1.1 > diff -u -p -u -p -r1.1 place.c > --- libexec/tradcpp/place.c 30 Jul 2014 16:33:11 -0000 1.1 > +++ libexec/tradcpp/place.c 7 Nov 2015 11:16:26 -0000 > @@ -47,11 +47,11 @@ struct placefile { > DECLARRAY(placefile, static UNUSED); > DEFARRAY(placefile, static); > > +extern char *__progname; > + > static struct placefilearray placefiles; > static bool overall_failure; > > -static const char *myprogname; > - > //////////////////////////////////////////////////////////// > // seenfiles > > @@ -187,13 +187,6 @@ place_printfrom(const struct place *p) > > //////////////////////////////////////////////////////////// > // complaints > - > -void > -complain_init(const char *pn) > -{ > - myprogname = pn; > -} > - > void > complain(const struct place *p, const char *fmt, ...) > { > @@ -204,7 +197,7 @@ complain(const struct place *p, const ch > fprintf(stderr, "%s:%u:%u: ", place_getname(p), > p->line, p->column); > } else { > - fprintf(stderr, "%s: ", myprogname); > + fprintf(stderr, "%s: ", __progname); > } > va_start(ap, fmt); > vfprintf(stderr, fmt, ap); > Index: sbin/newfs/newfs.c > =================================================================== > RCS file: /cvs/src/sbin/newfs/newfs.c,v > retrieving revision 1.100 > diff -u -p -u -p -r1.100 newfs.c > --- sbin/newfs/newfs.c 29 Sep 2015 03:19:24 -0000 1.100 > +++ sbin/newfs/newfs.c 7 Nov 2015 11:16:26 -0000 > @@ -410,7 +410,7 @@ main(int argc, char *argv[]) > special); > } > cp = strchr(argv[0], '\0') - 1; > - if (cp == NULL || > + if (cp == NULL || cp < argv[0] || > ((*cp < 'a' || *cp > ('a' + maxpartitions - 1)) > && !isdigit((unsigned char)*cp))) > fatal("%s: can't figure out file system partition", > Index: sbin/newfs_ext2fs/newfs_ext2fs.c > =================================================================== > RCS file: /cvs/src/sbin/newfs_ext2fs/newfs_ext2fs.c,v > retrieving revision 1.17 > diff -u -p -u -p -r1.17 newfs_ext2fs.c > --- sbin/newfs_ext2fs/newfs_ext2fs.c 14 Oct 2015 15:54:49 -0000 1.17 > +++ sbin/newfs_ext2fs/newfs_ext2fs.c 7 Nov 2015 11:16:27 -0000 > @@ -519,7 +519,8 @@ getpartition(int fsi, const char *specia > if (!S_ISCHR(st.st_mode)) > warnx("%s: not a character-special device", special); > cp = strchr(argv[0], '\0') - 1; > - if (cp == NULL || ((*cp < 'a' || *cp > ('a' + getmaxpartitions() - 1)) > + if (cp == NULL || cp < argv[0] || > + ((*cp < 'a' || *cp > ('a' + getmaxpartitions() - 1)) > && !isdigit((unsigned char)*cp))) > errx(EXIT_FAILURE, "%s: can't figure out file system > partition", argv[0]); > lp = getdisklabel(special, fsi); > Index: usr.bin/id/id.c > =================================================================== > RCS file: /cvs/src/usr.bin/id/id.c,v > retrieving revision 1.26 > diff -u -p -u -p -r1.26 id.c > --- usr.bin/id/id.c 9 Oct 2015 01:37:07 -0000 1.26 > +++ usr.bin/id/id.c 7 Nov 2015 11:16:27 -0000 > @@ -45,8 +45,9 @@ void pretty(struct passwd *); > void group(struct passwd *, int); > void usage(void); > void user(struct passwd *); > -struct passwd * > - who(char *); > +struct passwd *who(char *); > + > +extern char *__progname; > > int > main(int argc, char *argv[]) > @@ -63,13 +64,13 @@ main(int argc, char *argv[]) > > cflag = Gflag = gflag = nflag = pflag = rflag = uflag = 0; > > - if (strcmp(getprogname(), "groups") == 0) { > + if (strcmp(__progname, "groups") == 0) { > Gflag = 1; > nflag = 1; > opts = ""; > if (argc > 2) > usage(); > - } else if (strcmp(getprogname(), "whoami") == 0) { > + } else if (strcmp(__progname, "whoami") == 0) { > uflag = 1; > nflag = 1; > opts = ""; > @@ -340,9 +341,9 @@ who(char *u) > void > usage(void) > { > - if (strcmp(getprogname(), "groups") == 0) { > + if (strcmp(__progname, "groups") == 0) { > (void)fprintf(stderr, "usage: groups [user]\n"); > - } else if (strcmp(getprogname(), "whoami") == 0) { > + } else if (strcmp(__progname, "whoami") == 0) { > (void)fprintf(stderr, "usage: whoami\n"); > } else { > (void)fprintf(stderr, "usage: id [user]\n"); > Index: usr.bin/nl/nl.c > =================================================================== > RCS file: /cvs/src/usr.bin/nl/nl.c,v > retrieving revision 1.6 > diff -u -p -u -p -r1.6 nl.c > --- usr.bin/nl/nl.c 9 Oct 2015 01:37:08 -0000 1.6 > +++ usr.bin/nl/nl.c 7 Nov 2015 11:16:27 -0000 > @@ -74,6 +74,8 @@ void filter(void); > void parse_numbering(const char *, int); > __dead void usage(void); > > +extern char *__progname; > + > /* > * Delimiter characters that indicate the start of a logical page section. > */ > @@ -361,6 +363,6 @@ usage(void) > { > (void)fprintf(stderr, "usage: %s [-p] [-b type] [-d delim] [-f type] " > "[-h type] [-i incr] [-l num]\n\t[-n format] [-s sep] " > - "[-v startnum] [-w width] [file]\n", getprogname()); > + "[-v startnum] [-w width] [file]\n", __progname); > exit(EXIT_FAILURE); > } > Index: usr.bin/telnet/main.c > =================================================================== > RCS file: /cvs/src/usr.bin/telnet/main.c,v > retrieving revision 1.30 > diff -u -p -u -p -r1.30 main.c > --- usr.bin/telnet/main.c 22 Jul 2014 07:30:24 -0000 1.30 > +++ usr.bin/telnet/main.c 7 Nov 2015 11:16:27 -0000 > @@ -77,6 +77,7 @@ int > main(int argc, char *argv[]) > { > int ch; > + extern char *__progname; > char *user, *alias; > const char *errstr; > > @@ -84,10 +85,7 @@ main(int argc, char *argv[]) > > TerminalSaveState(); > > - if ((prompt = strrchr(argv[0], '/'))) > - ++prompt; > - else > - prompt = argv[0]; > + prompt = __progname; > > user = alias = NULL; > > Index: usr.sbin/crunchgen/crunched_main.c > =================================================================== > RCS file: /cvs/src/usr.sbin/crunchgen/crunched_main.c,v > retrieving revision 1.4 > diff -u -p -u -p -r1.4 crunched_main.c > --- usr.sbin/crunchgen/crunched_main.c 11 Jan 2014 04:43:00 -0000 > 1.4 > +++ usr.sbin/crunchgen/crunched_main.c 7 Nov 2015 11:16:27 -0000 > @@ -47,22 +47,19 @@ extern struct stub entry_points[]; > int > main(int argc, char *argv[], char **envp) > { > - char *slash, *basename; > + extern char *__progname; > struct stub *ep; > > - if (argv[0] == NULL || *argv[0] == '\0') > + if (__progname == NULL || *__progname == '\0') > crunched_usage(); > > - slash = strrchr(argv[0], '/'); > - basename = slash ? slash + 1 : argv[0]; > - > for (ep = entry_points; ep->name != NULL; ep++) > - if (!strcmp(basename, ep->name)) > + if (!strcmp(__progname, ep->name)) > break; > > if (ep->name) > return ep->f(argc, argv, envp); > - fprintf(stderr, "%s: %s not compiled in\n", EXECNAME, basename); > + fprintf(stderr, "%s: %s not compiled in\n", EXECNAME, __progname); > crunched_usage(); > } > > Index: usr.sbin/pppd/main.c > =================================================================== > RCS file: /cvs/src/usr.sbin/pppd/main.c,v > retrieving revision 1.52 > diff -u -p -u -p -r1.52 main.c > --- usr.sbin/pppd/main.c 26 Oct 2015 11:10:53 -0000 1.52 > +++ usr.sbin/pppd/main.c 7 Nov 2015 11:16:28 -0000 > @@ -90,7 +90,6 @@ extern char *strerror(); > char ifname[IFNAMSIZ]; /* Interface name */ > int ifunit; /* Interface unit number */ > > -char *progname; /* Name of this program */ > char hostname[HOST_NAME_MAX+1]; /* Our hostname */ > static char default_devnam[PATH_MAX]; /* name of default device */ > static pid_t pid; /* Our pid */ > @@ -222,8 +221,6 @@ main(argc, argv) > */ > for (i = 0; (protp = protocols[i]) != NULL; ++i) > (*protp->init)(0); > - > - progname = *argv; > > if (!options_from_file(_PATH_SYSOPTIONS, !privileged, 0, 1) > || !options_from_user()) > Index: usr.sbin/pppd/options.c > =================================================================== > RCS file: /cvs/src/usr.sbin/pppd/options.c,v > retrieving revision 1.28 > diff -u -p -u -p -r1.28 options.c > --- usr.sbin/pppd/options.c 16 Jan 2015 06:40:19 -0000 1.28 > +++ usr.sbin/pppd/options.c 7 Nov 2015 11:16:29 -0000 > @@ -517,7 +517,7 @@ usage() > { > if (phase == PHASE_INITIALIZE) > fprintf(stderr, usage_string, VERSION, PATCHLEVEL, IMPLEMENTATION, > - progname); > + __progname); > } > > /* > @@ -687,7 +687,7 @@ option_error(char *fmt, ...) > vfmtmsg(buf, sizeof(buf), fmt, args); > va_end(args); > if (phase == PHASE_INITIALIZE) > - fprintf(stderr, "%s: %s\n", progname, buf); > + fprintf(stderr, "%s: %s\n", __progname, buf); > syslog(LOG_ERR, "%s", buf); > } > > Index: usr.sbin/pppd/pppd.h > =================================================================== > RCS file: /cvs/src/usr.sbin/pppd/pppd.h,v > retrieving revision 1.20 > diff -u -p -u -p -r1.20 pppd.h > --- usr.sbin/pppd/pppd.h 12 Sep 2015 12:42:36 -0000 1.20 > +++ usr.sbin/pppd/pppd.h 7 Nov 2015 11:16:29 -0000 > @@ -77,7 +77,7 @@ extern char hostname[]; /* Our hostname > extern u_char outpacket_buf[]; /* Buffer for outgoing packets */ > extern int phase; /* Current state of link - see values below */ > extern int baud_rate; /* Current link speed in bits/sec */ > -extern char *progname; /* Name of this program */ > +extern char *__progname; /* Name of this program */ > extern int redirect_stderr;/* Connector's stderr should go to file */ > extern char peer_authname[];/* Authenticated name of peer */ > extern int privileged; /* We were run by real-uid root */ > Index: sbin/pdisk/errors.c > =================================================================== > RCS file: /cvs/src/sbin/pdisk/errors.c,v > retrieving revision 1.7 > diff -u -p -u -p -r1.7 errors.c > --- sbin/pdisk/errors.c 25 May 2010 19:01:32 -0000 1.7 > +++ sbin/pdisk/errors.c 7 Nov 2015 11:16:29 -0000 > @@ -58,7 +58,7 @@ > // > // Global Variables > // > -char *program_name; > +extern char *__progname; > > > // > @@ -70,20 +70,9 @@ char *program_name; > // Routines > // > void > -init_program_name(char **argv) > -{ > - if ((program_name = strrchr(argv[0], '/')) != (char *)NULL) { > - program_name++; > - } else { > - program_name = argv[0]; > - } > -} > - > - > -void > do_help() > { > - printf("usage: %s [-hilrv] disk\n", program_name); > + printf("usage: %s [-hilrv] disk\n", __progname); > /* > {"debug", no_argument, 0, 'd'}, > {"abbr", no_argument, 0, 'a'}, > @@ -112,7 +101,7 @@ fatal(int value, const char *fmt, ...) > { > va_list ap; > > - fprintf(stderr, "%s: ", program_name); > + fprintf(stderr, "%s: ", __progname); > va_start(ap, fmt); > vfprintf(stderr, fmt, ap); > va_end(ap); > @@ -136,7 +125,7 @@ error(int value, const char *fmt, ...) > { > va_list ap; > > - fprintf(stderr, "%s: ", program_name); > + fprintf(stderr, "%s: ", __progname); > va_start(ap, fmt); > vfprintf(stderr, fmt, ap); > va_end(ap); > Index: sbin/pdisk/errors.h > =================================================================== > RCS file: /cvs/src/sbin/pdisk/errors.h,v > retrieving revision 1.3 > diff -u -p -u -p -r1.3 errors.h > --- sbin/pdisk/errors.h 27 Apr 2006 19:52:21 -0000 1.3 > +++ sbin/pdisk/errors.h 7 Nov 2015 11:16:29 -0000 > @@ -54,7 +54,6 @@ extern int hflag; > // Forward declarations > // > void do_help(void); > -void init_program_name(char **argv); > void error(int value, const char *fmt, ...); > void fatal(int value, const char *fmt, ...); > void usage(const char *kind); > Index: sbin/pdisk/pdisk.c > =================================================================== > RCS file: /cvs/src/sbin/pdisk/pdisk.c,v > retrieving revision 1.17 > diff -u -p -u -p -r1.17 pdisk.c > --- sbin/pdisk/pdisk.c 20 Aug 2015 22:02:21 -0000 1.17 > +++ sbin/pdisk/pdisk.c 7 Nov 2015 11:16:29 -0000 > @@ -131,8 +131,6 @@ main(int argc, char **argv) > int name_index; > char *versionstr; > > - init_program_name(argv); > - > if (sizeof(DPME) != PBLOCK_SIZE) { > fatal(-1, "Size of partition map entry (%d) " > "is not equal to block size (%d)\n", > Index: usr.bin/lex/main.c > =================================================================== > RCS file: /cvs/src/usr.bin/lex/main.c,v > retrieving revision 1.15 > diff -u -p -u -p -r1.15 main.c > --- usr.bin/lex/main.c 10 Oct 2015 05:47:54 -0000 1.15 > +++ usr.bin/lex/main.c 7 Nov 2015 11:16:30 -0000 > @@ -104,10 +104,7 @@ int end_of_buffer_state; > char **input_files; > int num_input_files; > > -/* Make sure program_name is initialized so we don't crash if writing > - * out an error message before getting the program name from argv[0]. > - */ > -char *program_name = "flex"; > +extern char *__progname; > > #ifndef SHORT_FILE_NAMES > static const char outfile_template[] = "lex.%s.%s"; > @@ -138,8 +135,7 @@ char **argv; > > if (pledge("stdio rpath wpath cpath", NULL) == -1) > { > - fprintf( stderr, _( "%s: pledge\n" ), > - program_name); > + fprintf( stderr, _( "%s: pledge\n" ), __progname); > exit(1); > } > > @@ -413,7 +409,7 @@ int exit_status; > if ( printstats ) > { > fprintf( stderr, _( "%s version %s usage statistics:\n" ), > - program_name, flex_version ); > + __progname, flex_version ); > > fprintf( stderr, _( " scanner options: -" ) ); > > @@ -616,10 +612,8 @@ char **argv; > defs1_offset = prolog_offset = action_offset = action_index = 0; > action_array[0] = '\0'; > > - program_name = argv[0]; > - > - if ( program_name[0] != '\0' && > - program_name[strlen( program_name ) - 1] == '+' ) > + if (__progname[0] != '\0' && > + __progname[strlen(__progname) - 1] == '+') > C_plus_plus = true; > > /* read flags */ > @@ -802,7 +796,7 @@ char **argv; > > case 'V': > printf( _( "%s version %s\n" ), > - program_name, flex_version ); > + __progname, flex_version ); > exit( 0 ); > > case 'w': > @@ -820,8 +814,8 @@ char **argv; > default: > fprintf( stderr, > _( "%s: unknown flag '%c'. For usage, try\n\t%s --help\n" ), > - program_name, (int) arg[i], > - program_name ); > + __progname, (int) arg[i], > + __progname ); > exit( 1 ); > } > > @@ -1123,7 +1117,7 @@ void usage() > > fprintf( f, > _( "%s [-bdfhilnpstvwBFILTV78+? -C[aefFmr] -ooutput -Pprefix -Sskeleton]\n" > ), > - program_name ); > + __progname ); > fprintf( f, _( "\t[--help --version] [file ...]\n" ) ); > > fprintf( f, _( "\t-b generate backing-up information to %s\n" ), > @@ -1158,8 +1152,8 @@ _( "%s [-bdfhilnpstvwBFILTV78+? -C[aefFm > fprintf( f, > _( "\t-I generate interactive scanner (opposite of -B)\n" ) ); > fprintf( f, _( "\t-L suppress #line directives in scanner\n" ) ); > - fprintf( f, _( "\t-T %s should run in trace mode\n" ), program_name ); > - fprintf( f, _( "\t-V report %s version\n" ), program_name ); > + fprintf( f, _( "\t-T %s should run in trace mode\n" ), __progname ); > + fprintf( f, _( "\t-V report %s version\n" ), __progname ); > fprintf( f, _( "\t-7 generate 7-bit scanner\n" ) ); > fprintf( f, _( "\t-8 generate 8-bit scanner\n" ) ); > fprintf( f, _( "\t-+ generate C++ scanner class\n" ) ); > @@ -1180,5 +1174,5 @@ _( "\t\t-CF do not compress scanner tab > fprintf( f, _( "\t-P specify scanner prefix other than \"yy\"\n" ) ); > fprintf( f, _( "\t-S specify skeleton file\n" ) ); > fprintf( f, _( "\t--help produce this help message\n" ) ); > - fprintf( f, _( "\t--version report %s version\n" ), program_name ); > + fprintf( f, _( "\t--version report %s version\n" ), __progname ); > } > Index: usr.bin/lex/misc.c > =================================================================== > RCS file: /cvs/src/usr.bin/lex/misc.c,v > retrieving revision 1.14 > diff -u -p -u -p -r1.14 misc.c > --- usr.bin/lex/misc.c 15 Oct 2015 05:57:09 -0000 1.14 > +++ usr.bin/lex/misc.c 7 Nov 2015 11:16:30 -0000 > @@ -37,6 +37,7 @@ > > #include "flexdef.h" > > +extern char *__progname; > > void action_define( defname, value ) > char *defname; > @@ -334,7 +335,7 @@ void dataflush() > void flexerror( msg ) > const char msg[]; > { > - fprintf( stderr, "%s: %s\n", program_name, msg ); > + fprintf( stderr, "%s: %s\n", __progname, msg ); > flexend( 1 ); > } > > @@ -345,7 +346,7 @@ void flexfatal( msg ) > const char msg[]; > { > fprintf( stderr, _( "%s: fatal internal error, %s\n" ), > - program_name, msg ); > + __progname, msg ); > exit( 1 ); > } > >