* ground up. It still has remnents of the old code lying about, but it is
* very different now (i.e. cleaner, less global variables, etc)
*
- * Copyright (C) 2000 by Lineo, inc.
+ * Copyright (C) 1999,2000,2001 by Lineo, inc.
* Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
*
* Based in part in the tar implementation in sash
*/
-#include "busybox.h"
-#define BB_DECLARE_EXTERN
-#define bb_need_io_error
-#define bb_need_name_longer_than_foo
-#include "messages.c"
#include <stdio.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
+#include "busybox.h"
+#define BB_DECLARE_EXTERN
+#define bb_need_io_error
+#define bb_need_name_longer_than_foo
+#include "messages.c"
#ifdef BB_FEATURE_TAR_GZIP
extern int unzip(int in, int out);
signal(SIGCHLD, child_died);
if (pipe(unzip_pipe)!=0)
- error_msg_and_die("pipe error\n");
+ error_msg_and_die("pipe error");
if ( (child_pid = fork()) == -1)
- error_msg_and_die("fork failure\n");
+ error_msg_and_die("fork failure");
if (child_pid==0) {
/* child process */
int opt;
if (argc <= 1)
- usage(tar_usage);
+ show_usage();
if (argv[1][0] != '-') {
char *tmp = xmalloc(strlen(argv[1]) + 2);
break;
case 'f':
if (*tarName != '-')
- error_msg_and_die( "Only one 'f' option allowed\n");
+ error_msg_and_die( "Only one 'f' option allowed");
tarName = optarg;
break;
#if defined BB_FEATURE_TAR_EXCLUDE
while (fgets(file, sizeof(file), fileList) != NULL) {
excludeList = xrealloc(excludeList,
sizeof(char *) * (excludeListSize+2));
- if (file[strlen(file)-1] == '\n')
- file[strlen(file)-1] = '\0';
+ chomp(file);
excludeList[excludeListSize] = xstrdup(file);
/* Tack a NULL onto the end of the list */
excludeList[++excludeListSize] = NULL;
break;
#endif
default:
- usage(tar_usage);
+ show_usage();
}
}
*/
if (createFlag == TRUE) {
#ifndef BB_FEATURE_TAR_CREATE
- error_msg_and_die( "This version of tar was not compiled with tar creation support.\n");
+ error_msg_and_die( "This version of tar was not compiled with tar creation support.");
#else
#ifdef BB_FEATURE_TAR_GZIP
if (unzipFlag==TRUE)
- error_msg_and_die("Creation of compressed not internally support by tar, pipe to busybox gunzip\n");
+ error_msg_and_die("Creation of compressed not internally support by tar, pipe to busybox gunzip");
#endif
status = writeTarFile(tarName, verboseFlag, argv + optind, excludeList);
#endif
return EXIT_FAILURE;
flagError:
- error_msg_and_die( "Exactly one of 'c', 'x' or 't' must be specified\n");
+ error_msg_and_die( "Exactly one of 'c', 'x' or 't' must be specified");
}
static void
}
if ( (readSize = full_read(header->tarFd, buffer, readSize)) <= 0 ) {
/* Tarball seems to have a problem */
- error_msg("Unexpected EOF in archive\n");
+ error_msg("Unexpected EOF in archive");
return( FALSE);
}
if ( readSize < writeSize )
/* Do not change permissions or date on symlink,
* since it changes the pointed to file instead. duh. */
#else
- error_msg("%s: Cannot create symlink to '%s': %s\n",
+ error_msg("%s: Cannot create symlink to '%s': %s",
header->name, header->linkname,
"symlinks not supported");
#endif
++*(header->name);
if (alreadyWarned == FALSE) {
- error_msg("Removing leading '/' from member names\n");
+ error_msg("Removing leading '/' from member names");
alreadyWarned = TRUE;
}
}
goto endgame;
} else {
errorFlag=TRUE;
- error_msg("Bad tar header, skipping\n");
+ error_msg("Bad tar header, skipping");
continue;
}
}
break;
#endif
default:
- error_msg("Unknown file type '%c' in tar file\n", header.type);
+ error_msg("Unknown file type '%c' in tar file", header.type);
close( tarFd);
return( FALSE);
}
return ( FALSE);
}
else if (errorFlag==TRUE) {
- error_msg( "Error exit delayed from previous errors\n");
+ error_msg( "Error exit delayed from previous errors");
return( FALSE);
} else
return( status);
close( tarFd);
if ( *(header.name) == '\0' ) {
if (errorFlag==TRUE)
- error_msg( "Error exit delayed from previous errors\n");
+ error_msg( "Error exit delayed from previous errors");
else
return( TRUE);
}
header.typeflag = REGTYPE;
putOctal(header.size, sizeof(header.size), statbuf->st_size);
} else {
- error_msg("%s: Unknown file type\n", real_name);
+ error_msg("%s: Unknown file type", real_name);
return ( FALSE);
}
/* It is against the rules to archive a socket */
if (S_ISSOCK(statbuf->st_mode)) {
- error_msg("%s: socket ignored\n", fileName);
+ error_msg("%s: socket ignored", fileName);
return( TRUE);
}
* the new tarball */
if (tbInfo->statBuf.st_dev == statbuf->st_dev &&
tbInfo->statBuf.st_ino == statbuf->st_ino) {
- error_msg("%s: file is the archive; skipping\n", fileName);
+ error_msg("%s: file is the archive; skipping", fileName);
return( TRUE);
}
while (header_name[0] == '/') {
static int alreadyWarned=FALSE;
if (alreadyWarned==FALSE) {
- error_msg("Removing leading '/' from member names\n");
+ error_msg("Removing leading '/' from member names");
alreadyWarned=TRUE;
}
header_name++;
/* open the file we want to archive, and make sure all is well */
if ((inputFileFd = open(fileName, O_RDONLY)) < 0) {
- error_msg("%s: Cannot open: %s\n", fileName, strerror(errno));
+ error_msg("%s: Cannot open: %s", fileName, strerror(errno));
return( FALSE);
}
/* Make sure there is at least one file to tar up. */
if (*argv == NULL)
- error_msg_and_die("Cowardly refusing to create an empty archive\n");
+ error_msg_and_die("Cowardly refusing to create an empty archive");
/* Open the tar file for writing. */
if (!strcmp(tarName, "-"))
/* Hang up the tools, close up shop, head home */
close(tarFd);
if (errorFlag == TRUE) {
- error_msg("Error exit delayed from previous errors\n");
+ error_msg("Error exit delayed from previous errors");
freeHardLinkInfo(&tbInfo.hlInfoHead);
return(FALSE);
}