From: Andreas Schneider Date: Mon, 25 Nov 2019 10:10:49 +0000 (+0100) Subject: s3:libsmb: Add a setup_stat_from_stat_ex() function X-Git-Tag: samba-4.10.13~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ae62c26ef9e358ed117893f4e0ce719049bb745;p=thirdparty%2Fsamba.git s3:libsmb: Add a setup_stat_from_stat_ex() function BUG: https://bugzilla.samba.org/show_bug.cgi?id=14101 Signed-off-by: Andreas Schneider Reviewed-by: Jeremy Allison (cherry picked from commit b3e3cb3bbd86a53b48ee009adf811d48dd50dc8b) --- diff --git a/source3/include/libsmb_internal.h b/source3/include/libsmb_internal.h index 2c139404c37..af56df58792 100644 --- a/source3/include/libsmb_internal.h +++ b/source3/include/libsmb_internal.h @@ -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, diff --git a/source3/libsmb/libsmb_stat.c b/source3/libsmb/libsmb_stat.c index c2e646e317d..5560535f952 100644 --- a/source3/libsmb/libsmb_stat.c +++ b/source3/libsmb/libsmb_stat.c @@ -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 */