diff options
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/common-utils.c | 43 | ||||
| -rw-r--r-- | libglusterfs/src/common-utils.h | 1 | 
2 files changed, 44 insertions, 0 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 54ee3e53818..be8bd6298ac 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -3232,3 +3232,46 @@ gf_compare_sockaddr (const struct sockaddr *addr1,          }          return _gf_false;  } + +/* + * gf_set_timestamp: + *      It sets the mtime and atime of 'dest' file as of 'src'. + */ + +int +gf_set_timestamp  (const char *src, const char* dest) +{ +        struct stat    sb             = {0, }; +        struct timeval new_time[2]    = {{0, },{0,}}; +        int            ret            = 0; +        xlator_t       *this          = NULL; + +        this = THIS; +        GF_ASSERT (this); +        GF_ASSERT (src); +        GF_ASSERT (dest); + +        ret = stat (src, &sb); +        if (ret) { +                gf_log (this->name, GF_LOG_ERROR, "stat on %s failed: %s", +                        src, strerror(errno)); +                goto out; +        } +        new_time[0].tv_sec = sb.st_atime; +        new_time[0].tv_usec = ST_ATIM_NSEC (&sb)/1000; + +        new_time[1].tv_sec = sb.st_mtime; +        new_time[1].tv_usec = ST_MTIM_NSEC (&sb)/1000; + +        /* The granularity is micro seconds as per the current +         * requiremnt. Hence using 'utimes'. This can be updated +         * to 'utimensat' if we need timestamp in nanoseconds. +         */ +        ret = utimes (dest, new_time); +        if (ret) { +                gf_log (this->name, GF_LOG_ERROR, "utimes on %s failed: %s", +                        dest, strerror(errno)); +        } +out: +        return ret; +} diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 98f30fc47b0..4eec5170c60 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -620,6 +620,7 @@ int gf_get_hostname_from_ip (char *client_ip, char **hostname);  gf_boolean_t gf_is_local_addr (char *hostname);  gf_boolean_t gf_is_same_address (char *host1, char *host2);  void md5_wrapper(const unsigned char *data, size_t len, char *md5); +int gf_set_timestamp  (const char *src, const char* dest);  int gf_thread_create (pthread_t *thread, const pthread_attr_t *attr,                        void *(*start_routine)(void *), void *arg);  | 
