diff --git a/check.c b/check.c index c7e841a8..a13280db 100644 --- a/check.c +++ b/check.c @@ -1185,7 +1185,7 @@ close_and_continue: char path[PATH_MAX]; struct stat st; struct snapraid_file* file; - int failed = 0; + int unsuccesful = 0; file = node->data; node = node->next; /* next node */ @@ -1204,24 +1204,24 @@ close_and_continue: pathprint(path, sizeof(path), "%s%s", disk->dir, file->sub); ret = stat(path, &st); if (ret == -1) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "Error stating empty file '%s'. %s.\n", path, strerror(errno)); fprintf(stdlog, "error:%s:%s: Empty file stat error\n", disk->name, file->sub); ++error; } else if (!S_ISREG(st.st_mode)) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "error:%s:%s: Empty file error for not regular file\n", disk->name, file->sub); ++error; } else if (st.st_size != 0) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "error:%s:%s: Empty file error for size '%"PRIu64"'\n", disk->name, file->sub, st.st_size); ++error; } - if (fix && failed) { + if (fix && unsuccesful) { int f; /* create the ancestor directories */ @@ -1297,7 +1297,7 @@ close_and_continue: struct stat st; struct stat stto; struct snapraid_link* link; - int failed = 0; + int unsuccesful = 0; int unrecoverable = 0; link = node->data; @@ -1313,13 +1313,13 @@ close_and_continue: pathprint(path, sizeof(path), "%s%s", disk->dir, link->sub); ret = stat(path, &st); if (ret == -1) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "Error stating hardlink '%s'. %s.\n", path, strerror(errno)); fprintf(stdlog, "hardlinkerror:%s:%s:%s: Hardlink stat error\n", disk->name, link->sub, link->linkto); ++error; } else if (!S_ISREG(st.st_mode)) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "hardlinkerror:%s:%s:%s: Hardlink error for not regular file\n", disk->name, link->sub, link->linkto); ++error; @@ -1329,7 +1329,7 @@ close_and_continue: pathprint(pathto, sizeof(pathto), "%s%s", disk->dir, link->linkto); ret = stat(pathto, &stto); if (ret == -1) { - failed = 1; + unsuccesful = 1; if (errno == ENOENT) { unrecoverable = 1; @@ -1349,12 +1349,12 @@ close_and_continue: fprintf(stdlog, "hardlinkerror:%s:%s:%s: Hardlink to stat error\n", disk->name, link->sub, link->linkto); ++error; } else if (!S_ISREG(stto.st_mode)) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "hardlinkerror:%s:%s:%s: Hardlink-to error for not regular file\n", disk->name, link->sub, link->linkto); ++error; - } else if (!failed && st.st_ino != stto.st_ino) { - failed = 1; + } else if (!unsuccesful && st.st_ino != stto.st_ino) { + unsuccesful = 1; fprintf(stdlog, "Mismatch hardlink '%s' and '%s'. Different inode.\n", path, pathto); fprintf(stdlog, "hardlinkerror:%s:%s:%s: Hardlink mismatch for different inode\n", disk->name, link->sub, link->linkto); @@ -1365,13 +1365,13 @@ close_and_continue: pathprint(path, sizeof(path), "%s%s", disk->dir, link->sub); ret = readlink(path, linkto, sizeof(linkto)); if (ret < 0) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "Error reading symlink '%s'. %s.\n", path, strerror(errno)); fprintf(stdlog, "symlinkerror:%s:%s: Symlink read error\n", disk->name, link->sub); ++error; } else if (ret >= PATH_MAX) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "Error reading symlink '%s'. Symlink too long.\n", path); fprintf(stdlog, "symlinkerror:%s:%s: Symlink read error\n", disk->name, link->sub); @@ -1380,7 +1380,7 @@ close_and_continue: linkto[ret] = 0; if (strcmp(linkto, link->linkto) != 0) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "symlinkerror:%s:%s: Symlink data error '%s' instead of '%s'\n", disk->name, link->sub, linkto, link->linkto); ++error; @@ -1388,7 +1388,7 @@ close_and_continue: } } - if (fix && failed && !unrecoverable) { + if (fix && unsuccesful && !unrecoverable) { /* create the ancestor directories */ ret = mkancestor(path); if (ret != 0) { @@ -1467,7 +1467,7 @@ close_and_continue: char path[PATH_MAX]; struct stat st; struct snapraid_dir* dir; - int failed = 0; + int unsuccesful = 0; dir = node->data; node = node->next; /* next node */ @@ -1481,19 +1481,19 @@ close_and_continue: pathprint(path, sizeof(path), "%s%s", disk->dir, dir->sub); ret = stat(path, &st); if (ret == -1) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "Error stating dir '%s'. %s.\n", path, strerror(errno)); fprintf(stdlog, "dir_error:%s:%s: Dir stat error\n", disk->name, dir->sub); ++error; } else if (!S_ISDIR(st.st_mode)) { - failed = 1; + unsuccesful = 1; fprintf(stdlog, "dir_error:%s:%s: Dir error for not directory\n", disk->name, dir->sub); ++error; } - if (fix && failed) { + if (fix && unsuccesful) { /* create the ancestor directories */ ret = mkancestor(path); if (ret != 0) { diff --git a/configure.ac b/configure.ac index 5a54b7a7..254aa023 100644 --- a/configure.ac +++ b/configure.ac @@ -148,6 +148,19 @@ AC_ARG_ENABLE([debug], ], []) +AC_ARG_ENABLE([warning], + [AS_HELP_STRING([--enable-warning],[enable extra warning])], + [ + AC_CHECK_CC_OPT([-Wpointer-arith], CFLAGS="$CFLAGS -Wpointer-arith", []) + AC_CHECK_CC_OPT([-Wcast-qual], CFLAGS="$CFLAGS -Wcast-qual", []) + AC_CHECK_CC_OPT([-Wunused], CFLAGS="$CFLAGS -Wunused", []) + AC_CHECK_CC_OPT([-Wunreachable-code], CFLAGS="$CFLAGS -Wunreachable-code", []) + AC_CHECK_CC_OPT([-Wpadded], CFLAGS="$CFLAGS -Wpadded", []) + AC_CHECK_CC_OPT([-Wshadow], CFLAGS="$CFLAGS -Wshadow", []) + AC_CHECK_CC_OPT([-Weverything], CFLAGS="$CFLAGS -Weverything", []) + ], + []) + AC_ARG_VAR([TESTENV], [Test environment]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT diff --git a/import.c b/import.c index a3d4ffbe..56b3d198 100644 --- a/import.c +++ b/import.c @@ -45,7 +45,7 @@ int import_block_prevhash_compare(const void* void_arg, const void* void_data) */ static inline tommy_uint32_t import_block_hash(const unsigned char* hash) { - return *(tommy_uint32_t*)hash; + return *(const tommy_uint32_t*)hash; } static void import_file(struct snapraid_state* state, const char* path, uint64_t size) diff --git a/murmur3.c b/murmur3.c index dddf62b3..54dc1961 100644 --- a/murmur3.c +++ b/murmur3.c @@ -82,10 +82,10 @@ void MurmurHash3_x86_128(const void* key, unsigned len, const uint8_t* seed, voi unsigned i; const uint32_t* blocks; - uint32_t h1 = ((uint32_t*)seed)[0]; - uint32_t h2 = ((uint32_t*)seed)[1]; - uint32_t h3 = ((uint32_t*)seed)[2]; - uint32_t h4 = ((uint32_t*)seed)[3]; + uint32_t h1 = ((const uint32_t*)seed)[0]; + uint32_t h2 = ((const uint32_t*)seed)[1]; + uint32_t h3 = ((const uint32_t*)seed)[2]; + uint32_t h4 = ((const uint32_t*)seed)[3]; #if WORDS_BIGENDIAN h1 = util_swap32(h1); diff --git a/scan.c b/scan.c index ed67307f..a70913e4 100644 --- a/scan.c +++ b/scan.c @@ -874,7 +874,7 @@ struct dirent_sorted { #if HAVE_STRUCT_DIRENT_D_STAT struct stat d_stat; /**< Stat result. */ #endif - char d_name[1]; /**< Variable length name. It must be the last field. */ + char d_name[]; /**< Variable length name. It must be the last field. */ }; #if HAVE_STRUCT_DIRENT_D_INO @@ -995,7 +995,7 @@ static int scan_dir(struct snapraid_scan* scan, int output, const char* dir, con } name_len = strlen(dd->d_name); - entry = malloc_nofail(sizeof(struct dirent_sorted) + name_len); + entry = malloc_nofail(sizeof(struct dirent_sorted) + name_len + 1); /* copy the dir entry */ #if HAVE_STRUCT_DIRENT_D_INO diff --git a/scrub.c b/scrub.c index d80e52ea..7d94aeeb 100644 --- a/scrub.c +++ b/scrub.c @@ -134,7 +134,6 @@ static int state_scrub_process(struct snapraid_state* state, struct snapraid_par int error_on_this_block; int silent_error_on_this_block; int block_is_unsynced; - int ret; int rehash; /* if it's unused */ diff --git a/spooky2.c b/spooky2.c index c4a393e5..14a48dd4 100644 --- a/spooky2.c +++ b/spooky2.c @@ -123,8 +123,8 @@ void SpookyHash128(const void* message, size_t length, const uint8_t* seed, uint unsigned i; #endif - h9 = ((uint64_t*)seed)[0]; - h10 = ((uint64_t*)seed)[1]; + h9 = ((const uint64_t*)seed)[0]; + h10 = ((const uint64_t*)seed)[1]; #if WORDS_BIGENDIAN h9 = util_swap64(h9); diff --git a/state.c b/state.c index 8b8e3368..bbe7c94d 100644 --- a/state.c +++ b/state.c @@ -452,20 +452,20 @@ void state_config(struct snapraid_state* state, const char* path, const char* co ) { char device[PATH_MAX]; char* slash; - unsigned l; + unsigned level; switch (tag[0]) { - case 'p' : l = 0; break; - case 'q' : l = 1; break; - case 'r' : l = 2; break; - case '1' : l = 0; break; - case '2' : l = 1; break; - case '3' : l = 2; break; - case '4' : l = 3; break; - case '5' : l = 4; break; - case '6' : l = 5; break; + case 'p' : level = 0; break; + case 'q' : level = 1; break; + case 'r' : level = 2; break; + case '1' : level = 0; break; + case '2' : level = 1; break; + case '3' : level = 2; break; + case '4' : level = 3; break; + case '5' : level = 4; break; + case '6' : level = 5; break; case 'z' : - l = 2; + level = 2; state->raid_mode = RAID_MODE_VANDERMONDE; break; default: @@ -475,7 +475,7 @@ void state_config(struct snapraid_state* state, const char* path, const char* co /* LCOV_EXCL_STOP */ } - if (*state->parity_path[l]) { + if (*state->parity_path[level]) { /* LCOV_EXCL_START */ fprintf(stderr, "Multiple '%s' specification in '%s' at line %u\n", tag, path, line); exit(EXIT_FAILURE); @@ -497,7 +497,7 @@ void state_config(struct snapraid_state* state, const char* path, const char* co /* LCOV_EXCL_STOP */ } - pathimport(state->parity_path[l], sizeof(state->parity_path[l]), buffer); + pathimport(state->parity_path[level], sizeof(state->parity_path[level]), buffer); if (state->opt.skip_parity_access) { struct stat st; @@ -516,15 +516,15 @@ void state_config(struct snapraid_state* state, const char* path, const char* co /* LCOV_EXCL_STOP */ } - state->parity_device[l] = st.st_dev; + state->parity_device[level] = st.st_dev; } else { /* if parity is skipped, uses a fake device */ - state->parity_device[l] = -1LL - l; + state->parity_device[level] = -1LL - level; } /* adjust the level */ - if (state->level < l + 1) - state->level = l + 1; + if (state->level < level + 1) + state->level = level + 1; } else if (strcmp(tag, "share") == 0) { if (*state->share) { /* LCOV_EXCL_START */ @@ -2615,7 +2615,6 @@ static void state_read_binary(struct snapraid_state* state, const char* path, ST } while (1) { - char buffer[PATH_MAX]; int c; /* read the command */ diff --git a/sync.c b/sync.c index 4f5b9bc7..db087779 100644 --- a/sync.c +++ b/sync.c @@ -412,7 +412,6 @@ static int state_sync_process(struct snapraid_state* state, struct snapraid_pari int silent_error_on_this_block; int fixed_error_on_this_block; int parity_needs_to_be_updated; - int ret; snapraid_info info; int rehash; diff --git a/tommyhash.c b/tommyhash.c index 77431417..0bc604d9 100644 --- a/tommyhash.c +++ b/tommyhash.c @@ -35,7 +35,7 @@ tommy_inline tommy_uint32_t tommy_le_uint32_read(const void* ptr) /* allow unaligned read on Intel x86 and x86_64 platforms */ #if defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__x86_64__) || defined(_M_X64) /* defines from http://predef.sourceforge.net/ */ - return *(tommy_uint32_t*)ptr; + return *(const tommy_uint32_t*)ptr; #else const unsigned char* ptr8 = tommy_cast(const unsigned char*, ptr); return ptr8[0] + ((tommy_uint32_t)ptr8[1] << 8) + ((tommy_uint32_t)ptr8[2] << 16) + ((tommy_uint32_t)ptr8[3] << 24); diff --git a/util.c b/util.c index e48ff2d7..720d6182 100644 --- a/util.c +++ b/util.c @@ -1198,14 +1198,14 @@ uint32_t crc32c_x86(uint32_t crc, const unsigned char* ptr, unsigned size) #ifdef CONFIG_X86_64 crc64 = crc; while (size >= 8) { - asm volatile ("crc32q %1, %0\n" : "+r" (crc64) : "rm" (*(uint64_t*)ptr)); + asm volatile ("crc32q %1, %0\n" : "+r" (crc64) : "rm" (*(const uint64_t*)ptr)); ptr += 8; size -= 8; } crc = crc64; #else while (size >= 4) { - asm volatile ("crc32l %1, %0\n" : "+r" (crc) : "rm" (*(uint32_t*)ptr)); + asm volatile ("crc32l %1, %0\n" : "+r" (crc) : "rm" (*(const uint32_t*)ptr)); ptr += 4; size -= 4; }