static char sccsid
[] = "@(#)tp2.c 4.1 %G%";
j
= ndirent
* (DIRSZ
/sizeof(int));
do (*p
++ = 0); while (--j
);
} while (lastd
->d_namep
== 0);
register struct tent
*tp
;
register struct dent
*p1
;
tread(); /* Read the bootstrap block */
if ((tpentry
[TPB
-1].cksum
!= 0) && (flags
& flm
)) {
ndirent
= tpentry
[TPB
-1].cksum
;
if(flags
& fls
) swab((char *)&ndirent
, (char *)&ndirent
, sizeof(ndirent
));
if(ndirent
< 0 || ndirent
> MDIRENT
) ndirent
= MDIRENT
;
if ((count
% TPB
) == 0) { /* next block */
swab((char *)tptr
, (char *)tptr
, sizeof(*tptr
));
for(i
=0;i
<sizeof(struct tent
)/sizeof(short);i
++)
swab((char *)tptr
, (char *)tptr
, sizeof(*tptr
));
if(tp
->pathnam
[0] != '\0') {
p1
->d_size
= (((long)tp
->size0
&0377L)<<16)+(tp
->size1
&0177777L);
++tptr
; /* bump to next tent */
printf("Directory checksum\n");
if ((flags
& fli
) == 0) done();
printf("Warning: swabbing required\n");
register struct tent
*tp
;
register struct dent
*dp
;
else reg
= open(theader
,0);
read(reg
,(char *)tapeb
,BSIZE
);
swab((char *)&ndirent
, (char *)&tpentry
[TPB
-1].cksum
, sizeof(ndirent
));
tpentry
[TPB
-1].cksum
= ndirent
;
printf("\7\7\7Warning: cannot read prototype boot block.\n");
dp
= dptr
++; /* dptr set to next entry */
tp
->size0
= dp
->d_size
>> 16;
swab((char *)tp
, (char *)tp
, sizeof(*tp
));
for(i
=0;i
<sizeof(struct tent
)/sizeof(short)-1;i
++)
swab((char *)tp
, (char *)tp
, sizeof(*tp
));
for(i
=0;i
<sizeof(struct tent
)/sizeof(short);i
++)
if (read(fio
,(char *)tapeb
,BSIZE
) != BSIZE
) {
printf("Tape read error\n");
if ((flags
& fli
) == 0) done();
if (write(fio
, (char *)tapeb
,BSIZE
) != BSIZE
) {
printf("Tape write error\n");
if (lseek(fio
,(long)blk
*BSIZE
,0) < 0) seekerr();
if ((amt
-= wseeka
) < 0) amt
= -amt
;
lseek(fio
, (long)(b
-1)*BSIZE
, 0); /* seek previous block */
read(fio
, (char *)&wseeka
, 1); /* read next block */
if (lseek(fio
, (long)b
*BSIZE
, 0) < 0) seekerr();
printf("Tape seek error\n");
if ((flags
& (flw
| flv
)) == 0)
repeat
: printf("%c %s ", key
, name
);
if ((flags
& flw
) == 0) {
if (c
== 'n' && getchar() == '\n')
if (c
== 'y' && getchar() == '\n')
while (getchar() != '\n');
} else while (--narg
>= 0) {
register char *p0
, *save0
;
if ((dirp
= opendir(name
)) == NULL
) fserr();
if (dirent
->d_ino
== 0) /* null entry */
if (dirent
->d_name
[0] == '.') /* don't save .xxxx */
save0
= --p0
; /* save loc of \0 */
strcpy(p0
, dirent
->d_name
);
*save0
= 0; /* restore */
printf("%s -- Cannot open file\n", name
);
register char *ptr1
, *ptr0
;
if (stat(name
,&statb
) < 0) fserr();
if ((mode
&= S_IFMT
) != 0) {
if (mode
== S_IFDIR
) /* directory */
if(mode
!= S_IFREG
) return;
/* when we reach here we have recursed until we found
* an ordinary file. Now we look for it in "dir".
if (d
->d_namep
== 0) { /* empty directory slot */
if (empty
== 0) /* remember the first one */
do if (*ptr0
++ != *ptr1
) goto cont
;
/* veritably the same name */
if (flags
& flu
) { /* check the times */
if (d
->d_time
>= statb
.st_mtime
)
if (verify('r') < 0) return;
/* name not found in directory */
printf("Directory overflow\n");
if (verify('a') < 0) return;
if (d
> lastd
) lastd
= d
;
d
->d_mode
= statb
.st_mode
| OK
;
d
->d_size
= statb
.st_size
;
d
->d_time
= statb
.st_mtime
;
register struct tent
*tp
;
swab((char *)tp
, (char *)tp
, sizeof(*tp
));
swab(tp
->pathnam
, tp
->pathnam
, NAMELEN
);
swab((char *)&tp
->uid
, (char *)&tp
->uid
, 4); /* uid,gid,spare,size0 */