Diff for /embedaddon/libiconv/srclib/progname.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 22:57:48 version 1.1.1.2, 2012/05/29 09:29:43
Line 1 Line 1
 /* Program name management.  /* Program name management.
   Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.   Copyright (C) 2001-2003, 2005-2011 Free Software Foundation, Inc.
   Written by Bruno Haible <haible@clisp.cons.org>, 2001.   Written by Bruno Haible <bruno@clisp.org>, 2001.
   
    This program is free software: you can redistribute it and/or modify     This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
Line 22 Line 22
 #undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */  #undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */
 #include "progname.h"  #include "progname.h"
   
   #include <errno.h> /* get program_invocation_name declaration */
   #include <stdio.h>
   #include <stdlib.h>
 #include <string.h>  #include <string.h>
   
   
Line 29 Line 32
    To be initialized by main().  */     To be initialized by main().  */
 const char *program_name = NULL;  const char *program_name = NULL;
   
/* Set program_name, based on argv[0].  *//* Set program_name, based on argv[0].
    argv0 must be a string allocated with indefinite extent, and must not be
    modified after this call.  */
 void  void
 set_program_name (const char *argv0)  set_program_name (const char *argv0)
 {  {
Line 41  set_program_name (const char *argv0) Line 46  set_program_name (const char *argv0)
   const char *slash;    const char *slash;
   const char *base;    const char *base;
   
     /* Sanity check.  POSIX requires the invoking process to pass a non-NULL
        argv[0].  */
     if (argv0 == NULL)
       {
         /* It's a bug in the invoking program.  Help diagnosing it.  */
         fputs ("A NULL argv[0] was passed through an exec system call.\n",
                stderr);
         abort ();
       }
   
   slash = strrchr (argv0, '/');    slash = strrchr (argv0, '/');
   base = (slash != NULL ? slash + 1 : argv0);    base = (slash != NULL ? slash + 1 : argv0);
   if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0)    if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0)
     {      {
       argv0 = base;        argv0 = base;
       if (strncmp (base, "lt-", 3) == 0)        if (strncmp (base, "lt-", 3) == 0)
        argv0 = base + 3;        {
           argv0 = base + 3;
           /* On glibc systems, remove the "lt-" prefix from the variable
              program_invocation_short_name.  */
 #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
           program_invocation_short_name = (char *) argv0;
 #endif
         }
     }      }
   
   /* But don't strip off a leading <dirname>/ in general, because when the user    /* But don't strip off a leading <dirname>/ in general, because when the user
Line 60  set_program_name (const char *argv0) Line 82  set_program_name (const char *argv0)
    */     */
   
   program_name = argv0;    program_name = argv0;
   
     /* On glibc systems, the error() function comes from libc and uses the
        variable program_invocation_name, not program_name.  So set this variable
        as well.  */
   #if HAVE_DECL_PROGRAM_INVOCATION_NAME
     program_invocation_name = (char *) argv0;
   #endif
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>