[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Fri Jan 27 08:31:02 UTC 2023


The branch, master has been updated
       via  7e0eb0f31a2 s3:lib: Change file_modtime() to return an error code and a struct timespec.
      from  96154a26fee spelling fixes for 4.18 (errror implemenation proces Controler)

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7e0eb0f31a24ef6d1742363d70090875d1037dc2
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Jan 26 09:39:10 2023 -0800

    s3:lib: Change file_modtime() to return an error code and a struct timespec.
    
    Removes need for external stat() code when checking for timechange.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Fri Jan 27 08:30:35 UTC 2023 on atb-devel-224

-----------------------------------------------------------------------

Summary of changes:
 lib/param/loadparm.c      | 10 ++--------
 lib/smbconf/smbconf_txt.c | 18 ++++++++++++++++--
 lib/util/samba_util.h     | 12 +++++++++---
 lib/util/util.c           | 25 ++++++++++++++++---------
 4 files changed, 43 insertions(+), 22 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index c1d1f5393d1..6ab7fa89db7 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1009,8 +1009,6 @@ void add_to_file_list(TALLOC_CTX *mem_ctx, struct file_lists **list,
 			     const char *fname, const char *subfname)
 {
 	struct file_lists *f = *list;
-	struct stat sb = {0};
-	int rc;
 
 	while (f) {
 		if (f->name && !strcmp(f->name, fname))
@@ -1036,12 +1034,8 @@ void add_to_file_list(TALLOC_CTX *mem_ctx, struct file_lists **list,
 		*list = f;
 	}
 
-	rc = stat(subfname, &sb);
-	if (rc != 0) {
-		return;
-	}
-	f->modtime = get_mtimespec(&sb);
-
+	/* If file_modtime() fails it leaves f->modtime as zero. */
+	(void)file_modtime(subfname, &f->modtime);
 	return;
 
 fail:
diff --git a/lib/smbconf/smbconf_txt.c b/lib/smbconf/smbconf_txt.c
index 5c4bd27b9df..70a35ec4304 100644
--- a/lib/smbconf/smbconf_txt.c
+++ b/lib/smbconf/smbconf_txt.c
@@ -184,12 +184,23 @@ static sbcErr smbconf_txt_load_file(struct smbconf_ctx *ctx)
 {
 	sbcErr err;
 	uint64_t new_csn;
+	int rc;
+	struct timespec mt = {0};
 
 	if (!file_exist(ctx->path)) {
 		return SBC_ERR_BADFILE;
 	}
 
-	new_csn = (uint64_t)file_modtime(ctx->path);
+	rc = file_modtime(ctx->path, &mt);
+	if (rc != 0) {
+		/*
+		 * Not worth mapping errno returned
+		 * in rc to SBC_ERR_XXX. Just assume
+		 * access denied.
+		 */
+		return SBC_ERR_ACCESS_DENIED;
+	}
+	new_csn = (uint64_t)mt.tv_sec;
 	if (new_csn == pd(ctx)->csn) {
 		return SBC_ERR_OK;
 	}
@@ -275,11 +286,14 @@ static void smbconf_txt_get_csn(struct smbconf_ctx *ctx,
 				struct smbconf_csn *csn,
 				const char *service, const char *param)
 {
+	struct timespec mt = {0};
+
 	if (csn == NULL) {
 		return;
 	}
 
-	csn->csn = (uint64_t)file_modtime(ctx->path);
+	(void)file_modtime(ctx->path, &mt);
+	csn->csn = (uint64_t)mt.tv_sec;
 }
 
 /**
diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h
index 4eecfb8a583..f7e13bc8884 100644
--- a/lib/util/samba_util.h
+++ b/lib/util/samba_util.h
@@ -441,9 +441,15 @@ _PUBLIC_ int create_unlink_tmp(const char *dir);
 _PUBLIC_ bool file_exist(const char *fname);
 
 /**
- Check a files mod time.
-**/
-_PUBLIC_ time_t file_modtime(const char *fname);
+ * @brief Return a files modification time.
+ *
+ * @param fname  The name of the file.
+ *
+ * @param mt     A pointer to store the modification time.
+ *
+ * @return 0 on success, errno otherwise.
+ */
+_PUBLIC_ int file_modtime(const char *fname, struct timespec *mt);
 
 /**
  Check if a directory exists.
diff --git a/lib/util/util.c b/lib/util/util.c
index 02d1cbfda17..ecb32a9acaf 100644
--- a/lib/util/util.c
+++ b/lib/util/util.c
@@ -116,17 +116,24 @@ _PUBLIC_ bool file_exist(const char *fname)
 }
 
 /**
- Check a files mod time.
-**/
-
-_PUBLIC_ time_t file_modtime(const char *fname)
+ * @brief Return a files modification time.
+ *
+ * @param fname  The name of the file.
+ *
+ * @param mt     A pointer to store the modification time.
+ *
+ * @return 0 on success, errno otherwise.
+ */
+_PUBLIC_ int file_modtime(const char *fname, struct timespec *mt)
 {
-	struct stat st;
-  
-	if (stat(fname,&st) != 0) 
-		return(0);
+	struct stat st = {0};
+
+	if (stat(fname, &st) != 0) {
+		return errno;
+	}
 
-	return(st.st_mtime);
+	*mt = get_mtimespec(&st);
+	return 0;
 }
 
 /**


-- 
Samba Shared Repository



More information about the samba-cvs mailing list