* dllwrap.c: Replace 'program_name' with 'prog_name' to avoid conflicts with

exported global defined in bucomm.h.
  (deduce_name): Rename parameter 'program_name' to 'name' to avoid shadowing
  the global defined in bucomm.h.
This commit is contained in:
Nick Clifton 2004-07-13 16:46:51 +00:00
parent 982de27abe
commit 61513dc1cb
2 changed files with 56 additions and 60 deletions

View File

@ -1,3 +1,10 @@
2004-07-13 Nick Clifton <nickc@redhat.com>
* dllwrap.c: Replace 'program_name' with 'prog_name' to avoid
conflicts with exported global defined in bucomm.h.
(deduce_name): Rename parameter 'program_name' to 'name' to avoid
shadowing the global defined in bucomm.h.
2004-07-12 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com> 2004-07-12 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
* dlltool.c (ext_prefix_alias): New global variable. * dlltool.c (ext_prefix_alias): New global variable.

View File

@ -1,5 +1,5 @@
/* dllwrap.c -- wrapper for DLLTOOL and GCC to generate PE style DLLs /* dllwrap.c -- wrapper for DLLTOOL and GCC to generate PE style DLLs
Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Mumit Khan (khan@xraylith.wisc.edu). Contributed by Mumit Khan (khan@xraylith.wisc.edu).
This file is part of GNU Binutils. This file is part of GNU Binutils.
@ -101,7 +101,7 @@ static target_type which_target = UNKNOWN_TARGET;
static int dontdeltemps = 0; static int dontdeltemps = 0;
static int dry_run = 0; static int dry_run = 0;
static char *program_name; static char *prog_name;
static int verbose = 0; static int verbose = 0;
@ -139,8 +139,8 @@ static void cleanup_and_exit (int);
static void static void
display (const char * message, va_list args) display (const char * message, va_list args)
{ {
if (program_name != NULL) if (prog_name != NULL)
fprintf (stderr, "%s: ", program_name); fprintf (stderr, "%s: ", prog_name);
vfprintf (stderr, message, args); vfprintf (stderr, message, args);
fputc ('\n', stderr); fputc ('\n', stderr);
@ -244,17 +244,20 @@ look_for_prog (const char *prog_name, const char *prefix, int end_prefix)
Returns a dynamically allocated string. */ Returns a dynamically allocated string. */
static char * static char *
deduce_name (const char *prog_name) deduce_name (const char * name)
{ {
char *cmd; char *cmd;
char *dash, *slash, *cp; const char *dash;
const char *slash;
const char *cp;
dash = NULL; dash = NULL;
slash = NULL; slash = NULL;
for (cp = program_name; *cp != '\0'; ++cp) for (cp = name; *cp != '\0'; ++cp)
{ {
if (*cp == '-') if (*cp == '-')
dash = cp; dash = cp;
if ( if (
#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__) #if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__)
*cp == ':' || *cp == '\\' || *cp == ':' || *cp == '\\' ||
@ -269,24 +272,18 @@ deduce_name (const char *prog_name)
cmd = NULL; cmd = NULL;
if (dash != NULL) if (dash != NULL)
{ /* First, try looking for a prefixed PROG_NAME in the
/* First, try looking for a prefixed PROG_NAME in the PROGRAM_NAME directory, with the same prefix as PROGRAM_NAME. */
PROGRAM_NAME directory, with the same prefix as PROGRAM_NAME. */ cmd = look_for_prog (name, name, dash - name + 1);
cmd = look_for_prog (prog_name, program_name, dash - program_name + 1);
}
if (slash != NULL && cmd == NULL) if (slash != NULL && cmd == NULL)
{ /* Next, try looking for a PROG_NAME in the same directory as
/* Next, try looking for a PROG_NAME in the same directory as that of this program. */
that of this program. */ cmd = look_for_prog (name, name, slash - name + 1);
cmd = look_for_prog (prog_name, program_name, slash - program_name + 1);
}
if (cmd == NULL) if (cmd == NULL)
{ /* Just return PROG_NAME as is. */
/* Just return PROG_NAME as is. */ cmd = xstrdup (name);
cmd = xstrdup (prog_name);
}
return cmd; return cmd;
} }
@ -396,14 +393,14 @@ run (const char *what, char *args)
if (dry_run) if (dry_run)
return 0; return 0;
pid = pexecute (argv[0], (char * const *) argv, program_name, temp_base, pid = pexecute (argv[0], (char * const *) argv, prog_name, temp_base,
&errmsg_fmt, &errmsg_arg, PEXECUTE_ONE | PEXECUTE_SEARCH); &errmsg_fmt, &errmsg_arg, PEXECUTE_ONE | PEXECUTE_SEARCH);
if (pid == -1) if (pid == -1)
{ {
int errno_val = errno; int errno_val = errno;
fprintf (stderr, "%s: ", program_name); fprintf (stderr, "%s: ", prog_name);
fprintf (stderr, errmsg_fmt, errmsg_arg); fprintf (stderr, errmsg_fmt, errmsg_arg);
fprintf (stderr, ": %s\n", strerror (errno_val)); fprintf (stderr, ": %s\n", strerror (errno_val));
return 1; return 1;
@ -479,13 +476,13 @@ strhash (const char *str)
static void static void
usage (FILE *file, int status) usage (FILE *file, int status)
{ {
fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), program_name); fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), prog_name);
fprintf (file, _(" Generic options:\n")); fprintf (file, _(" Generic options:\n"));
fprintf (file, _(" --quiet, -q Work quietly\n")); fprintf (file, _(" --quiet, -q Work quietly\n"));
fprintf (file, _(" --verbose, -v Verbose\n")); fprintf (file, _(" --verbose, -v Verbose\n"));
fprintf (file, _(" --version Print dllwrap version\n")); fprintf (file, _(" --version Print dllwrap version\n"));
fprintf (file, _(" --implib <outname> Synonym for --output-lib\n")); fprintf (file, _(" --implib <outname> Synonym for --output-lib\n"));
fprintf (file, _(" Options for %s:\n"), program_name); fprintf (file, _(" Options for %s:\n"), prog_name);
fprintf (file, _(" --driver-name <driver> Defaults to \"gcc\"\n")); fprintf (file, _(" --driver-name <driver> Defaults to \"gcc\"\n"));
fprintf (file, _(" --driver-flags <flags> Override default ld flags\n")); fprintf (file, _(" --driver-flags <flags> Override default ld flags\n"));
fprintf (file, _(" --dlltool-name <dlltool> Defaults to \"dlltool\"\n")); fprintf (file, _(" --dlltool-name <dlltool> Defaults to \"dlltool\"\n"));
@ -624,7 +621,7 @@ main (int argc, char **argv)
char *image_base_str = 0; char *image_base_str = 0;
program_name = argv[0]; prog_name = argv[0];
#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES) #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
setlocale (LC_MESSAGES, ""); setlocale (LC_MESSAGES, "");
@ -688,7 +685,7 @@ main (int argc, char **argv)
verbose = 1; verbose = 1;
break; break;
case OPTION_VERSION: case OPTION_VERSION:
print_version (program_name); print_version (prog_name);
break; break;
case 'e': case 'e':
entry_point = optarg; entry_point = optarg;
@ -781,7 +778,7 @@ main (int argc, char **argv)
} }
} }
/* sanity checks. */ /* Sanity checks. */
if (! dll_name && ! dll_file_name) if (! dll_name && ! dll_file_name)
{ {
warn (_("Must provide at least one of -o or --dllname options")); warn (_("Must provide at least one of -o or --dllname options"));
@ -806,6 +803,7 @@ main (int argc, char **argv)
if (! def_file_seen) if (! def_file_seen)
{ {
char *fileprefix = choose_temp_base (); char *fileprefix = choose_temp_base ();
def_file_name = (char *) xmalloc (strlen (fileprefix) + 5); def_file_name = (char *) xmalloc (strlen (fileprefix) + 5);
sprintf (def_file_name, "%s.def", sprintf (def_file_name, "%s.def",
(dontdeltemps) ? mybasename (fileprefix) : fileprefix); (dontdeltemps) ? mybasename (fileprefix) : fileprefix);
@ -816,7 +814,7 @@ main (int argc, char **argv)
Creating one, but that may not be what you want")); Creating one, but that may not be what you want"));
} }
/* set the target platform. */ /* Set the target platform. */
if (strstr (target, "cygwin")) if (strstr (target, "cygwin"))
which_target = CYGWIN_TARGET; which_target = CYGWIN_TARGET;
else if (strstr (target, "mingw")) else if (strstr (target, "mingw"))
@ -824,12 +822,11 @@ Creating one, but that may not be what you want"));
else else
which_target = UNKNOWN_TARGET; which_target = UNKNOWN_TARGET;
/* re-create the command lines as a string, taking care to quote stuff. */ /* Re-create the command lines as a string, taking care to quote stuff. */
dlltool_cmdline = dyn_string_new (cmdline_len); dlltool_cmdline = dyn_string_new (cmdline_len);
if (verbose) if (verbose)
{ dyn_string_append_cstr (dlltool_cmdline, " -v");
dyn_string_append_cstr (dlltool_cmdline, " -v");
}
dyn_string_append_cstr (dlltool_cmdline, " --dllname "); dyn_string_append_cstr (dlltool_cmdline, " --dllname ");
dyn_string_append_cstr (dlltool_cmdline, dll_name); dyn_string_append_cstr (dlltool_cmdline, dll_name);
@ -922,10 +919,8 @@ Creating one, but that may not be what you want"));
} }
} }
/* /* Step pre-1. If no --def <EXPORT_DEF> is specified,
* Step pre-1. If no --def <EXPORT_DEF> is specified, then create it then create it and then pass it on. */
* and then pass it on.
*/
if (! def_file_seen) if (! def_file_seen)
{ {
@ -980,16 +975,13 @@ Creating one, but that may not be what you want"));
fprintf (stderr, _("DRIVER options : %s\n"), driver_cmdline->s); fprintf (stderr, _("DRIVER options : %s\n"), driver_cmdline->s);
} }
/* /* Step 1. Call GCC/LD to create base relocation file. If using GCC, the
* Step 1. Call GCC/LD to create base relocation file. If using GCC, the driver command line will look like the following:
* driver command line will look like the following:
* % gcc -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
* % gcc -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
* If the user does not specify a base name, create temporary one that
* If the user does not specify a base name, create temporary one that is deleted at exit. */
* is deleted at exit.
*
*/
if (! base_file_name) if (! base_file_name)
{ {
@ -1027,23 +1019,19 @@ Creating one, but that may not be what you want"));
dyn_string_delete (step1); dyn_string_delete (step1);
} }
/* Step 2. generate the exp file by running dlltool.
dlltool command line will look like the following:
/*
* Step 2. generate the exp file by running dlltool. % dlltool -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
* dlltool command line will look like the following:
* If the user does not specify a base name, create temporary one that
* % dlltool -Wl,--dll --Wl,--base-file,foo.base [rest of command line] is deleted at exit. */
*
* If the user does not specify a base name, create temporary one that
* is deleted at exit.
*
*/
if (! exp_file_name) if (! exp_file_name)
{ {
char *p = strrchr (dll_name, '.'); char *p = strrchr (dll_name, '.');
size_t prefix_len = (p) ? p - dll_name : strlen (dll_name); size_t prefix_len = (p) ? (size_t) (p - dll_name) : strlen (dll_name);
exp_file_name = (char *) xmalloc (prefix_len + 4 + 1); exp_file_name = (char *) xmalloc (prefix_len + 4 + 1);
strncpy (exp_file_name, dll_name, prefix_len); strncpy (exp_file_name, dll_name, prefix_len);
exp_file_name[prefix_len] = '\0'; exp_file_name[prefix_len] = '\0';
@ -1053,6 +1041,7 @@ Creating one, but that may not be what you want"));
{ {
int quote; int quote;
dyn_string_t step2 = dyn_string_new (dlltool_cmdline->length dyn_string_t step2 = dyn_string_new (dlltool_cmdline->length
+ strlen (base_file_name) + strlen (base_file_name)
+ strlen (exp_file_name) + strlen (exp_file_name)