From d9cd579a38abb507726ecece8ae4447077709747 Mon Sep 17 00:00:00 2001 From: "Kaleb S. KEITHLEY" Date: Thu, 14 Sep 2017 14:31:26 -0400 Subject: xlator/bitrot: flood of -Wformat-truncation warnings with gcc-7.1 Starting in Fedora 26 which has gcc-7.1.x, -Wformat-trunction is enabled with -Wformat, resulting in a flood of new warnings. This many warnings is a concern because it makes it hard(er) to see other warnings that should be addressed. An example is at https://kojipkgs.fedoraproject.org//packages/glusterfs/3.12.0/1.fc28/data/logs/x86_64/build.log For more info see https://review.gluster.org/#/c/18267/ Change-Id: I7792d94da1e8109f3aaa857a94be40f2d2402684 BUG: 1492851 Signed-off-by: Kaleb S. KEITHLEY --- .../bit-rot/src/stub/bit-rot-stub-helpers.c | 87 +++++----------------- xlators/features/bit-rot/src/stub/bit-rot-stub.c | 4 +- xlators/features/bit-rot/src/stub/bit-rot-stub.h | 5 +- 3 files changed, 26 insertions(+), 70 deletions(-) (limited to 'xlators/features/bit-rot/src/stub') diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c b/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c index 47715b85106..8a88617a487 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c @@ -96,57 +96,6 @@ out: return ret; } - -/** - * prints the path to the bad object's entry into the buffer provided. - * @priv: xlator private - * @filename: gfid of the bad object. - * @file_path: buffer provided into which path of the bad object is printed - * using above 2 arguments. - */ -static void -br_stub_link_path (br_stub_private_t *priv, const char *filename, - char *file_path, size_t len) -{ - snprintf (file_path, len, "%s/%s", priv->stub_basepath, filename); -} - -/** - * Prints the path of the object which acts as a container for all the bad - * objects. Each new entry corresponding to a bad object is a hard link to - * the object with name "stub-0000000000000008". - * @priv: xlator's private - * @stub_gfid_path: buffer into which the path to the container of bad objects - * is printed. - */ -static void -br_stub_container_entry (br_stub_private_t *priv, char *stub_gfid_path, - size_t len) -{ - - snprintf (stub_gfid_path, len, "%s/stub-%s", priv->stub_basepath, - uuid_utoa (priv->bad_object_dir_gfid)); -} - -/** - * Prints the path to the bad object's entry into the buffer provided. - * @priv: xlator private - * @gfid: gfid of the bad object. - * @gfid_path: buffer provided into which path of the bad object is printed - * using above 2 arguments. - * This function is same as br_stub_link_path. But in this function the - * gfid of the bad object is obtained as an argument (i.e. uuid_t gfid), - * where as in br_stub_link_path, the gfid is received as filename - * (i.e. char *filename) - */ -static void -br_stub_linked_entry (br_stub_private_t *priv, char *gfid_path, uuid_t gfid, - size_t len) -{ - snprintf (gfid_path, len, "%s/%s", priv->stub_basepath, - uuid_utoa (gfid)); -} - /** * Adds an entry to the bad objects directory. * @gfid: gfid of the bad object being added to the bad objects directory @@ -154,8 +103,8 @@ br_stub_linked_entry (br_stub_private_t *priv, char *gfid_path, uuid_t gfid, int br_stub_add (xlator_t *this, uuid_t gfid) { - char gfid_path[PATH_MAX] = {0}; - char bad_gfid_path[PATH_MAX] = {0}; + char gfid_path[BR_PATH_MAX_PLUS] = {0}; + char bad_gfid_path[BR_PATH_MAX_PLUS] = {0}; int ret = 0; br_stub_private_t *priv = NULL; struct stat st = {0}; @@ -164,12 +113,14 @@ br_stub_add (xlator_t *this, uuid_t gfid) GF_ASSERT_AND_GOTO_WITH_ERROR (this->name, !gf_uuid_is_null (gfid), out, errno, EINVAL); - br_stub_linked_entry (priv, gfid_path, gfid, sizeof (gfid_path)); + snprintf (gfid_path, sizeof (gfid_path), "%s/%s", + priv->stub_basepath, uuid_utoa (gfid)); ret = sys_stat (gfid_path, &st); if (!ret) goto out; - br_stub_container_entry (priv, bad_gfid_path, sizeof (bad_gfid_path)); + snprintf (bad_gfid_path, sizeof (bad_gfid_path), "%s/stub-%s", + priv->stub_basepath, uuid_utoa (priv->bad_object_dir_gfid)); ret = sys_link (bad_gfid_path, gfid_path); if (ret) { @@ -198,13 +149,13 @@ br_stub_del (xlator_t *this, uuid_t gfid) int32_t op_errno __attribute__((unused)) = 0; br_stub_private_t *priv = NULL; int ret = 0; - char gfid_path[PATH_MAX] = {0}; + char gfid_path[BR_PATH_MAX_PLUS] = {0}; priv = this->private; GF_ASSERT_AND_GOTO_WITH_ERROR (this->name, !gf_uuid_is_null (gfid), out, op_errno, EINVAL); - br_stub_linked_entry (priv, gfid_path, gfid, - sizeof (gfid_path)); + snprintf (gfid_path, sizeof (gfid_path), "%s/%s", + priv->stub_basepath, uuid_utoa (gfid)); ret = sys_unlink (gfid_path); if (ret && (errno != ENOENT)) { gf_msg (this->name, GF_LOG_ERROR, errno, @@ -226,13 +177,13 @@ br_stub_check_stub_directory (xlator_t *this, char *fullpath) { int ret = 0; struct stat st = {0,}; - char oldpath[PATH_MAX] = {0}; + char oldpath[BR_PATH_MAX_PLUS] = {0}; br_stub_private_t *priv = NULL; priv = this->private; - (void) snprintf (oldpath, PATH_MAX, - "%s/%s", priv->export, OLD_BR_STUB_QUARANTINE_DIR); + snprintf (oldpath, sizeof (oldpath), "%s/%s", + priv->export, OLD_BR_STUB_QUARANTINE_DIR); ret = sys_stat (fullpath, &st); if (!ret && !S_ISDIR (st.st_mode)) @@ -301,14 +252,15 @@ int br_stub_dir_create (xlator_t *this, br_stub_private_t *priv) { int ret = -1; - char fullpath[PATH_MAX] = {0}; - char stub_gfid_path[PATH_MAX] = {0, }; + char fullpath[BR_PATH_MAX_PLUS] = {0,}; + char stub_gfid_path[BR_PATH_MAX_PLUS] = {0,}; gf_uuid_copy (priv->bad_object_dir_gfid, BR_BAD_OBJ_CONTAINER); - snprintf (fullpath, sizeof (fullpath), "%s", priv->stub_basepath); + strncpy (fullpath, priv->stub_basepath, sizeof (fullpath)); - br_stub_container_entry (priv, stub_gfid_path, sizeof (stub_gfid_path)); + snprintf (stub_gfid_path, sizeof (stub_gfid_path), "%s/stub-%s", + priv->stub_basepath, uuid_utoa (priv->bad_object_dir_gfid)); ret = br_stub_check_stub_directory (this, fullpath); if (ret) @@ -455,7 +407,7 @@ check_delete_stale_bad_file (xlator_t *this, char *filename) { int ret = 0; struct stat st = {0}; - char filepath[PATH_MAX] = {0}; + char filepath[BR_PATH_MAX_PLUS] = {0}; br_stub_private_t *priv = NULL; priv = this->private; @@ -463,7 +415,8 @@ check_delete_stale_bad_file (xlator_t *this, char *filename) if (is_bad_gfid_file_current (filename, priv->bad_object_dir_gfid)) return; - br_stub_link_path (priv, filename, filepath, sizeof (filepath)); + snprintf (filepath, sizeof (filepath), "%s/%s", + priv->stub_basepath, filename); ret = sys_stat (filepath, &st); if (!ret && st.st_nlink == 1) diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c index fb187a3a93a..10a1d81a6fa 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c @@ -139,9 +139,9 @@ init (xlator_t *this) GF_OPTION_INIT ("bitrot", priv->do_versioning, bool, free_mempool); GF_OPTION_INIT ("export", tmp, str, free_mempool); - memcpy (priv->export, tmp, strlen (tmp) + 1); + strncpy (priv->export, tmp, sizeof (priv->export)); - (void) snprintf (priv->stub_basepath, PATH_MAX, + (void) snprintf (priv->stub_basepath, sizeof (priv->stub_basepath), "%s/%s", priv->export, BR_STUB_QUARANTINE_DIR); (void) gettimeofday (&tv, NULL); diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.h b/xlators/features/bit-rot/src/stub/bit-rot-stub.h index 433fa68538a..d8c8b6beb9e 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.h +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.h @@ -25,6 +25,9 @@ #define BAD_OBJECT_THREAD_STACK_SIZE ((size_t)(1024*1024)) +#define BR_PATH_MAX_EXTRA (PATH_MAX+1024) +#define BR_PATH_MAX_PLUS (PATH_MAX+2048) + /* * Oops. Spelling mistake. Correcting it */ @@ -122,7 +125,7 @@ typedef struct br_stub_private { } container; struct mem_pool *local_pool; - char stub_basepath[PATH_MAX]; + char stub_basepath[BR_PATH_MAX_EXTRA]; uuid_t bad_object_dir_gfid; } br_stub_private_t; -- cgit