@@ -264,9 +264,16 @@ bmap_f(
foff_w = boff_w = aoff_w = MINRANGE_WIDTH;
tot_w = MINTOT_WIDTH;
- if (is_rt)
- sunit = swidth = bbperag = 0;
- else {
+ if (is_rt) {
+ if (fsgeo.rgcount == 0) {
+ bbperag = 0;
+ } else {
+ bbperag = (off64_t)fsgeo.rgblocks *
+ (off64_t)fsgeo.blocksize / BBSIZE;
+ }
+ sunit = 0;
+ swidth = 0;
+ } else {
bbperag = (off64_t)fsgeo.agblocks *
(off64_t)fsgeo.blocksize / BBSIZE;
sunit = (fsgeo.sunit * fsgeo.blocksize) / BBSIZE;
@@ -295,7 +302,7 @@ bmap_f(
(long long)(map[i + 1].bmv_block +
map[i + 1].bmv_length - 1LL));
boff_w = max(boff_w, strlen(bbuf));
- if (!is_rt) {
+ if (bbperag > 0) {
agno = map[i + 1].bmv_block / bbperag;
agoff = map[i + 1].bmv_block -
(agno * bbperag);
@@ -312,13 +319,20 @@ bmap_f(
numlen(map[i+1].bmv_length, 10));
}
}
- agno_w = is_rt ? 0 : max(MINAG_WIDTH, numlen(fsgeo.agcount, 10));
+ if (is_rt) {
+ if (fsgeo.rgcount > 0)
+ agno_w = max(MINAG_WIDTH, numlen(fsgeo.rgcount, 10));
+ else
+ agno_w = 0;
+ } else {
+ agno_w = max(MINAG_WIDTH, numlen(fsgeo.agcount, 10));
+ }
printf("%4s: %-*s %-*s %*s %-*s %*s%s\n",
_("EXT"),
foff_w, _("FILE-OFFSET"),
boff_w, is_rt ? _("RT-BLOCK-RANGE") : _("BLOCK-RANGE"),
- agno_w, is_rt ? "" : _("AG"),
- aoff_w, is_rt ? "" : _("AG-OFFSET"),
+ agno_w, is_rt ? (fsgeo.rgcount ? _("RG") : "") : _("AG"),
+ aoff_w, is_rt ? (fsgeo.rgcount ? _("RG-OFFSET") : "") : _("AG-OFFSET"),
tot_w, _("TOTAL"),
flg ? _(" FLAGS") : "");
for (i = 0; i < egcnt; i++) {
@@ -377,7 +391,7 @@ bmap_f(
map[i + 1].bmv_length - 1LL));
printf("%4d: %-*s %-*s", i, foff_w, rbuf,
boff_w, bbuf);
- if (!is_rt) {
+ if (bbperag > 0) {
agno = map[i + 1].bmv_block / bbperag;
agoff = map[i + 1].bmv_block -
(agno * bbperag);