From bbe112633c9f1035930186fb91527b68169c6e86 Mon Sep 17 00:00:00 2001 From: Pablo Garrido Date: Mon, 6 Sep 2021 15:57:18 +0200 Subject: [PATCH] Remove build warning (#10) * Avoid not used warnings * Update (cherry picked from commit a76caed04b9aeede63bb0cc2a3028f2327263667) # Conflicts: # src/filesystem.c --- src/filesystem.c | 303 +++++++++++++++++++++++++++++++++++++++++++ src/shared_library.c | 28 ++++ 2 files changed, 331 insertions(+) diff --git a/src/filesystem.c b/src/filesystem.c index 4c1802b5..47c7b944 100644 --- a/src/filesystem.c +++ b/src/filesystem.c @@ -60,6 +60,8 @@ bool rcutils_get_cwd(char * buffer, size_t max_length) { #ifdef RCUTILS_NO_FILESYSTEM + (void) buffer; + (void) max_length; RCUTILS_SET_ERROR_MSG("not available filesystem"); return false; #else @@ -83,6 +85,7 @@ bool rcutils_is_directory(const char * abs_path) { #ifdef RCUTILS_NO_FILESYSTEM + (void) abs_path; RCUTILS_SET_ERROR_MSG("not available filesystem"); return false; #else @@ -102,6 +105,7 @@ bool rcutils_is_file(const char * abs_path) { #ifdef RCUTILS_NO_FILESYSTEM + (void) abs_path; RCUTILS_SET_ERROR_MSG("not available filesystem"); return false; #else @@ -121,6 +125,7 @@ bool rcutils_exists(const char * abs_path) { #ifdef RCUTILS_NO_FILESYSTEM + (void) abs_path; RCUTILS_SET_ERROR_MSG("not available filesystem"); return false; #else @@ -136,6 +141,7 @@ bool rcutils_is_readable(const char * abs_path) { #ifdef RCUTILS_NO_FILESYSTEM + (void) abs_path; RCUTILS_SET_ERROR_MSG("not available filesystem"); return false; #else @@ -158,6 +164,7 @@ bool rcutils_is_writable(const char * abs_path) { #ifdef RCUTILS_NO_FILESYSTEM + (void) abs_path; RCUTILS_SET_ERROR_MSG("not available filesystem"); return false; #else @@ -180,6 +187,7 @@ bool rcutils_is_readable_and_writable(const char * abs_path) { #ifdef RCUTILS_NO_FILESYSTEM + (void) abs_path; RCUTILS_SET_ERROR_MSG("not available filesystem"); return false; #else @@ -206,6 +214,16 @@ rcutils_join_path( const char * right_hand_path, rcutils_allocator_t allocator) { +<<<<<<< HEAD +======= +#ifdef RCUTILS_NO_FILESYSTEM + (void) left_hand_path; + (void) right_hand_path; + (void) allocator; + RCUTILS_SET_ERROR_MSG("not available filesystem"); + return NULL; +#else +>>>>>>> a76caed (Remove build warning (#10)) if (NULL == left_hand_path) { return NULL; } @@ -224,16 +242,67 @@ rcutils_to_native_path( const char * path, rcutils_allocator_t allocator) { +<<<<<<< HEAD +======= +#ifdef RCUTILS_NO_FILESYSTEM + (void) path; + (void) allocator; + RCUTILS_SET_ERROR_MSG("not available filesystem"); + return NULL; +#else +>>>>>>> a76caed (Remove build warning (#10)) if (NULL == path) { return NULL; } return rcutils_repl_str(path, "/", RCUTILS_PATH_DELIMITER, &allocator); +<<<<<<< HEAD +======= +#endif // _RCUTILS_NO_FILESYSTEM +} + +char * +rcutils_expand_user(const char * path, rcutils_allocator_t allocator) +{ +#ifdef RCUTILS_NO_FILESYSTEM + (void) path; + (void) allocator; + RCUTILS_SET_ERROR_MSG("not available filesystem"); + return NULL; +#else + if (NULL == path) { + return NULL; + } + + if ('~' != path[0]) { + return rcutils_strdup(path, allocator); + } + + const char * homedir = rcutils_get_home_dir(); + if (NULL == homedir) { + return NULL; + } + return rcutils_format_string_limit( + allocator, + strlen(homedir) + strlen(path), + "%s%s", + homedir, + path + 1); +#endif // _RCUTILS_NO_FILESYSTEM +>>>>>>> a76caed (Remove build warning (#10)) } bool rcutils_mkdir(const char * abs_path) { +<<<<<<< HEAD +======= +#ifdef RCUTILS_NO_FILESYSTEM + (void) abs_path; + RCUTILS_SET_ERROR_MSG("not available filesystem"); + return false; +#else +>>>>>>> a76caed (Remove build warning (#10)) if (NULL == abs_path) { return false; } @@ -261,13 +330,97 @@ rcutils_mkdir(const char * abs_path) } return success; +<<<<<<< HEAD +======= +#endif // _RCUTILS_NO_FILESYSTEM +} + +rcutils_ret_t +rcutils_calculate_directory_size( + const char * directory_path, + uint64_t * size, + rcutils_allocator_t allocator) +{ + return rcutils_calculate_directory_size_with_recursion(directory_path, 1, size, allocator); +} + +typedef struct dir_list_t +{ + char * path; + uint32_t depth; // Compare with base path + struct dir_list_t * next; +} dir_list_t; + +#ifndef RCUTILS_NO_FILESYSTEM +static void free_dir_list(dir_list_t * dir_list, rcutils_allocator_t allocator) +{ + dir_list_t * next_dir; + do { + next_dir = dir_list->next; + allocator.deallocate(dir_list->path, allocator.state); + allocator.deallocate(dir_list, allocator.state); + dir_list = next_dir; + } while (dir_list); +} + +static void remove_first_dir_from_list(dir_list_t ** dir_list, rcutils_allocator_t allocator) +{ + dir_list_t * next_dir = (*dir_list)->next; + allocator.deallocate((*dir_list)->path, allocator.state); + allocator.deallocate(*dir_list, allocator.state); + *dir_list = next_dir; +>>>>>>> a76caed (Remove build warning (#10)) } size_t rcutils_calculate_directory_size(const char * directory_path, rcutils_allocator_t allocator) { +<<<<<<< HEAD +======= + // Skip over local folder handle (`.`) and parent folder (`..`) + if (strcmp(filename, ".") == 0 || strcmp(filename, "..") == 0) { + return RCUTILS_RET_OK; + } + + char * file_path = rcutils_join_path(dir_list->path, filename, allocator); + if (NULL == file_path) { + RCUTILS_SAFE_FWRITE_TO_STDERR("rcutils_join_path return NULL !\n"); + return RCUTILS_RET_BAD_ALLOC; + } + + if (rcutils_is_directory(file_path)) { + if ((max_depth == 0) || ((dir_list->depth + 1) <= max_depth)) { + // Add new directory to dir_list + dir_list_t * found_new_dir = + allocator.allocate(sizeof(dir_list_t), allocator.state); + if (NULL == found_new_dir) { + RCUTILS_SAFE_FWRITE_TO_STDERR_WITH_FORMAT_STRING( + "Failed to allocate memory for path %s !\n", file_path); + allocator.deallocate(file_path, allocator.state); + return RCUTILS_RET_BAD_ALLOC; + } + found_new_dir->path = file_path; + found_new_dir->depth = dir_list->depth + 1; + found_new_dir->next = dir_list->next; + dir_list->next = found_new_dir; + return RCUTILS_RET_OK; + } + } else { + *dir_size += rcutils_get_file_size(file_path); + } + + allocator.deallocate(file_path, allocator.state); + + return RCUTILS_RET_OK; +} +#endif // _RCUTILS_NO_FILESYSTEM +>>>>>>> a76caed (Remove build warning (#10)) #ifdef RCUTILS_NO_FILESYSTEM + (void) directory_path; + (void) max_depth; + (void) size; + (void) allocator; RCUTILS_SET_ERROR_MSG("not available filesystem"); return 0; #else @@ -295,6 +448,7 @@ rcutils_calculate_directory_size(const char * directory_path, rcutils_allocator_ dir_size += rcutils_get_file_size(file_path); allocator.deallocate(file_path, allocator.state); } +<<<<<<< HEAD } while (FindNextFile(handle, &data)); FindClose(handle); } @@ -313,11 +467,159 @@ rcutils_calculate_directory_size(const char * directory_path, rcutils_allocator_ dir_size += rcutils_get_file_size(file_path); allocator.deallocate(file_path, allocator.state); } +======= + } while (rcutils_dir_iter_next(iter)); + + rcutils_dir_iter_end(iter); + + remove_first_dir_from_list(&dir_list, allocator); + } while (dir_list); + + return ret; + +fail: + rcutils_dir_iter_end(iter); + free_dir_list(dir_list, allocator); + return ret; +#endif // _RCUTILS_NO_FILESYSTEM +} + +rcutils_dir_iter_t * +rcutils_dir_iter_start(const char * directory_path, const rcutils_allocator_t allocator) +{ +#ifdef RCUTILS_NO_FILESYSTEM + (void) directory_path; + (void) allocator; + RCUTILS_SET_ERROR_MSG("not available filesystem"); + return NULL; +#else + RCUTILS_CHECK_ARGUMENT_FOR_NULL(directory_path, NULL); + RCUTILS_CHECK_ALLOCATOR_WITH_MSG( + &allocator, "allocator is invalid", return NULL); + + rcutils_dir_iter_t * iter = (rcutils_dir_iter_t *)allocator.zero_allocate( + 1, sizeof(rcutils_dir_iter_t), allocator.state); + if (NULL == iter) { + return NULL; + } + iter->allocator = allocator; + + rcutils_dir_iter_state_t * state = (rcutils_dir_iter_state_t *)allocator.zero_allocate( + 1, sizeof(rcutils_dir_iter_state_t), allocator.state); + if (NULL == state) { + RCUTILS_SET_ERROR_MSG( + "Failed to allocate memory.\n"); + goto rcutils_dir_iter_start_fail; + } + iter->state = (void *)state; + +#ifdef _WIN32 + char * search_path = rcutils_join_path(directory_path, "*", allocator); + if (NULL == search_path) { + goto rcutils_dir_iter_start_fail; + } + state->handle = FindFirstFile(search_path, &state->data); + allocator.deallocate(search_path, allocator.state); + if (INVALID_HANDLE_VALUE == state->handle) { + DWORD error = GetLastError(); + if (ERROR_FILE_NOT_FOUND != error || !rcutils_is_directory(directory_path)) { + RCUTILS_SET_ERROR_MSG_WITH_FORMAT_STRING( + "Can't open directory %s. Error code: %d\n", directory_path, error); + goto rcutils_dir_iter_start_fail; + } + } else { + iter->entry_name = state->data.cFileName; + } +#else + state->dir = opendir(directory_path); + if (NULL == state->dir) { + RCUTILS_SET_ERROR_MSG_WITH_FORMAT_STRING( + "Can't open directory %s. Error code: %d\n", directory_path, errno); + goto rcutils_dir_iter_start_fail; + } + + errno = 0; + struct dirent * entry = readdir(state->dir); + if (NULL != entry) { + iter->entry_name = entry->d_name; + } else if (0 != errno) { + RCUTILS_SET_ERROR_MSG_WITH_FORMAT_STRING( + "Can't iterate directory %s. Error code: %d\n", directory_path, errno); + goto rcutils_dir_iter_start_fail; + } +#endif + + return iter; + +rcutils_dir_iter_start_fail: + rcutils_dir_iter_end(iter); + return NULL; +#endif // _RCUTILS_NO_FILESYSTEM +} + +bool +rcutils_dir_iter_next(rcutils_dir_iter_t * iter) +{ +#ifdef RCUTILS_NO_FILESYSTEM + (void) iter; + RCUTILS_SET_ERROR_MSG("not available filesystem"); + return false; +#else + RCUTILS_CHECK_ARGUMENT_FOR_NULL(iter, false); + rcutils_dir_iter_state_t * state = (rcutils_dir_iter_state_t *)iter->state; + RCUTILS_CHECK_FOR_NULL_WITH_MSG(state, "iter is invalid", false); + +#ifdef _WIN32 + if (FindNextFile(state->handle, &state->data)) { + iter->entry_name = state->data.cFileName; + return true; + } + FindClose(state->handle); +#else + struct dirent * entry = readdir(state->dir); + if (NULL != entry) { + iter->entry_name = entry->d_name; + return true; +>>>>>>> a76caed (Remove build warning (#10)) } closedir(dir); return dir_size; #endif +<<<<<<< HEAD +======= + iter->entry_name = NULL; + return false; +#endif // _RCUTILS_NO_FILESYSTEM +} + +void +rcutils_dir_iter_end(rcutils_dir_iter_t * iter) +{ +#ifdef RCUTILS_NO_FILESYSTEM + (void) iter; + RCUTILS_SET_ERROR_MSG("not available filesystem"); +#else + if (NULL == iter) { + return; + } + + rcutils_allocator_t allocator = iter->allocator; + rcutils_dir_iter_state_t * state = (rcutils_dir_iter_state_t *)iter->state; + if (NULL != state) { +#ifdef _WIN32 + FindClose(state->handle); +#else + if (NULL != state->dir) { + closedir(state->dir); + } +#endif + + allocator.deallocate(state, allocator.state); + } + + allocator.deallocate(iter, allocator.state); +>>>>>>> a76caed (Remove build warning (#10)) #endif // _RCUTILS_NO_FILESYSTEM } @@ -326,6 +628,7 @@ rcutils_get_file_size(const char * file_path) { #ifdef RCUTILS_NO_FILESYSTEM + (void) file_path; RCUTILS_SET_ERROR_MSG("not available filesystem"); return 0; #else diff --git a/src/shared_library.c b/src/shared_library.c index 76f6153c..fafab0e2 100644 --- a/src/shared_library.c +++ b/src/shared_library.c @@ -101,6 +101,9 @@ rcutils_load_shared_library( return RCUTILS_RET_OK; #else + (void) lib; + (void) library_path; + (void) allocator; return RCUTILS_RET_ERROR; #endif //RCUTILS_NO_FILESYSTEM @@ -109,6 +112,7 @@ rcutils_load_shared_library( void * rcutils_get_symbol(const rcutils_shared_library_t * lib, const char * symbol_name) { +#ifndef RCUTILS_NO_FILESYSTEM if (!lib || !lib->lib_pointer || (symbol_name == NULL)) { RCUTILS_SET_ERROR_MSG("invalid inputs arguments"); return NULL; @@ -139,11 +143,17 @@ rcutils_get_symbol(const rcutils_shared_library_t * lib, const char * symbol_nam return NULL; } return lib_symbol; +#else + (void) lib; + (void) symbol_name; + return NULL; +#endif //RCUTILS_NO_FILESYSTEM } bool rcutils_has_symbol(const rcutils_shared_library_t * lib, const char * symbol_name) { +#ifndef RCUTILS_NO_FILESYSTEM if (!lib || !lib->lib_pointer || symbol_name == NULL) { return false; } @@ -159,11 +169,17 @@ rcutils_has_symbol(const rcutils_shared_library_t * lib, const char * symbol_nam void * lib_symbol = GetProcAddress((HINSTANCE)(lib->lib_pointer), symbol_name); return lib_symbol != NULL; #endif // _WIN32 +#else + (void) lib; + (void) symbol_name; + return false; +#endif //RCUTILS_NO_FILESYSTEM } rcutils_ret_t rcutils_unload_shared_library(rcutils_shared_library_t * lib) { +#ifndef RCUTILS_NO_FILESYSTEM RCUTILS_CHECK_ARGUMENT_FOR_NULL(lib, RCUTILS_RET_INVALID_ARGUMENT); RCUTILS_CHECK_ARGUMENT_FOR_NULL(lib->lib_pointer, RCUTILS_RET_INVALID_ARGUMENT); RCUTILS_CHECK_ARGUMENT_FOR_NULL(lib->library_path, RCUTILS_RET_INVALID_ARGUMENT); @@ -189,6 +205,10 @@ rcutils_unload_shared_library(rcutils_shared_library_t * lib) lib->lib_pointer = NULL; lib->allocator = rcutils_get_zero_initialized_allocator(); return ret; +#else + (void) lib; + return RCUTILS_RET_ERROR; +#endif //RCUTILS_NO_FILESYSTEM } rcutils_ret_t @@ -198,6 +218,7 @@ rcutils_get_platform_library_name( unsigned int buffer_size, bool debug) { +#ifndef RCUTILS_NO_FILESYSTEM RCUTILS_CHECK_ARGUMENT_FOR_NULL(library_name, RCUTILS_RET_INVALID_ARGUMENT); RCUTILS_CHECK_ARGUMENT_FOR_NULL(library_name_platform, RCUTILS_RET_INVALID_ARGUMENT); @@ -247,6 +268,13 @@ rcutils_get_platform_library_name( return RCUTILS_RET_ERROR; } return RCUTILS_RET_OK; +#else + (void) library_name; + (void) library_name_platform; + (void) buffer_size; + (void) debug; + return RCUTILS_RET_ERROR; +#endif //RCUTILS_NO_FILESYSTEM } bool