Ignore:
Timestamp:
Feb 3, 2006, 10:48:10 PM (20 years ago)
Author:
bird
Message:

Bug 20, fixed: use libiberty make_temp_file instead of big, clumsy and unsafe mktemp stuff.

Location:
branches/libc-0.6/src/emx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/libc-0.6/src/emx/ChangeLog.LIBC

    r2511 r2513  
    22
    33TODO: open replace on RAMFS fails with error 32!
     4
     52006-02-03: knut st. osmundsen <bird-gccos2-spam@anduin.net>
     6    - ld:
     7        o #20: use make_temp_file instead of mktemp. This involved including
     8          libiberty.h which required some adjustments of duplicate code to work.
    49
    5102006-01-18: knut st. osmundsen <bird-gccos2-spam@anduin.net>
  • branches/libc-0.6/src/emx/src/ld/ld.c

    r2509 r2513  
    4343#include <string.h>
    4444#endif
     45#include "libiberty.h"
    4546
    4647#if !defined(A_OUT)
     
    872873int cl_refs_allocated;
    873874
    874 char *xmalloc (int);
    875 void *xrealloc (void *, int);
     875void *xmalloc (size_t);
     876void *xrealloc (void *, size_t);
    876877void usage (char *, char *);
    877878void fatal (char *, ...);
     
    899900void symtab_init (void);
    900901void padfile (int, int);
    901 char *concat (const char *, const char *, const char *);
    902902char *get_file_name (struct file_entry *);
    903903symbol *getsym (char *), *getsym_soft (char *);
     
    12131213          discard_locals = DISCARD_ALL;
    12141214          break;
    1215        
     1215
    12161216        case 'y':
    12171217          {
     
    12421242          search_dirs[n_search_dirs - 1] = optarg;
    12431243          break;
    1244        
     1244
    12451245        case 'M':
    12461246          write_map = 1;
     
    13091309              = (struct string_list_element *)
    13101310                xmalloc (sizeof (struct string_list_element));
    1311        
     1311
    13121312            new->str = optarg;
    13131313            new->next = set_element_prefixes;
     
    13921392
    13931393        case 'l':
    1394           p->filename = concat ("", optarg, "");
    1395           p->local_sym_name = concat ("-l", optarg, "");
     1394          p->filename = concat ("", optarg, "", NULL);
     1395          p->local_sym_name = concat ("-l", optarg, "", NULL);
    13961396          p->search_dirs_flag = 1;
    13971397          p->dynamic = !opt_libs_static;
     
    16121612        {
    16131613          int lendir = strlen (search_dirs[i]);
    1614           register char *string = xmalloc (lendir + lenname + 4 + 6 + 1);
     1614          register char *string = (char *) xmalloc (lendir + lenname + 4 + 6 + 1);
    16151615          int j;
    16161616
     
    24832483                         entry->filename);
    24842484                read_entry_symbols (desc, subentry);
    2485                 subentry->strings = xmalloc (subentry->strs_size);
     2485                subentry->strings = (char *) xmalloc (subentry->strs_size);
    24862486                read_entry_strings (desc, subentry);
    24872487
     
    34193419          if (!demangler || !(nm = (*demangler)(g->name)))
    34203420            nm = g->name;
    3421           errmsg = xmalloc (strlen (errfmt) + strlen (nm) + 1);
     3421          errmsg = (char *) xmalloc (strlen (errfmt) + strlen (nm) + 1);
    34223422          sprintf (errmsg, errfmt, nm, data_segment ? "data" : "text");
    34233423          if (nm != g->name)
     
    38543854void check_exe (void)
    38553855{
    3856   char *ext, *tmp_dir;
    3857   size_t tmp_dir_len;
     3856  char *ext;
    38583857
    38593858  if (exe_flag)
     
    38673866      {
    38683867        touch_filename = output_filename;
    3869         exe_filename = concat (output_filename, ".exe", "");
     3868        exe_filename = concat (output_filename, ".exe", NULL);
    38703869      }
    38713870    }
     
    38873886  /* Create a temporary a.out executable file. */
    38883887
    3889   tmp_dir = getenv ("TMPDIR");
    3890   if (tmp_dir == NULL) tmp_dir = getenv ("TMP");
    3891   if (tmp_dir == NULL) tmp_dir = getenv ("TEMP");
    3892   if (tmp_dir == NULL) tmp_dir = ".";
    3893   tmp_dir_len = strlen (tmp_dir);
    3894   output_filename = xmalloc (tmp_dir_len + 10);
    3895   memcpy (output_filename, tmp_dir, tmp_dir_len);
    3896   if (tmp_dir_len != 0 && strchr ("\\/:", tmp_dir[tmp_dir_len-1]) == NULL)
    3897     output_filename[tmp_dir_len++] = '\\';
    3898   strcpy (output_filename + tmp_dir_len, "ldXXXXXX");
    3899   if (mktemp (output_filename) == NULL)
    3900     fatal ("mktemp(\"%s\") failed", output_filename);
     3888  output_filename = make_temp_file ("ldXXXXXX");
    39013889
    39023890  if (rsxnt_linked != EMX_DEFAULT && strip_symbols != STRIP_NONE) /* RSXNT */
     
    50515039        if (strncmp (tmp, "-l", 2) != 0
    50525040            && (len < 2 || strcmp (tmp+len-2, ".o") != 0))
    5053           tmp = concat (tmp, ".o", "");   /* Needed by GDB */
     5041          tmp = concat (tmp, ".o", NULL);   /* Needed by GDB */
    50545042        nl.n_un.n_strx = assign_string_table_index (tmp);
    50555043      }
     
    53975385
    53985386  if (errno < sys_nerr)
    5399     s = concat ("", sys_errlist[errno], " for %s");
     5387    s = concat ("", sys_errlist[errno], " for %s", NULL);
    54005388  else
    54015389    s = "cannot open %s";
     
    54135401
    54145402  if (errno < sys_nerr)
    5415     s = concat ("", sys_errlist[errno], " for ");
     5403    s = concat ("", sys_errlist[errno], " for ", NULL);
    54165404  else
    54175405    s = "cannot open ";
     
    54745462}
    54755463
    5476 /* Return a newly-allocated string
    5477    whose contents concatenate the strings S1, S2, S3.  */
    5478 
    5479 char *
    5480 concat (s1, s2, s3)
    5481      const char *s1, *s2, *s3;
    5482 {
    5483   register int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
    5484   register char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
    5485 
    5486   strcpy (result, s1);
    5487   strcpy (result + len1, s2);
    5488   strcpy (result + len1 + len2, s3);
    5489   result[len1 + len2 + len3] = 0;
    5490 
    5491   return result;
    5492 }
    5493 
    54945464/* Parse the string ARG using scanf format FORMAT, and return the result.
    54955465   If it does not parse, report fatal error
     
    55085478/* Like malloc but get fatal error if memory is exhausted.  */
    55095479
    5510 char *
     5480void *
    55115481xmalloc (size)
    5512      int size;
     5482     size_t size;
    55135483{
    55145484  register char *result = malloc (size);
     
    55235493xrealloc (ptr, size)
    55245494     void *ptr;
    5525      int size;
     5495     size_t size;
    55265496{
    55275497  register char *result = realloc (ptr, size);
     
    56845654     */
    56855655    pName = (struct lx_tmp *)xmalloc(sizeof(*pName));
    5686     pName->name = psz = xmalloc(_MAX_PATH);
     5656    pName->name = psz = (char *)xmalloc(_MAX_PATH);
    56875657    if (!make_tempfile(psz, "lddef", ".def"))
    56885658    {
Note: See TracChangeset for help on using the changeset viewer.