]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: refactor timestamp printing
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 20 Nov 2020 22:03:27 +0000 (17:03 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Fri, 20 Nov 2020 22:03:27 +0000 (17:03 -0500)
Introduce type-specific printing functions to xfs_db to print an
xfs_timestamp instead of open-coding the timestamp decoding.  This is
needed to stay ahead of changes that we're going to make to
xfs_timestamp_t in the following patches.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
db/field.c
db/fprint.c
db/fprint.h
db/inode.c
libxfs/libxfs_api_defs.h

index 7ccfbfb1370bc8750afe7648697e916fc28e381a..f0316aeb4a866cf691e1771d9ffcf0cbdc799869 100644 (file)
@@ -334,8 +334,8 @@ const ftattr_t      ftattrtab[] = {
          FTARG_SIGNED, NULL, NULL },
        { FLDT_INT8D, "int8d", fp_num, "%d", SI(bitsz(int8_t)), FTARG_SIGNED,
          NULL, NULL },
-       { FLDT_NSEC, "nsec", fp_num, "%09d", SI(bitsz(int32_t)), FTARG_SIGNED,
-         NULL, NULL },
+       { FLDT_NSEC, "nsec", fp_nsec, NULL, SI(bitsz(xfs_timestamp_t)),
+         FTARG_SIGNED, NULL, NULL },
        { FLDT_QCNT, "qcnt", fp_num, "%llu", SI(bitsz(xfs_qcnt_t)), 0, NULL,
          NULL },
        { FLDT_QWARNCNT, "qwarncnt", fp_num, "%u", SI(bitsz(xfs_qwarncnt_t)), 0,
@@ -347,10 +347,10 @@ const ftattr_t    ftattrtab[] = {
        { FLDT_SYMLINK_CRC, "symlink", NULL, (char *)symlink_crc_flds,
          symlink_size, FTARG_SIZE, NULL, symlink_crc_flds },
 
-       { FLDT_TIME, "time", fp_time, NULL, SI(bitsz(int32_t)), FTARG_SIGNED,
-         NULL, NULL },
+       { FLDT_TIME, "time", fp_time, NULL, SI(bitsz(xfs_timestamp_t)),
+         FTARG_SIGNED, NULL, NULL },
        { FLDT_TIMESTAMP, "timestamp", NULL, (char *)timestamp_flds,
-         SI(bitsz(struct xfs_legacy_timestamp)), 0, NULL, timestamp_flds },
+         SI(bitsz(xfs_timestamp_t)), 0, NULL, timestamp_flds },
        { FLDT_UINT1, "uint1", fp_num, "%u", SI(1), 0, NULL, NULL },
        { FLDT_UINT16D, "uint16d", fp_num, "%u", SI(bitsz(uint16_t)), 0, NULL,
          NULL },
index c9d07e1bca7e0ec1e14da708efd08c1c5e89f5d8..6e72bf076df203d69589d510ffea489593329e6d 100644 (file)
@@ -112,22 +112,21 @@ fp_sarray(
        return 1;
 }
 
-/*ARGSUSED*/
 int
 fp_time(
-       void    *obj,
-       int     bit,
-       int     count,
-       char    *fmtstr,
-       int     size,
-       int     arg,
-       int     base,
-       int     array)
+       void                    *obj,
+       int                     bit,
+       int                     count,
+       char                    *fmtstr,
+       int                     size,
+       int                     arg,
+       int                     base,
+       int                     array)
 {
-       int     bitpos;
-       char    *c;
-       int     i;
-       time_t  t;
+       struct timespec64       tv;
+       xfs_timestamp_t         *ts;
+       int                     bitpos;
+       int                     i;
 
        ASSERT(bitoffs(bit) == 0);
        for (i = 0, bitpos = bit;
@@ -135,10 +134,46 @@ fp_time(
             i++, bitpos += size) {
                if (array)
                        dbprintf("%d:", i + base);
-               t = (time_t)getbitval((char *)obj + byteize(bitpos), 0,
-                               sizeof(int32_t) * 8, BVSIGNED);
-               c = ctime(&t);
-               dbprintf("%24.24s", c);
+
+               ts = obj + byteize(bitpos);
+               tv = libxfs_inode_from_disk_ts(obj, *ts);
+
+               dbprintf("%24.24s", tv.tv_sec);
+
+               if (i < count - 1)
+                       dbprintf(" ");
+       }
+       return 1;
+}
+
+int
+fp_nsec(
+       void                    *obj,
+       int                     bit,
+       int                     count,
+       char                    *fmtstr,
+       int                     size,
+       int                     arg,
+       int                     base,
+       int                     array)
+{
+       struct timespec64       tv;
+       xfs_timestamp_t         *ts;
+       int                     bitpos;
+       int                     i;
+
+       ASSERT(bitoffs(bit) == 0);
+       for (i = 0, bitpos = bit;
+            i < count && !seenint();
+            i++, bitpos += size) {
+               if (array)
+                       dbprintf("%d:", i + base);
+
+               ts = obj + byteize(bitpos);
+               tv = libxfs_inode_from_disk_ts(obj, *ts);
+
+               dbprintf("%u", tv.tv_nsec);
+
                if (i < count - 1)
                        dbprintf(" ");
        }
index c958dca0ed92b752039461e071e371a7bbec6e2e..bfeed15ca7c46e59a1eba3d796d84d34c1e29dcf 100644 (file)
@@ -15,6 +15,8 @@ extern int    fp_sarray(void *obj, int bit, int count, char *fmtstr, int size,
                          int arg, int base, int array);
 extern int     fp_time(void *obj, int bit, int count, char *fmtstr, int size,
                        int arg, int base, int array);
+extern int     fp_nsec(void *obj, int bit, int count, char *fmtstr, int size,
+                       int arg, int base, int array);
 extern int     fp_uuid(void *obj, int bit, int count, char *fmtstr, int size,
                        int arg, int base, int array);
 extern int     fp_crc(void *obj, int bit, int count, char *fmtstr, int size,
index 06fa078268ef43ad547872b7ae137e1c7942a33c..a75667d66f13c0e4ab18738d606cf0b3567cc9b1 100644 (file)
@@ -179,10 +179,9 @@ const field_t      inode_v3_flds[] = {
 };
 
 
-#define        TOFF(f) bitize(offsetof(struct xfs_legacy_timestamp, t_ ## f))
 const field_t  timestamp_flds[] = {
-       { "sec", FLDT_TIME, OI(TOFF(sec)), C1, 0, TYP_NONE },
-       { "nsec", FLDT_NSEC, OI(TOFF(nsec)), C1, 0, TYP_NONE },
+       { "sec", FLDT_TIME, OI(0), C1, 0, TYP_NONE },
+       { "nsec", FLDT_NSEC, OI(0), C1, 0, TYP_NONE },
        { NULL }
 };
 
index 8a93e2cc5ee68b75da53adaa4f34501e3f56ae02..01d047702e6499d780ae9d7f0f4a546f4a764be0 100644 (file)
 #define xfs_inobt_maxrecs              libxfs_inobt_maxrecs
 #define xfs_inobt_stage_cursor         libxfs_inobt_stage_cursor
 #define xfs_inode_from_disk            libxfs_inode_from_disk
+#define xfs_inode_from_disk_ts         libxfs_inode_from_disk_ts
 #define xfs_inode_to_disk              libxfs_inode_to_disk
 #define xfs_inode_validate_cowextsize  libxfs_inode_validate_cowextsize
 #define xfs_inode_validate_extsize     libxfs_inode_validate_extsize