- while (read(io, (char *)&d, sizeof d) == sizeof d) {
- if (d.d_ino == 0)
- continue;
- printf("%d\t", d.d_ino);
- for (i=0; i<DIRSIZ; i++) {
- if (d.d_name[i] == 0)
- break;
- printf("%c", d.d_name[i]);
+ printf("\nname->inode\n");
+ while ((size = read(fd, dirbuf, DIRBLKSIZ)) == DIRBLKSIZ)
+ for(dp = dirbuf; (dp < (dirbuf + size)) &&
+ (dp + ((DP *)dp)->d_reclen) < (dirbuf + size);
+ dp += ((DP *)dp)->d_reclen) {
+ if (((DP *)dp)->d_ino == 0)
+ continue;
+ if (((DP *)dp)->d_reclen > DIRSIZ(((DP *)dp)))
+ continue;
+ if (((DP *)dp)->d_namlen > MAXNAMLEN+1)
+ _stop("Corrupt file name length! Run fsck soon!\n");
+ printf("%s->%d\n", ((DP *)dp)->d_name,
+ ((DP *)dp)->d_ino);