* 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>
|
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 ...
|
* aclocal.m4: Move from here ...
|
||||||
* acinclude.m4: ... to here.
|
* acinclude.m4: ... to here.
|
||||||
* autogen.sh: Add call to `aclocal'.
|
* autogen.sh: Add call to `aclocal'.
|
||||||
|
|
|
@ -87,7 +87,7 @@ sbin_UTILITIES += grub-emu
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# For grub-mkimage.
|
# 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
|
util/resolve.c lib/LzmaEnc.c lib/LzFind.c
|
||||||
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)
|
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)
|
||||||
util/i386/pc/grub-mkimage.c_DEPENDENCIES = Makefile
|
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
|
#define _GNU_SOURCE 1
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
|
||||||
|
#include "progname.h"
|
||||||
|
|
||||||
#ifdef ENABLE_LZMA
|
#ifdef ENABLE_LZMA
|
||||||
#include <grub/lib/LzmaEnc.h>
|
#include <grub/lib/LzmaEnc.h>
|
||||||
|
|
||||||
|
@ -316,7 +318,7 @@ static void
|
||||||
usage (int status)
|
usage (int status)
|
||||||
{
|
{
|
||||||
if (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
|
else
|
||||||
printf ("\
|
printf ("\
|
||||||
Usage: grub-mkimage [OPTION]... [MODULES]\n\
|
Usage: grub-mkimage [OPTION]... [MODULES]\n\
|
||||||
|
@ -348,8 +350,7 @@ main (int argc, char *argv[])
|
||||||
char *config = NULL;
|
char *config = NULL;
|
||||||
FILE *fp = stdout;
|
FILE *fp = stdout;
|
||||||
|
|
||||||
progname = "grub-mkimage";
|
set_program_name (argv[0]);
|
||||||
|
|
||||||
textdomain (PACKAGE);
|
textdomain (PACKAGE);
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
|
|
Loading…
Reference in a new issue