Changeset View
Changeset View
Standalone View
Standalone View
stand/libsa/ufs.c
Show First 20 Lines • Show All 873 Lines • ▼ Show 20 Lines | ufs_readdir(struct open_file *f, struct dirent *d) | ||||
*/ | */ | ||||
again: | again: | ||||
if (fp->f_seekp >= DIP(fp, di_size)) | if (fp->f_seekp >= DIP(fp, di_size)) | ||||
return (ENOENT); | return (ENOENT); | ||||
error = buf_read_file(f, &buf, &buf_size); | error = buf_read_file(f, &buf, &buf_size); | ||||
if (error) | if (error) | ||||
return (error); | return (error); | ||||
dp = (struct direct *)buf; | dp = (struct direct *)buf; | ||||
/* | |||||
* Probable corrupt directory entry, bail out | |||||
* rather than spin forever and hope the user | |||||
* has other options. | |||||
*/ | |||||
if (dp->d_reclen == 0) | |||||
return (0); | |||||
fp->f_seekp += dp->d_reclen; | fp->f_seekp += dp->d_reclen; | ||||
if (dp->d_ino == (ino_t)0) | if (dp->d_ino == (ino_t)0) | ||||
goto again; | goto again; | ||||
d->d_type = dp->d_type; | d->d_type = dp->d_type; | ||||
strcpy(d->d_name, dp->d_name); | strcpy(d->d_name, dp->d_name); | ||||
return (0); | return (0); | ||||
} | } |