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

Reply via email to