Changeset View
Changeset View
Standalone View
Standalone View
sbin/fsdb/fsdb.c
Show First 20 Lines • Show All 504 Lines • ▼ Show 20 Lines | printf("block %llu: inode block (%ju-%ju)\n", | ||||
(uintmax_t)(inum / INOPB(&sblock) + 1) * INOPB(&sblock)); | (uintmax_t)(inum / INOPB(&sblock) + 1) * INOPB(&sblock)); | ||||
findblk_numtofind--; | findblk_numtofind--; | ||||
if (findblk_numtofind == 0) | if (findblk_numtofind == 0) | ||||
goto end; | goto end; | ||||
} | } | ||||
/* Get on-disk inode aka dinode. */ | /* Get on-disk inode aka dinode. */ | ||||
curinum = inum; | curinum = inum; | ||||
curinode = ginode(inum); | curinode = ginode(inum); | ||||
/* Find IFLNK dinode with allocated data blocks. */ | /* Find UFS_IFLNK dinode with allocated data blocks. */ | ||||
switch (DIP(curinode, di_mode) & IFMT) { | switch (DIP(curinode, di_mode) & UFS_IFMT) { | ||||
case IFDIR: | case UFS_IFDIR: | ||||
case IFREG: | case UFS_IFREG: | ||||
if (DIP(curinode, di_blocks) == 0) | if (DIP(curinode, di_blocks) == 0) | ||||
continue; | continue; | ||||
break; | break; | ||||
case IFLNK: | case UFS_IFLNK: | ||||
{ | { | ||||
uint64_t size = DIP(curinode, di_size); | uint64_t size = DIP(curinode, di_size); | ||||
if (size > 0 && size < sblock.fs_maxsymlinklen && | if (size > 0 && size < sblock.fs_maxsymlinklen && | ||||
DIP(curinode, di_blocks) == 0) | DIP(curinode, di_blocks) == 0) | ||||
continue; | continue; | ||||
else | else | ||||
break; | break; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 349 Lines • ▼ Show 20 Lines | CMDFUNCSTART(chname) | ||||
return 1; | return 1; | ||||
} | } | ||||
} | } | ||||
struct typemap { | struct typemap { | ||||
const char *typename; | const char *typename; | ||||
int typebits; | int typebits; | ||||
} typenamemap[] = { | } typenamemap[] = { | ||||
{"file", IFREG}, | {"file", UFS_IFREG}, | ||||
{"dir", IFDIR}, | {"dir", UFS_IFDIR}, | ||||
{"socket", IFSOCK}, | {"socket", UFS_IFSOCK}, | ||||
{"fifo", IFIFO}, | {"fifo", UFS_IFIFO}, | ||||
}; | }; | ||||
CMDFUNCSTART(newtype) | CMDFUNCSTART(newtype) | ||||
{ | { | ||||
int type; | int type; | ||||
struct typemap *tp; | struct typemap *tp; | ||||
if (!checkactive()) | if (!checkactive()) | ||||
return 1; | return 1; | ||||
type = DIP(curinode, di_mode) & IFMT; | type = DIP(curinode, di_mode) & UFS_IFMT; | ||||
for (tp = typenamemap; | for (tp = typenamemap; | ||||
tp < &typenamemap[nitems(typenamemap)]; | tp < &typenamemap[nitems(typenamemap)]; | ||||
tp++) { | tp++) { | ||||
if (!strcmp(argv[1], tp->typename)) { | if (!strcmp(argv[1], tp->typename)) { | ||||
printf("setting type to %s\n", tp->typename); | printf("setting type to %s\n", tp->typename); | ||||
type = tp->typebits; | type = tp->typebits; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
if (tp == &typenamemap[nitems(typenamemap)]) { | if (tp == &typenamemap[nitems(typenamemap)]) { | ||||
warnx("type `%s' not known", argv[1]); | warnx("type `%s' not known", argv[1]); | ||||
warnx("try one of `file', `dir', `socket', `fifo'"); | warnx("try one of `file', `dir', `socket', `fifo'"); | ||||
return 1; | return 1; | ||||
} | } | ||||
DIP_SET(curinode, di_mode, DIP(curinode, di_mode) & ~IFMT); | DIP_SET(curinode, di_mode, DIP(curinode, di_mode) & ~UFS_IFMT); | ||||
DIP_SET(curinode, di_mode, DIP(curinode, di_mode) | type); | DIP_SET(curinode, di_mode, DIP(curinode, di_mode) | type); | ||||
inodirty(); | inodirty(); | ||||
printactive(0); | printactive(0); | ||||
return 0; | return 0; | ||||
} | } | ||||
CMDFUNCSTART(chlen) | CMDFUNCSTART(chlen) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 288 Lines • Show Last 20 Lines |