/* Create a tar archive.
- Copyright (C) 1985, 1992 Free Software Foundation
+ Copyright (C) 1985, 1992, 1993 Free Software Foundation
This file is part of GNU Tar.
#endif
-#if defined(_POSIX_VERSION) || defined(DIRENT)
-#include <dirent.h>
-#ifdef direct
-#undef direct
-#endif /* direct */
-#define direct dirent
-#define DP_NAMELEN(x) strlen((x)->d_name)
-#endif /* _POSIX_VERSION or DIRENT */
-#if !defined(_POSIX_VERSION) && !defined(DIRENT) && defined(BSD42)
-#include <sys/dir.h>
-#define DP_NAMELEN(x) (x)->d_namlen
-#endif /* not _POSIX_VERSION and BSD42 */
-#ifdef __MSDOS__
-#include "msd_dir.h"
-#define DP_NAMELEN(x) (x)->d_namlen
-#define direct dirent
-#endif
-#if defined(USG) && !defined(_POSIX_VERSION) && !defined(DIRENT)
-#include <ndir.h>
-#define DP_NAMELEN(x) strlen((x)->d_name)
-#endif /* USG and not _POSIX_VERSION and not DIRENT */
-
extern struct stat hstat; /* Stat struct corresponding */
#ifndef __MSDOS__
}
else
{
- p = name_next (1);
- do
+ while (p = name_next (1))
dump_file (p, -1, 1);
- while (p = name_next (1));
}
write_eot ();
&& !S_ISDIR (hstat.st_mode)
&& (f_new_files > 1 || new_time > hstat.st_ctime))
{
- if (curdev < 0)
+ if (curdev == -1)
{
msg ("%s: is unchanged; not dumped", p);
}
}
/* Not found. Add it to the list of possible links. */
- lp = (struct link *) malloc ((unsigned) (sizeof (struct link) + strlen (p)));
+ lp = (struct link *) ck_malloc ((unsigned) (sizeof (struct link) + strlen (p)));
if (!lp)
{
if (!nolinks)
/* sum += i;
if (sum < upperbound)
goto extend;*/
- if (index_offset + i < upperbound)
+ if (index_offset + i <= upperbound)
{
index_offset += i;
exhdr->ext_hdr.isextended++;
else if (S_ISDIR (hstat.st_mode))
{
register DIR *dirp;
- register struct direct *d;
+ register struct dirent *d;
char *namebuf;
int buflen;
register int len;
if (is_dot_or_dotdot (d->d_name))
continue;
- if (DP_NAMELEN (d) + len >= buflen)
+ if (NLENGTH (d) + len >= buflen)
{
- buflen = len + DP_NAMELEN (d);
+ buflen = len + NLENGTH (d);
namebuf = ck_realloc (namebuf, buflen + 1);
/* namebuf[len]='\0';
msg("file name %s%s too long",
/*
* Make room for our scratch space -- initially is 10 elts long
*/
- sparsearray = (struct sp_array *) malloc (sp_array_size * sizeof (struct sp_array));
+ sparsearray = (struct sp_array *) ck_malloc (sp_array_size * sizeof (struct sp_array));
for (i = 0; i < sp_array_size; i++)
{
sparsearray[i].offset = 0;
* realloc the scratch area, since we've run out of room --
*/
sparsearray = (struct sp_array *)
- realloc (sparsearray,
+ ck_realloc (sparsearray,
2 * sp_array_size * (sizeof (struct sp_array)));
sp_array_size *= 2;
}
}
if (amidst_data)
sparsearray[sparse_ind++].numbytes = numbytes;
+ else
+ {
+ sparsearray[sparse_ind].offset = offset-1;
+ sparsearray[sparse_ind++].numbytes = 1;
+ }
close (fd);
return sparse_ind - 1;
strncpy (header->header.arch_name, name, NAMSIZ);
header->header.arch_name[NAMSIZ - 1] = '\0';
- to_oct ((long) (st->st_mode & 07777),
+ to_oct ((long) (f_oldarch ? (st->st_mode & 07777) : st->st_mode),
8, header->header.mode);
to_oct ((long) st->st_uid, 8, header->header.uid);
to_oct ((long) st->st_gid, 8, header->header.gid);