X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fgnu.c;h=ca865d04a09744e655d82df812c786f03b622e89;hb=66450ac3e29275524c50fcd991b41266551bf502;hp=806ba1e841b0b92afc7b62b485edbd78bbc846f8;hpb=f9a11075d98cfd0336a325e7c293853d5736f12c;p=chaz%2Ftar diff --git a/src/gnu.c b/src/gnu.c index 806ba1e..ca865d0 100644 --- a/src/gnu.c +++ b/src/gnu.c @@ -126,10 +126,9 @@ read_dir_file() time(&this_time); if(gnu_dumpfile[0]!='/') { #if defined(__MSDOS__) || defined(USG) || defined(_POSIX_VERSION) - if(!getcwd(path,PATH_MAX)) { + if(!getcwd(path,PATH_MAX)) msg("Couldn't get current directory."); exit(EX_SYSTEM); - } #else char *getwd(); @@ -267,7 +266,7 @@ collect_and_sort_names() n->found=0; } if(gnu_dumpfile) - write_dir_file(); + write_dir_file(gnu_dumpfile); } int @@ -471,36 +470,33 @@ int device; for(n=namelist;n;n=n->next) { if(!strcmp(n->name,p)) { - n->dir_contents = new_buf ? new_buf : "\0\0\0\0"; + n->dir_contents = new_buf; break; } } - if (new_buf) - { - len=strlen(p); - buflen= NAMSIZ<=len ? len + NAMSIZ : NAMSIZ; - namebuf= ck_malloc(buflen+1); - - (void)strcpy(namebuf,p); - if(namebuf[len-1]!='/') { - namebuf[len++]='/'; - namebuf[len]='\0'; - } - for(p_buf=new_buf;*p_buf;p_buf+=sublen+1) { - sublen=strlen(p_buf); - if(*p_buf=='D') { - if(len+sublen>=buflen) { - buflen+=NAMSIZ; - namebuf= ck_realloc(namebuf,buflen+1); + len=strlen(p); + buflen= NAMSIZ<=len ? len + NAMSIZ : NAMSIZ; + namebuf= ck_malloc(buflen+1); + + (void)strcpy(namebuf,p); + if(namebuf[len-1]!='/') { + namebuf[len++]='/'; + namebuf[len]='\0'; + } + for(p_buf=new_buf;*p_buf;p_buf+=sublen+1) { + sublen=strlen(p_buf); + if(*p_buf=='D') { + if(len+sublen>=buflen) { + buflen+=NAMSIZ; + namebuf= ck_realloc(namebuf,buflen+1); + } + (void)strcpy(namebuf+len,p_buf+1); + addname(namebuf); + add_dir_name(namebuf,device); } - (void)strcpy(namebuf+len,p_buf+1); - addname(namebuf); - add_dir_name(namebuf,device); - } - } - free(namebuf); - } + } + free(namebuf); } /* Returns non-zero if p is . or .. This could be a macro for speed. */ @@ -535,7 +531,7 @@ int skipcrud; char *from,*to; extern union record *head; - dirp=opendir(skipcrud+current_file_name); + dirp=opendir(skipcrud+head->header.name); if(!dirp) { /* The directory doesn't exist now. It'll be created. @@ -584,7 +580,7 @@ int skipcrud; break; } if(*arc=='\0') { - p=new_name(skipcrud+current_file_name,cur); + p=new_name(skipcrud+head->header.name,cur); if(f_confirm && !confirm("delete",p)) { free(p); continue;