VirtualBox

Changeset 900 in kBuild for vendor/gnumake/current/expand.c


Ignore:
Timestamp:
May 23, 2007 3:13:11 AM (18 years ago)
Author:
bird
Message:

Load /home/bird/src/Gnu/make/2007-05-23 into vendor/gnumake/current.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/gnumake/current/expand.c

    r501 r900  
    5656
    5757char *
    58 variable_buffer_output (char *ptr, char *string, unsigned int length)
     58variable_buffer_output (char *ptr, const char *string, unsigned int length)
    5959{
    6060  register unsigned int newlen = length + (ptr - variable_buffer);
     
    6666                                ? newlen + 100
    6767                                : 2 * variable_buffer_length);
    68       variable_buffer = (char *) xrealloc (variable_buffer,
    69                                            variable_buffer_length);
     68      variable_buffer = xrealloc (variable_buffer, variable_buffer_length);
    7069      ptr = variable_buffer + offset;
    7170    }
    7271
    73   bcopy (string, ptr, length);
     72  memcpy (ptr, string, length);
    7473  return ptr + length;
    7574}
     
    8584    {
    8685      variable_buffer_length = 200;
    87       variable_buffer = (char *) xmalloc (variable_buffer_length);
     86      variable_buffer = xmalloc (variable_buffer_length);
    8887      variable_buffer[0] = '\0';
    8988    }
     
    9594/* Recursively expand V.  The returned string is malloc'd.  */
    9695
    97 static char *allocated_variable_append PARAMS ((const struct variable *v));
     96static char *allocated_variable_append (const struct variable *v);
    9897
    9998char *
     
    162161#endif
    163162static char *
    164 reference_variable (char *o, char *name, unsigned int length)
    165 {
    166   register struct variable *v;
     163reference_variable (char *o, const char *name, unsigned int length)
     164{
     165  struct variable *v;
    167166  char *value;
    168167
     
    194193   LINE is NULL, start at the beginning of the buffer.
    195194   Return a pointer to LINE, or to the beginning of the buffer if LINE is
    196    NULL.  */
    197 
     195   NULL.
     196 */
    198197char *
    199 variable_expand_string (char *line, char *string, long length)
    200 {
    201   register struct variable *v;
    202   register char *p, *o, *p1;
    203   char save_char = '\0';
     198variable_expand_string (char *line, const char *string, long length)
     199{
     200  struct variable *v;
     201  const char *p, *p1;
     202  char *abuf = NULL;
     203  char *o;
    204204  unsigned int line_offset;
    205205
    206206  if (!line)
    207207    line = initialize_variable_output();
    208 
    209   p = string;
    210208  o = line;
    211209  line_offset = line - variable_buffer;
    212210
    213   if (length >= 0)
    214     {
    215       save_char = string[length];
    216       string[length] = '\0';
    217     }
     211  if (length == 0)
     212    {
     213      variable_buffer_output (o, "", 1);
     214      return (variable_buffer);
     215    }
     216
     217  /* If we want a subset of the string, allocate a temporary buffer for it.
     218     Most of the functions we use here don't work with length limits.  */
     219  if (length > 0 && string[length] != '\0')
     220    {
     221      abuf = xmalloc(length+1);
     222      memcpy(abuf, string, length);
     223      abuf[length] = '\0';
     224      string = abuf;
     225    }
     226  p = string;
    218227
    219228  while (1)
     
    246255            char openparen = *p;
    247256            char closeparen = (openparen == '(') ? ')' : '}';
    248             register char *beg = p + 1;
    249             int free_beg = 0;
    250             char *op, *begp;
    251             char *end, *colon;
     257            const char *begp;
     258            const char *beg = p + 1;
     259            char *op;
     260            char *abeg = NULL;
     261            const char *end, *colon;
    252262
    253263            op = o;
     
    285295                if (count < 0)
    286296                  {
    287                     beg = expand_argument (beg, p); /* Expand the name.  */
    288                     free_beg = 1; /* Remember to free BEG when finished.  */
     297                    abeg = expand_argument (beg, p); /* Expand the name.  */
     298                    beg = abeg;
    289299                    end = strchr (beg, '\0');
    290300                  }
     
    304314              {
    305315                /* This looks like a substitution reference: $(FOO:A=B).  */
    306                 char *subst_beg, *subst_end, *replace_beg, *replace_end;
     316                const char *subst_beg, *subst_end, *replace_beg, *replace_end;
    307317
    308318                subst_beg = colon + 1;
     
    336346                           extra % at the beginning to use in case there
    337347                           isn't one in the pattern.  */
    338                         pattern = (char *) alloca (subst_end - subst_beg + 2);
     348                        pattern = alloca (subst_end - subst_beg + 2);
    339349                        *(pattern++) = '%';
    340                         bcopy (subst_beg, pattern, subst_end - subst_beg);
     350                        memcpy (pattern, subst_beg, subst_end - subst_beg);
    341351                        pattern[subst_end - subst_beg] = '\0';
    342352
    343                         replace = (char *) alloca (replace_end
    344                                                    - replace_beg + 2);
     353                        replace = alloca (replace_end - replace_beg + 2);
    345354                        *(replace++) = '%';
    346                         bcopy (replace_beg, replace,
     355                        memcpy (replace, replace_beg,
    347356                               replace_end - replace_beg);
    348357                        replace[replace_end - replace_beg] = '\0';
     
    354363                          {
    355364                            ++ppercent;
    356                             rpercent = 0;
     365                            rpercent = find_percent (replace);
     366                            if (rpercent)
     367                              ++rpercent;
    357368                          }
    358369                        else
     
    364375                          }
    365376
    366                         o = patsubst_expand (o, value, pattern, replace,
    367                                              ppercent, rpercent);
     377                        o = patsubst_expand_pat (o, value, pattern, replace,
     378                                                 ppercent, rpercent);
    368379
    369380                        if (v->recursive)
     
    378389                o = reference_variable (o, beg, end - beg);
    379390
    380           if (free_beg)
    381             free (beg);
     391          if (abeg)
     392            free (abeg);
    382393          }
    383394          break;
     
    403414    }
    404415
    405   if (save_char)
    406     string[length] = save_char;
    407 
    408   (void)variable_buffer_output (o, "", 1);
     416  if (abuf)
     417    free (abuf);
     418
     419  variable_buffer_output (o, "", 1);
    409420  return (variable_buffer + line_offset);
    410421}
     
    417428
    418429char *
    419 variable_expand (char *line)
     430variable_expand (const char *line)
    420431{
    421432  return variable_expand_string(NULL, line, (long)-1);
     
    438449
    439450  if (!end || *end == '\0')
    440     return allocated_variable_expand ((char *)str);
    441 
    442   tmp = (char *) alloca (end - str + 1);
    443   bcopy (str, tmp, end - str);
     451    return allocated_variable_expand (str);
     452
     453  tmp = alloca (end - str + 1);
     454  memcpy (tmp, str, end - str);
    444455  tmp[end - str] = '\0';
    445456
     
    452463
    453464char *
    454 variable_expand_for_file (char *line, struct file *file)
     465variable_expand_for_file (const char *line, struct file *file)
    455466{
    456467  char *result;
     
    543554
    544555char *
    545 allocated_variable_expand_for_file (char *line, struct file *file)
     556allocated_variable_expand_for_file (const char *line, struct file *file)
    546557{
    547558  char *value;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette