if (incremental_option)
{
- size_t buffer_size = 1000;
- char *buffer = xmalloc (buffer_size);
+ size_t buffer_size = 0;
+ char *buffer = NULL;
const char *q;
collect_and_sort_names ();
{
struct tar_stat_info st;
size_t plen = strlen (p->name);
- if (buffer_size <= plen)
- {
- while ((buffer_size *= 2) <= plen)
- continue;
- buffer = xrealloc (buffer, buffer_size);
- }
+ while (buffer_size <= plen)
+ buffer = x2realloc (buffer, &buffer_size);
memcpy (buffer, p->name, plen);
if (! ISSLASH (buffer[plen - 1]))
buffer[plen++] = DIRECTORY_SEPARATOR;
}
st.orig_file_name = xstrdup (p->name);
}
- if (buffer_size < plen + qlen)
- {
- while ((buffer_size *=2 ) < plen + qlen)
- continue;
- buffer = xrealloc (buffer, buffer_size);
- }
+ while (buffer_size < plen + qlen)
+ buffer = x2realloc (buffer, &buffer_size);
strcpy (buffer + plen, q + 1);
dump_file (&st, q + 1, buffer);
}
source = ep->v.name;
source_len = strlen (source);
- if (name_buffer_length < source_len)
- {
- do
- {
- name_buffer_length *= 2;
- if (! name_buffer_length)
- xalloc_die ();
- }
- while (name_buffer_length < source_len);
-
- free (name_buffer);
- name_buffer = xmalloc(name_buffer_length + 2);
- }
+ while (name_buffer_length <= source_len)
+ name_buffer = x2realloc(name_buffer, &name_buffer_length);
strcpy (name_buffer, source);
chopslash (name_buffer);
}
size_t name_length = name->length;
size_t allocated_length = (name_length >= NAME_FIELD_SIZE
? name_length + NAME_FIELD_SIZE
- : NAME_FIELD_SIZE);
- char *namebuf = xmalloc (allocated_length + 1);
- /* FIXME: + 2 above? */
+ : NAME_FIELD_SIZE) + 2;
+ char *namebuf = xmalloc (allocated_length);
const char *string;
size_t string_length;
int change_dir = name->change_dir;
struct tar_stat_info subdir;
int subfd;
- if (allocated_length <= name_length + string_length)
- {
- do
- {
- allocated_length *= 2;
- if (! allocated_length)
- xalloc_die ();
- }
- while (allocated_length <= name_length + string_length);
-
- namebuf = xrealloc (namebuf, allocated_length + 1);
- }
+ /* need to have at least string_length bytes above the
+ name_length, this includes the trailing null character */
+ while (allocated_length < name_length + string_length)
+ namebuf = x2realloc (namebuf, &allocated_length);
strcpy (namebuf + name_length, string + 1);
np = addname (namebuf, change_dir, false, name);
if (!child_head)