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 );
        }
 

Reply via email to