From 595fd57a4fd3c11b68699ba62130775934da325a Mon Sep 17 00:00:00 2001 From: Jaegeuk Kim Date: Tue, 1 May 2018 13:54:25 -0700 Subject: [PATCH] f2fs-tools: get kernel version via uname(2) This patch introduces uname(2) to get kernel version. Reviewed-by: Chao Yu Signed-off-by: Jaegeuk Kim --- configure.ac | 1 + fsck/mount.c | 2 +- include/android_config.h | 2 ++ include/f2fs_fs.h | 1 + lib/libf2fs.c | 20 ++++++++++++++++++++ mkfs/f2fs_format.c | 2 +- 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 64c156e..a3ff12b 100644 --- a/configure.ac +++ b/configure.ac @@ -102,6 +102,7 @@ AC_CHECK_HEADERS(m4_flatten([ sys/syscall.h sys/mount.h sys/sysmacros.h + sys/utsname.h sys/xattr.h unistd.h ])) diff --git a/fsck/mount.c b/fsck/mount.c index e4ca0b8..61ea0ea 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -625,7 +625,7 @@ int validate_super_block(struct f2fs_sb_info *sbi, int block) dev_read_version(c.version, 0, VERSION_LEN); get_kernel_version(c.version); } else { - memset(c.version, 0, VERSION_LEN); + get_kernel_uname_version(c.version); } /* build sb version */ diff --git a/include/android_config.h b/include/android_config.h index 6f49f90..4582887 100644 --- a/include/android_config.h +++ b/include/android_config.h @@ -13,6 +13,7 @@ #define HAVE_SYS_IOCTL_H 1 #define HAVE_SYS_SYSCALL_H 1 #define HAVE_SYS_MOUNT_H 1 +#define HAVE_SYS_UTSNAME_H 1 #define HAVE_SYS_SYSMACROS_H 1 #define HAVE_SYS_XATTR_H 1 #define HAVE_UNISTD_H 1 @@ -43,6 +44,7 @@ #define HAVE_SYS_IOCTL_H 1 #define HAVE_SYS_SYSCALL_H 1 #define HAVE_SYS_MOUNT_H 1 +#define HAVE_SYS_UTSNAME_H 1 #define HAVE_SYS_XATTR_H 1 #define HAVE_UNISTD_H 1 diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 8ed9db1..e800004 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -1118,6 +1118,7 @@ extern int dev_reada_block(__u64); extern int dev_read_version(void *, __u64, size_t); extern void get_kernel_version(__u8 *); +extern void get_kernel_uname_version(__u8 *); f2fs_hash_t f2fs_dentry_hash(const unsigned char *, int); static inline bool f2fs_has_extra_isize(struct f2fs_inode *inode) diff --git a/lib/libf2fs.c b/lib/libf2fs.c index 19491b6..5ef0214 100644 --- a/lib/libf2fs.c +++ b/lib/libf2fs.c @@ -27,6 +27,9 @@ #ifdef HAVE_SYS_SYSMACROS_H #include #endif +#ifdef HAVE_SYS_UTSNAME_H +#include +#endif #ifndef WITH_ANDROID #ifdef HAVE_SCSI_SG_H #include @@ -740,6 +743,21 @@ void get_kernel_version(__u8 *version) memset(version + i, 0, VERSION_LEN + 1 - i); } +void get_kernel_uname_version(__u8 *version) +{ +#ifdef HAVE_SYS_UTSNAME_H + struct utsname buf; + + memset(version, 0, VERSION_LEN); + if (uname(&buf)) + return; + + snprintf((char *)version, + VERSION_LEN, "%s %s", buf.release, buf.version); +#else + memset(version, 0, VERSION_LEN); +#endif +} #if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE) #define BLKGETSIZE _IO(0x12,96) @@ -796,7 +814,9 @@ int get_device_info(int i) } if (c.kd == -1) { +#if !defined(WITH_ANDROID) && defined(__linux__) c.kd = open("/proc/version", O_RDONLY); +#endif if (c.kd < 0) { MSG(0, "\tInfo: No support kernel version!\n"); c.kd = -2; diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c index 0fc8b30..09886b4 100644 --- a/mkfs/f2fs_format.c +++ b/mkfs/f2fs_format.c @@ -442,7 +442,7 @@ static int f2fs_prepare_super_block(void) get_kernel_version(c.version); MSG(0, "Info: format version with\n \"%s\"\n", c.version); } else { - memset(c.version, 0, VERSION_LEN); + get_kernel_uname_version(c.version); } memcpy(sb->version, c.version, VERSION_LEN); -- 2.7.4