From 74e061165a808883c5b17ff356bde60fa335cbda Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 12 Jun 2020 16:12:21 +0200 Subject: [PATCH] Define POSIX macro to have strdup https://github.com/profanity-im/profanity/commit/98c38dc6d6d29333c63f80327774f094610d8602 sets C99 as standard. strdup() is not part of C99. For now set `-D_POSIX_C_SOURCE=200809L` macro to have strdup() in C99. Using `gnu99` instead would be another option. We should take more care to use glib functions whenever possible. Regards https://github.com/profanity-im/profanity/issues/1357 --- configure.ac | 2 +- src/config/files.c | 14 +++++++------- src/config/files.h | 8 ++++---- src/config/preferences.c | 6 +++--- src/config/theme.c | 9 +++++---- src/log.c | 4 ++-- src/ui/inputwin.c | 4 ++-- src/ui/tray.c | 6 ++++-- 8 files changed, 28 insertions(+), 25 deletions(-) diff --git a/configure.ac b/configure.ac index 63424981..648837b0 100644 --- a/configure.ac +++ b/configure.ac @@ -354,7 +354,7 @@ AC_CHECK_HEADERS([ncursesw/ncurses.h], [], []) AC_CHECK_HEADERS([ncurses.h], [], []) ### Default parameters -AM_CFLAGS="-Wall -Wno-deprecated-declarations -std=c99" +AM_CFLAGS="-Wall -Wno-deprecated-declarations -std=c99 -D_POSIX_C_SOURCE=200809L" AS_IF([test "x$PACKAGE_STATUS" = xdevelopment], [AM_CFLAGS="$AM_CFLAGS -Wunused -Werror"]) AS_IF([test "x$PLATFORM" = xosx], diff --git a/src/config/files.c b/src/config/files.c index ff612d64..da2b66bb 100644 --- a/src/config/files.c +++ b/src/config/files.c @@ -91,7 +91,7 @@ files_create_directories(void) g_free(xdg_data); } -char* +gchar* files_get_inputrc_file(void) { gchar *xdg_config = _files_get_xdg_config_home(); @@ -101,7 +101,7 @@ files_get_inputrc_file(void) g_string_append(inputrc_file, "/profanity/inputrc"); if (g_file_test(inputrc_file->str, G_FILE_TEST_IS_REGULAR)) { - char *result = strdup(inputrc_file->str); + gchar *result = g_strdup(inputrc_file->str); g_string_free(inputrc_file, TRUE); return result; @@ -131,7 +131,7 @@ files_get_log_file(char *log_file) g_string_append(logfile, ".log"); - char *result = strdup(logfile->str); + char *result = g_strdup(logfile->str); free(xdg_data); g_string_free(logfile, TRUE); @@ -139,28 +139,28 @@ files_get_log_file(char *log_file) return result; } -char* +gchar* files_get_config_path(char *config_base) { gchar *xdg_config = _files_get_xdg_config_home(); GString *file_str = g_string_new(xdg_config); g_string_append(file_str, "/profanity/"); g_string_append(file_str, config_base); - char *result = strdup(file_str->str); + gchar *result = g_strdup(file_str->str); g_free(xdg_config); g_string_free(file_str, TRUE); return result; } -char* +gchar* files_get_data_path(char *data_base) { gchar *xdg_data = _files_get_xdg_data_home(); GString *file_str = g_string_new(xdg_data); g_string_append(file_str, "/profanity/"); g_string_append(file_str, data_base); - char *result = strdup(file_str->str); + gchar *result = g_strdup(file_str->str); g_free(xdg_data); g_string_free(file_str, TRUE); diff --git a/src/config/files.h b/src/config/files.h index 0abd7f6f..c87c4501 100644 --- a/src/config/files.h +++ b/src/config/files.h @@ -60,10 +60,10 @@ void files_create_directories(void); -char* files_get_config_path(char *config_base); -char* files_get_data_path(char *data_base); +gchar* files_get_config_path(char *config_base); +gchar* files_get_data_path(char *data_base); -char* files_get_log_file(char *log_file); -char* files_get_inputrc_file(void); +gchar* files_get_log_file(char *log_file); +gchar* files_get_inputrc_file(void); #endif diff --git a/src/config/preferences.c b/src/config/preferences.c index 10e406b2..d1c1d900 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -67,7 +67,7 @@ #define INPBLOCK_DEFAULT 1000 -static char *prefs_loc; +static gchar *prefs_loc; static GKeyFile *prefs; gint log_maxsize = 0; @@ -209,7 +209,7 @@ prefs_load(char *config_file) if (config_file == NULL) { prefs_loc = files_get_config_path(FILE_PROFRC); } else { - prefs_loc = strdup(config_file); + prefs_loc = g_strdup(config_file); } if (g_file_test(prefs_loc, G_FILE_TEST_EXISTS)) { @@ -236,7 +236,7 @@ prefs_close(void) g_key_file_free(prefs); prefs = NULL; - free(prefs_loc); + g_free(prefs_loc); prefs_loc = NULL; } diff --git a/src/config/theme.c b/src/config/theme.c index 48fbd95b..e9726593 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -230,10 +230,11 @@ GSList* theme_list(void) { GSList *result = NULL; - char *themes_dir = files_get_config_path(DIR_THEMES); + gchar *themes_dir = files_get_config_path(DIR_THEMES); _theme_list_dir(themes_dir, &result); - free(themes_dir); + g_free(themes_dir); + #ifdef THEMES_PATH _theme_list_dir(THEMES_PATH, &result); #endif @@ -532,11 +533,11 @@ static GString* _theme_find(const char *const theme_name) { GString *path = NULL; - char *themes_dir = files_get_config_path(DIR_THEMES); + gchar *themes_dir = files_get_config_path(DIR_THEMES); if (themes_dir) { path = g_string_new(themes_dir); - free(themes_dir); + g_free(themes_dir); g_string_append(path, "/"); g_string_append(path, theme_name); if (!g_file_test(path->str, G_FILE_TEST_EXISTS)) { diff --git a/src/log.c b/src/log.c index 3ca80750..30baef0f 100644 --- a/src/log.c +++ b/src/log.c @@ -149,13 +149,13 @@ log_init(log_level_t filter, char *log_file) level_filter = filter; tz = g_time_zone_new_local(); - char *lf; + gchar *lf; lf = files_get_log_file(log_file); logp = fopen(lf, "a"); g_chmod(lf, S_IRUSR | S_IWUSR); mainlogfile = g_string_new(lf); - free(lf); + g_free(lf); } void diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index f3383986..6a1a6f48 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -503,10 +503,10 @@ _inp_rl_startup_hook(void) rl_variable_bind("disable-completion", "on"); // check for and load ~/.config/profanity/inputrc - char *inputrc = files_get_inputrc_file(); + gchar *inputrc = files_get_inputrc_file(); if (inputrc) { rl_read_init_file(inputrc); - free(inputrc); + g_free(inputrc); } return 0; diff --git a/src/ui/tray.c b/src/ui/tray.c index d327fc1c..6d79b379 100644 --- a/src/ui/tray.c +++ b/src/ui/tray.c @@ -79,13 +79,15 @@ _get_icons(void) #endif /* ICONS_PATH */ - char *icons_dir_s = files_get_config_path(DIR_ICONS); + gchar *icons_dir_s = files_get_config_path(DIR_ICONS); icons_dir = g_string_new(icons_dir_s); - free(icons_dir_s); + g_free(icons_dir_s); GError *err = NULL; + if (!g_file_test(icons_dir->str, G_FILE_TEST_IS_DIR)) { return; } + GDir *dir = g_dir_open(icons_dir->str, 0, &err); if (dir) { GString *name = g_string_new(g_dir_read_name(dir));