]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:libsmb: Add a setup_stat_from_stat_ex() function
authorAndreas Schneider <asn@samba.org>
Mon, 25 Nov 2019 10:10:49 +0000 (11:10 +0100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 14 Jan 2020 08:30:24 +0000 (08:30 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14101

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit b3e3cb3bbd86a53b48ee009adf811d48dd50dc8b)

source3/include/libsmb_internal.h
source3/libsmb/libsmb_stat.c

index 2c139404c37167516214e89e4a617e17b25c9f76..af56df58792221cd74e4361de0899758976d77f0 100644 (file)
@@ -526,6 +526,9 @@ void setup_stat(struct stat *st,
                struct timespec access_time_ts,
                struct timespec change_time_ts,
                struct timespec write_time_ts);
+void setup_stat_from_stat_ex(const struct stat_ex *stex,
+                            const char *fname,
+                            struct stat *st);
 
 int
 SMBC_stat_ctx(SMBCCTX *context,
index c2e646e317d65f4fde4347d980b296c044859d21..5560535f952918cde67dc4079f905db89d4f9ee0 100644 (file)
@@ -107,6 +107,43 @@ void setup_stat(struct stat *st,
        st->st_mtime = convert_timespec_to_time_t(write_time_ts);
 }
 
+void setup_stat_from_stat_ex(const struct stat_ex *stex,
+                            const char *fname,
+                            struct stat *st)
+{
+       st->st_atime = convert_timespec_to_time_t(stex->st_ex_atime);
+       st->st_ctime = convert_timespec_to_time_t(stex->st_ex_ctime);
+       st->st_mtime = convert_timespec_to_time_t(stex->st_ex_mtime);
+
+       st->st_mode = stex->st_ex_mode;
+       st->st_size = stex->st_ex_size;
+#ifdef HAVE_STAT_ST_BLKSIZE
+       st->st_blksize = 512;
+#endif
+#ifdef HAVE_STAT_ST_BLOCKS
+       st->st_blocks = (st->st_size + 511) / 512;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+       st->st_rdev = 0;
+#endif
+       st->st_uid = stex->st_ex_uid;
+       st->st_gid = stex->st_ex_gid;
+
+       st->st_nlink = stex->st_ex_nlink;
+
+       if (stex->st_ex_ino == 0) {
+               st->st_ino = 0;
+               if (fname != NULL) {
+                       st->st_ino = generate_inode(fname);
+               }
+       } else {
+               st->st_ino = stex->st_ex_ino;
+       }
+
+       st->st_dev = stex->st_ex_dev;
+
+}
+
 /*
  * Routine to stat a file given a name
  */