* dlltool.c (prefix_encode): New function. Encode temp file prefix from pid.
authorChristopher Faylor <me+cygwin@cgf.cx>
Sat, 5 Jul 2003 02:58:29 +0000 (02:58 +0000)
committerChristopher Faylor <me+cygwin@cgf.cx>
Sat, 5 Jul 2003 02:58:29 +0000 (02:58 +0000)
(dlltmp): Pass address of pointer being alloced or suffer neverending mallocs.
(make_one_lib_file): Allocate enough space for new longer stub names.
(gen_lib_file): Ditto.
(main): Generate the temp file prefix from the pid if prefix was not specified
on the command line.

binutils/ChangeLog
binutils/dlltool.c

index 897cc66..2617875 100644 (file)
@@ -1,3 +1,14 @@
+2003-07-04  Christopher Faylor  <cgf@redhat.com>
+
+       * dlltool.c (prefix_encode): New function.  Encode temp file prefix
+       from pid.
+       (dlltmp): Pass address of pointer being alloced or suffer neverending
+       mallocs.
+       (make_one_lib_file): Allocate enough space for new longer stub names.
+       (gen_lib_file): Ditto.
+       (main): Generate the temp file prefix from the pid if prefix was not
+       specified on the command line.
+
 2003-07-04  Nick Clifton  <nickc@redhat.com>
 
        * readelf.c (get_data): Print (unsigned) hex values for size and
index 81b6b92..544602b 100644 (file)
@@ -350,7 +350,7 @@ static iheadtype *import_list = NULL;
 static char *as_name = NULL;
 static char * as_flags = "";
 
-static char *tmp_prefix = "d";
+static char *tmp_prefix;
 
 static int no_idata4;
 static int no_idata5;
@@ -440,12 +440,12 @@ char *tmp_tail_s_buf;
 char *tmp_tail_o_buf;
 char *tmp_stub_buf;
 
-#define TMP_ASM                dlltmp (tmp_asm_buf, "%sc.s")
-#define TMP_HEAD_S     dlltmp (tmp_head_s_buf, "%sh.s")
-#define TMP_HEAD_O     dlltmp (tmp_head_o_buf, "%sh.o")
-#define TMP_TAIL_S     dlltmp (tmp_tail_s_buf, "%st.s")
-#define TMP_TAIL_O     dlltmp (tmp_tail_o_buf, "%st.o")
-#define TMP_STUB       dlltmp (tmp_stub_buf, "%ss")
+#define TMP_ASM                dlltmp (&tmp_asm_buf, "%sc.s")
+#define TMP_HEAD_S     dlltmp (&tmp_head_s_buf, "%sh.s")
+#define TMP_HEAD_O     dlltmp (&tmp_head_o_buf, "%sh.o")
+#define TMP_TAIL_S     dlltmp (&tmp_tail_s_buf, "%st.s")
+#define TMP_TAIL_O     dlltmp (&tmp_tail_o_buf, "%st.o")
+#define TMP_STUB       dlltmp (&tmp_stub_buf, "%ss")
 
 /* This bit of assemly does jmp * ....  */
 static const unsigned char i386_jtab[] =
@@ -751,14 +751,31 @@ static void inform
   PARAMS ((const char *, ...));
 
 static char *
-dlltmp PARAMS ((char *buf, const char *fmt))
-{
-  if (!buf)
-    buf = malloc (strlen (tmp_prefix) + 17);
-  sprintf (buf, fmt, tmp_prefix);
+prefix_encode PARAMS ((char *start, unsigned code))
+{
+  static char alpha[] = "abcdefghijklmnopqrstuvwxyz";
+  static char buf[32];
+  char *p;
+  strcpy (buf, start);
+  p = strchr (buf, '\0');
+  do
+    *p++ = alpha[code % sizeof (alpha)];
+  while ((code /= sizeof (alpha)) != 0);
+  *p = '\0';
   return buf;
 }
 
+static char *
+dlltmp PARAMS ((char **buf, const char *fmt))
+{
+  if (!*buf)
+    {
+      *buf = malloc (strlen (tmp_prefix) + 64);
+      sprintf (*buf, fmt, tmp_prefix);
+    }
+  return *buf;
+}
+
 static void
 inform VPARAMS ((const char * message, ...))
 {
@@ -2348,7 +2365,7 @@ make_one_lib_file (exp, i)
       asymbol *  ptrs[NSECS + 4 + EXTRA + 1];
       flagword   applicable;
 
-      char *     outname = xmalloc (10);
+      char *     outname = xmalloc (strlen (TMP_STUB) + 10);
       int        oidx = 0;
 
 
@@ -2925,7 +2942,7 @@ gen_lib_file ()
     {
       char *name;
 
-      name = (char *) alloca (sizeof TMP_STUB + 10);
+      name = (char *) alloca (strlen (TMP_STUB) + 10);
       for (i = 0, exp = d_exports; exp; i++, exp = exp->next)
        {
          sprintf (name, "%s%05d.o", TMP_STUB, i);
@@ -3421,6 +3438,9 @@ main (ac, av)
        }
     }
 
+  if (!tmp_prefix)
+    tmp_prefix = prefix_encode ("d", getpid ());
+
   for (i = 0; mtable[i].type; i++)
     if (strcmp (mtable[i].type, mname) == 0)
       break;