* gnulib/progname.c: New file (imported from Gnulib).
* gnulib/progname.h: Likewise.
        * conf/i386-pc.rmk (grub_mkimage_SOURCES): Add `gnulib/progname.c'.
        * util/i386/pc/grub-mkimage.c: Include `"progname.h"'.
        (usage): Replace `progname' with `program_name'.
        (main): Use set_program_name() for program name initialization.
			
			
This commit is contained in:
		
							parent
							
								
									ab502ec59d
								
							
						
					
					
						commit
						548643e528
					
				
					 5 changed files with 150 additions and 4 deletions
				
			
		|  | @ -1,5 +1,12 @@ | |||
| 2009-11-16  Robert Millan  <rmh.grub@aybabtu.com> | ||||
| 
 | ||||
| 	* gnulib/progname.c: New file (imported from Gnulib). | ||||
| 	* gnulib/progname.h: Likewise. | ||||
| 	* conf/i386-pc.rmk (grub_mkimage_SOURCES): Add `gnulib/progname.c'. | ||||
| 	* util/i386/pc/grub-mkimage.c: Include `"progname.h"'. | ||||
| 	(usage): Replace `progname' with `program_name'. | ||||
| 	(main): Use set_program_name() for program name initialization. | ||||
| 
 | ||||
| 	* aclocal.m4: Move from here ... | ||||
| 	* acinclude.m4: ... to here. | ||||
| 	* autogen.sh: Add call to `aclocal'. | ||||
|  |  | |||
|  | @ -87,7 +87,7 @@ sbin_UTILITIES += grub-emu | |||
| endif | ||||
| 
 | ||||
| # For grub-mkimage. | ||||
| grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \ | ||||
| grub_mkimage_SOURCES = gnulib/progname.c util/i386/pc/grub-mkimage.c util/misc.c \ | ||||
| 	util/resolve.c lib/LzmaEnc.c lib/LzFind.c | ||||
| grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR) | ||||
| util/i386/pc/grub-mkimage.c_DEPENDENCIES = Makefile | ||||
|  |  | |||
							
								
								
									
										78
									
								
								gnulib/progname.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								gnulib/progname.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,78 @@ | |||
| /* Program name management.
 | ||||
|    Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc. | ||||
|    Written by Bruno Haible <haible@clisp.cons.org>, 2001. | ||||
| 
 | ||||
|    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 | ||||
|    the Free Software Foundation; either version 3 of the License, or | ||||
|    (at your option) any later version. | ||||
| 
 | ||||
|    This program is distributed in the hope that it will be useful, | ||||
|    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|    GNU General Public License for more details. | ||||
| 
 | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 | ||||
| 
 | ||||
| 
 | ||||
| #include <config.h> | ||||
| 
 | ||||
| /* Specification.  */ | ||||
| #undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ | ||||
| #include "progname.h" | ||||
| 
 | ||||
| #include <errno.h> /* get program_invocation_name declaration */ | ||||
| #include <string.h> | ||||
| 
 | ||||
| 
 | ||||
| /* String containing name the program is called with.
 | ||||
|    To be initialized by main().  */ | ||||
| const char *program_name = NULL; | ||||
| 
 | ||||
| /* Set program_name, based on argv[0].  */ | ||||
| void | ||||
| set_program_name (const char *argv0) | ||||
| { | ||||
|   /* libtool creates a temporary executable whose name is sometimes prefixed
 | ||||
|      with "lt-" (depends on the platform).  It also makes argv[0] absolute. | ||||
|      But the name of the temporary executable is a detail that should not be | ||||
|      visible to the end user and to the test suite. | ||||
|      Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here.  */ | ||||
|   const char *slash; | ||||
|   const char *base; | ||||
| 
 | ||||
|   slash = strrchr (argv0, '/'); | ||||
|   base = (slash != NULL ? slash + 1 : argv0); | ||||
|   if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) | ||||
|     { | ||||
|       argv0 = base; | ||||
|       if (strncmp (base, "lt-", 3) == 0) | ||||
| 	{ | ||||
| 	  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
 | ||||
|      runs | ||||
|          /some/hidden/place/bin/cp foo foo | ||||
|      he should get the error message | ||||
|          /some/hidden/place/bin/cp: `foo' and `foo' are the same file | ||||
|      not | ||||
|          cp: `foo' and `foo' are the same file | ||||
|    */ | ||||
| 
 | ||||
|   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 | ||||
| } | ||||
							
								
								
									
										60
									
								
								gnulib/progname.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								gnulib/progname.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| /* Program name management.
 | ||||
|    Copyright (C) 2001-2004, 2006 Free Software Foundation, Inc. | ||||
|    Written by Bruno Haible <haible@clisp.cons.org>, 2001. | ||||
| 
 | ||||
|    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 | ||||
|    the Free Software Foundation; either version 3 of the License, or | ||||
|    (at your option) any later version. | ||||
| 
 | ||||
|    This program is distributed in the hope that it will be useful, | ||||
|    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|    GNU General Public License for more details. | ||||
| 
 | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 | ||||
| 
 | ||||
| #ifndef _PROGNAME_H | ||||
| #define _PROGNAME_H | ||||
| 
 | ||||
| /* Programs using this file should do the following in main():
 | ||||
|      set_program_name (argv[0]); | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| /* String containing name the program is called with.  */ | ||||
| extern const char *program_name; | ||||
| 
 | ||||
| /* Set program_name, based on argv[0].  */ | ||||
| extern void set_program_name (const char *argv0); | ||||
| 
 | ||||
| #if ENABLE_RELOCATABLE | ||||
| 
 | ||||
| /* Set program_name, based on argv[0], and original installation prefix and
 | ||||
|    directory, for relocatability.  */ | ||||
| extern void set_program_name_and_installdir (const char *argv0, | ||||
| 					     const char *orig_installprefix, | ||||
| 					     const char *orig_installdir); | ||||
| #undef set_program_name | ||||
| #define set_program_name(ARG0) \ | ||||
|   set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) | ||||
| 
 | ||||
| /* Return the full pathname of the current executable, based on the earlier
 | ||||
|    call to set_program_name_and_installdir.  Return NULL if unknown.  */ | ||||
| extern char *get_full_program_name (void); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #endif /* _PROGNAME_H */ | ||||
|  | @ -37,6 +37,8 @@ | |||
| #define _GNU_SOURCE	1 | ||||
| #include <getopt.h> | ||||
| 
 | ||||
| #include "progname.h" | ||||
| 
 | ||||
| #ifdef ENABLE_LZMA | ||||
| #include <grub/lib/LzmaEnc.h> | ||||
| 
 | ||||
|  | @ -316,7 +318,7 @@ static void | |||
| usage (int status) | ||||
| { | ||||
|   if (status) | ||||
|     fprintf (stderr, _("Try ``%s --help'' for more information.\n"), progname); | ||||
|     fprintf (stderr, _("Try ``%s --help'' for more information.\n"), program_name); | ||||
|   else | ||||
|     printf ("\
 | ||||
| Usage: grub-mkimage [OPTION]... [MODULES]\n\ | ||||
|  | @ -348,8 +350,7 @@ main (int argc, char *argv[]) | |||
|   char *config = NULL; | ||||
|   FILE *fp = stdout; | ||||
| 
 | ||||
|   progname = "grub-mkimage"; | ||||
| 
 | ||||
|   set_program_name (argv[0]); | ||||
|   textdomain (PACKAGE); | ||||
| 
 | ||||
|   while (1) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue