xfs_io: implement 'utimes' command
PATCH v3 1/1 xfs_io: implement 'utimes' command
Add the utimes command to provide a way to utilize the futimens C library call. This is the interface to the utimensat system call, which updates the mtime and atime of a file.
Signed-off-by Deepa Dinamani <[email protected]>
Reviewed-by Eric Sandeen <[email protected]>
---
Changes since v2:
* fixed file permissions
Changes since v1:
* changed error return values
* removed redundant roff formatting directive
* removed unneeded argument count check
include/input.h | 1 + io/Makefile | 2 +- io/init.c | 1 + io/io.h | 1 + io/utimes.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ libxcmd/input.c | 22 +++++++++++++++ man/man8/xfs_io.8 | 11 ++++++++ 7 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 io/utimes.c
include/input.h +1 -0
@@ -48,6 +48,7 @@ extern uid_t uid_from_string(char *user);extern gid_t gid_from_string (char *group);extern prid_t prid_from_string (char *project);extern bool isdigits_only (const char *str); +extern int timespec_from_string (const char *sec,const char *nsec,struct timespec *ts);#define HAVE_FTW_H 1/* TODO: configure me */
io/Makefile +1 -1
@@ -11,7 +11,7 @@ HFILES = init.h io.h CFILES = init.c \ attr.c bmap.c file.c freeze.c fsync.c getrusage.c imap.c link.c \ mmap.c open.c parent.c pread.c prealloc.c pwrite.c seek.c shutdown.c \ - sync.c truncate.c reflink.c + sync.c truncate.c reflink.c utimes.c LLDLIBS = $(LIBXCMD) $(LIBHANDLE) LTDEPENDENCIES = $(LIBXCMD) $(LIBHANDLE)
io/init.c +1 -0
@@ -85,6 +85,7 @@ init_commands(void)sync_range_init ();truncate_init ();reflink_init (); +utimes_init (); } static int
io/io.h +1 -0
@@ -113,6 +113,7 @@ extern void seek_init(void);extern void shutdown_init (void );extern void sync_init (void );extern void truncate_init (void ); +extern void utimes_init (void );#ifdef HAVE_FADVISE extern void fadvise_init (void );
io/utimes.c new file +81 -0
81 lines not on this page · raw message
libxcmd/input.c +22 -0
@@ -327,6 +327,28 @@ timestr( }/* +* Convert from a pair of arbitrary user strings into a timespec. +*/ + +int +timespec_from_string ( +const char * secs, +const char * nsecs, +struct timespec * ts) +{ +char * p; +if (!secs || !nsecs || !ts) +return 1 ; + ts->tv_sec =strtoull (secs, &p,0 ); +if (*p) +return 1 ; + ts->tv_nsec =strtoull (nsecs, &p,0 ); +if (*p) +return 1 ; +return 0 ; +} + +/* * Convert from arbitrary user strings into a numeric ID. * If it's all numeric, we convert that inplace, else we do * the name lookup, and return the found identifier.
man/man8/xfs_io.8 +11 -0
@@ -589,6 +589,16 @@ Copy data into the open file beginning at Copy up to .I length bytes of data. +.RE +.PD +.TP +.BI utimes " atime_sec atime_nsec mtime_sec mtime_nsec" +The utimes command changes the atime and mtime of the current file. +sec uses UNIX timestamp notation and is the seconds elapsed since +1970-01-01 00:00:00 UTC. +nsec is the nanoseconds since the sec. This value needs to be in +the range 0-999999999 with UTIME_NOW and UTIME_OMIT being exceptions. +Each (sec, nsec) pair constitutes a single timestamp value. .SH MEMORY MAPPED I/O COMMANDS .TP
@@ -875,6 +885,7 @@ verbose output will be printed. .BR fstatfs (2), .BR fsync (2), .BR ftruncate (2), +.BR futimens (3), .BR mmap (2), .BR msync (2), .BR open (2),
Signature · 1 line
2.7.4