int list_jar(int, char**, int);
int extract_jar(int, char**, int);
int add_file_to_jar(int, int, const char*, struct stat*);
-int add_to_jar(int, const char*, const char*);
+int add_to_jar(int, const char*);
+int add_to_jar_with_dir(int, const char*, const char*);
int create_central_header(int);
int make_manifest(int, const char*);
static void init_args(char **, int);
fprintf(stderr, "Error: missing argument for -C.\n");
exit(1);
}
- if (add_to_jar(jarfd, dir_to_change, file_to_add)) {
+ if (add_to_jar_with_dir(jarfd, dir_to_change, file_to_add)) {
fprintf(stderr,
"Error adding %s (in directory %s) to jar archive!\n",
file_to_add, dir_to_change);
exit(1);
}
} else {
- if(add_to_jar(jarfd, NULL, arg)){
+ if(add_to_jar(jarfd, arg)){
fprintf(stderr, "Error adding %s to jar archive!\n", arg);
exit(1);
}
return 0;
}
-int add_to_jar(int fd, const char *new_dir, const char *file){
+/* Implements -C by wrapping add_to_jar. new_dir is the directory
+ to switch to. */
+int
+add_to_jar_with_dir (int fd, const char* new_dir, const char* file)
+{
+ int retval;
+ char old_dir[MAXPATHLEN];
+ if (getcwd(old_dir, MAXPATHLEN) == NULL) {
+ perror("getcwd");
+ return 1;
+ }
+ if (chdir(new_dir) == -1) {
+ perror(new_dir);
+ return 1;
+ }
+ retval=add_to_jar(fd, file);
+ if (chdir(old_dir) == -1) {
+ perror(old_dir);
+ return 1;
+ }
+ return retval;
+}
+
+int
+add_to_jar (int fd, const char *file) {
struct stat statbuf;
DIR *dir;
struct dirent *de;
zipentry *ze;
int stat_return;
- char old_dir[MAXPATHLEN];
/* This is a quick compatibility fix -- Simon Weijgers <simon@weijgers.com>
* It fixes this:
while (*file=='.' && *(file+1)=='/')
file+=2;
- /* If new_dir isn't null, we need to change to that directory. However,
- we also need to return to the old directory when we're done. See below.*/
- if(new_dir != NULL){
- if (getcwd(old_dir, MAXPATHLEN) == NULL) {
- perror("getcwd");
- return 1;
- }
- if(chdir(new_dir) == -1){
- perror(new_dir);
- return 1;
- }
- }
-
if(jarfile && !strcmp(file, jarfile)){
if(verbose)
printf("skipping: %s\n", file);
strcpy(t_ptr, de->d_name);
- if(add_to_jar(fd, NULL, fullname)){
+ if (add_to_jar(fd, fullname)) {
fprintf(stderr, "Error adding file to jar!\n");
return 1;
}
add_fd = open(file, O_RDONLY | O_BINARY);
if(add_fd < 0){
fprintf(stderr, "Error opening %s.\n", file);
- return 0;
+ return 1;
}
if(add_file_to_jar(fd, add_fd, file, &statbuf)){
} else {
fprintf(stderr, "Illegal file specified: %s\n", file);
}
-
- /* If (and only if!) new_dir != NULL, we switched directories, so
- we have to switch back to the old directory. */
- if (new_dir != NULL) {
- if (chdir(old_dir) == -1) {
- perror(old_dir);
- return 1;
- }
- }
-
return 0;
}