#include <grp.h>
#endif
+#if defined (_POSIX_VERSION)
+#include <utime.h>
+#else
+struct utimbuf
+{
+ long actime;
+ long modtime;
+};
+#endif
+
#if defined(_POSIX_VERSION) || defined(DIRENT)
#include <dirent.h>
#ifdef direct
char save_linkflag;
extern time_t new_time;
int critical_error = 0;
- time_t restore_times[2];
+ struct utimbuf restore_times;
/* int sparse_ind = 0;*/
return;
}
- restore_times[0] = hstat.st_atime;
- restore_times[1] = hstat.st_mtime;
+ restore_times.actime = hstat.st_atime;
+ restore_times.modtime = hstat.st_mtime;
#ifdef S_ISHIDDEN
if (S_ISHIDDEN (hstat.st_mode)) {
}
if (link_name - lp->name >= NAMSIZ)
write_long (link_name, LF_LONGLINK);
+ current_link_name = link_name;
hstat.st_size = 0;
header = start_header(p, &hstat);
msg_perror ("cannot remove %s", p);
}
if (f_atime_preserve)
- utime (p, restore_times);
+ utime (p, &restore_times);
return;
/*
if(f>=0)
(void)close(f);
if (f_atime_preserve)
- utime (p, restore_times);
+ utime (p, &restore_times);
return;
}
buf[size] = '\0';
if (size >= NAMSIZ)
write_long (buf, LF_LONGLINK);
+ current_link_name = buf;
- buf[NAMSIZ - 1] = '\0';
- if (size >= NAMSIZ)
- size = NAMSIZ - 1;
hstat.st_size = 0; /* Force 0 size on symlink */
header = start_header(p, &hstat);
if (header == NULL)
critical_error = 1;
goto badfile;
}
- strcpy (header->header.arch_linkname, buf);
+ strncpy (header->header.arch_linkname, buf, NAMSIZ);
+ header->header.arch_linkname[NAMSIZ - 1] = '\0';
header->header.linkflag = LF_SYMLINK;
finish_header(header); /* Nothing more to do to it */
if (f_remove_files)
if(f_multivol)
save_name = 0;
if (f_atime_preserve)
- utime (p, restore_times);
+ utime (p, &restore_times);
return;
}
closedir(dirp);
free(namebuf);
if (f_atime_preserve)
- utime (p, restore_times);
+ utime (p, &restore_times);
return;
}
msg("Removing leading / from absolute path names in the archive.");
}
}
+ current_file_name = name;
strncpy(header->header.arch_name, name, NAMSIZ);
header->header.arch_name[NAMSIZ-1] = '\0';
int size = strlen (p) + 1;
int bufsize;
union record *header;
+ struct stat foo;
- /* Link name won't fit, so we write
- an LF_LONGLINK record. */
- hstat.st_size = size;
- header = start_header ("././@LongLink", &hstat);
+
+ bzero (&foo, sizeof foo);
+ foo.st_size = size;
+
+ header = start_header ("././@LongLink", &foo);
header->header.linkflag = type;
finish_header (header);