- if( (select = ckname(Hdr.h_name)) && !Toc )
- Ofile = openout(Hdr.h_name);
- else
- Ofile = 0;
- for(filesz=mklong(Hdr.h_filesize); filesz>0; filesz-= CPIOBSZ){
- ct = filesz>CPIOBSZ? CPIOBSZ: filesz;
- bread(Buf, ct);
- if(Ofile) {
- if(Swap)
- swap(Buf,ct);
- if(write(Ofile, Buf, ct) < 0) {
- fperr("Cannot write %s\n", Hdr.h_name);
- continue;
+ if (A_symlink) {
+ symlsz = (int) mklong(Hdr.h_filesize);
+ bread(Symlbuf, symlsz);
+ Symlbuf[symlsz] = '\0';
+ if((void) ckname(Hdr.h_name) && !Toc)
+ (void)openout(Hdr.h_name, Symlbuf);
+ } else {
+ if( (select = ckname(Hdr.h_name)) && !Toc )
+ Ofile = openout(Hdr.h_name, (char *)0);
+ else
+ Ofile = 0;
+ for(filesz=mklong(Hdr.h_filesize); filesz>0; filesz-= CPIOBSZ){
+ ct = filesz>CPIOBSZ? CPIOBSZ: filesz;
+ bread(Buf, ct);
+ if(Ofile) {
+ if(Swap)
+ swap(Buf,ct,byteswap,halfswap);
+ if(write(Ofile, Buf, ct) < 0) {
+ fperrno("Cannot write %s", Hdr.h_name);
+ continue;
+ }