+/* Copy at most LEN bytes from SRC to DST. Terminate with NUL unless
+ SRC is LEN characters long */
+static void
+tar_copy_str (char *dst, const char *src, size_t len)
+{
+ dst[len-1] = 0;
+ strncpy (dst, src, len);
+}
+
+/* Write a "private" header */
+static union block *
+start_private_header (const char *name, size_t size)
+{
+ time_t t;
+ union block *header = find_next_block ();
+
+ memset (header->buffer, 0, sizeof (union block));
+
+ tar_copy_str (header->header.name, name, NAME_FIELD_SIZE);
+ OFF_TO_CHARS (size, header->header.size);
+
+ time (&t);
+ TIME_TO_CHARS (t, header->header.mtime);
+ MODE_TO_CHARS (S_IFREG|S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, header->header.mode);
+ UID_TO_CHARS (getuid (), header->header.uid);
+ GID_TO_CHARS (getgid (), header->header.gid);
+ MAJOR_TO_CHARS (0, header->header.devmajor);
+ MAJOR_TO_CHARS (0, header->header.devminor);
+ strncpy (header->header.magic, TMAGIC, TMAGLEN);
+ strncpy (header->header.version, TVERSION, TVERSLEN);
+ return header;
+}