From e9aaba938b4f1b62b5f9018583a82ed7e7180977 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Mon, 14 Nov 2022 15:51:05 +0100 Subject: [PATCH] minor changes * fix typo * less code duplication * less `GString` usage * more `auto_gchar` usage * document connecting to servers supporting SASL ANONYMOUS * ignore valgrind output Signed-off-by: Steffen Jaeckel --- .gitignore | 3 +++ src/command/cmd_defs.c | 12 ++++++--- src/command/cmd_funcs.c | 32 +++++++++------------- src/log.c | 18 ++++++++----- src/log.h | 2 +- src/profanity.c | 3 ++- src/tools/autocomplete.c | 49 +++++++--------------------------- tests/unittests/log/stub_log.c | 6 ++--- 8 files changed, 49 insertions(+), 76 deletions(-) diff --git a/.gitignore b/.gitignore index 446a3868..cc3402a9 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,9 @@ tests/unittests/unittests.log tests/unittests/unittests.trs test-suite.log +# valgrind output +profval* + # local scripts clean-test.sh gen_docs.sh diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index e65e2f00..83dc1bbf 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -170,15 +170,18 @@ static struct cmd_t command_defs[] = { CMD_TAG_CONNECTION) CMD_SYN( "/connect []", - "/connect [server ] [port ] [tls force|allow|trust|legacy|disable] [auth default|legacy]") + "/connect [server ] [port ] [tls force|allow|trust|legacy|disable] [auth default|legacy]", + "/connect ") CMD_DESC( "Login to a chat service. " "If no account is specified, the default is used if one is configured. " - "A local account is created with the JID as it's name if it doesn't already exist.") + "A local account is created with the JID as it's name if it doesn't already exist. " + "In case you want to connect to a server via SASL ANONYMOUS (c.f. XEP-0175) you can also do that.") CMD_ARGS( { "", "The local account you wish to connect with, or a JID if connecting for the first time." }, { "server ", "Supply a server if it is different to the domain part of your JID." }, { "port ", "The port to use if different to the default (5222, or 5223 for SSL)." }, + { "", "Connect to said server in an anonymous way. (Be aware: There aren't many servers that support this.)" }, { "tls force", "Force TLS connection, and fail if one cannot be established, this is default behaviour." }, { "tls allow", "Use TLS for the connection if it is available." }, { "tls trust", "Force TLS connection and trust server's certificate." }, @@ -192,7 +195,8 @@ static struct cmd_t command_defs[] = { "/connect odin@valhalla.edda server talk.google.com", "/connect freyr@vanaheimr.edda port 5678", "/connect me@localhost.test.org server 127.0.0.1 tls disable", - "/connect me@chatty server chatty.com port 5443") + "/connect me@chatty server chatty.com port 5443", + "/connect server.supporting.sasl.anonymous.example") }, { "/tls", @@ -2013,7 +2017,7 @@ static struct cmd_t command_defs[] = { { "rotate on|off", "Rotate log, default on. Does not take effect if you specified a filename yourself when starting Profanity." }, { "maxsize ", "With rotate enabled, specifies the max log size, defaults to 10485760 (10MB)." }, { "shared on|off", "Share logs between all instances, default: on. When off, the process id will be included in the log filename. Does not take effect if you specified a filename yourself when starting Profanity." }, - {"level INFO|DEBUG|WARN|EFFOR", "Set the log level. Default is INFO. Only works with default log file, not with user provided log file during startup via -f." }) + {"level INFO|DEBUG|WARN|ERROR", "Set the log level. Default is INFO. Only works with default log file, not with user provided log file during startup via -f." }) CMD_NOEXAMPLES }, diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index c0c0d036..795ea817 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -120,8 +120,8 @@ static void _update_presence(const resource_presence_t presence, const char* const show, gchar** args); -static void _cmd_set_boolean_preference(gchar* arg, const char* const command, - const char* const display, preference_t pref); +static gboolean _cmd_set_boolean_preference(gchar* arg, const char* const command, + const char* const display, preference_t pref); static void _who_room(ProfWin* window, const char* const command, gchar** args); static void _who_roster(ProfWin* window, const char* const command, gchar** args); static gboolean _cmd_execute(ProfWin* window, const char* const command, const char* const inp); @@ -6517,9 +6517,8 @@ cmd_log(ProfWin* window, const char* const command, gchar** args) } if (strcmp(subcmd, "level") == 0) { - if (g_strcmp0(value, "INFO") == 0 || g_strcmp0(value, "DEBUG") == 0 || g_strcmp0(value, "WARN") == 0 || g_strcmp0(value, "ERROR") == 0) { - - log_level_t prof_log_level = log_level_from_string(value); + log_level_t prof_log_level; + if (log_level_from_string(value, &prof_log_level) == 0) { log_close(); log_init(prof_log_level, NULL); @@ -8580,31 +8579,24 @@ _update_presence(const resource_presence_t resource_presence, } // helper function for boolean preference commands -static void +static gboolean _cmd_set_boolean_preference(gchar* arg, const char* const command, const char* const display, preference_t pref) { if (arg == NULL) { cons_bad_cmd_usage(command); - } else if (strcmp(arg, "on") == 0) { - GString* enabled = g_string_new(display); - g_string_append(enabled, " enabled."); - - cons_show(enabled->str); + return FALSE; + } else if (g_strcmp0(arg, "on") == 0) { + cons_show("%s enabled.", display); prefs_set_boolean(pref, TRUE); - - g_string_free(enabled, TRUE); - } else if (strcmp(arg, "off") == 0) { - GString* disabled = g_string_new(display); - g_string_append(disabled, " disabled."); - - cons_show(disabled->str); + } else if (g_strcmp0(arg, "off") == 0) { + cons_show("%s disabled.", display); prefs_set_boolean(pref, FALSE); - - g_string_free(disabled, TRUE); } else { cons_bad_cmd_usage(command); + return FALSE; } + return TRUE; } gboolean diff --git a/src/log.c b/src/log.c index 97c1a149..a1b7bb1d 100644 --- a/src/log.c +++ b/src/log.c @@ -233,21 +233,25 @@ log_msg(log_level_t level, const char* const area, const char* const msg) } } -log_level_t -log_level_from_string(char* log_level) +int +log_level_from_string(char* log_level, log_level_t* level) { + int ret = 0; assert(log_level != NULL); + assert(level != NULL); if (strcmp(log_level, "DEBUG") == 0) { - return PROF_LEVEL_DEBUG; + *level = PROF_LEVEL_DEBUG; } else if (strcmp(log_level, "INFO") == 0) { - return PROF_LEVEL_INFO; + *level = PROF_LEVEL_INFO; } else if (strcmp(log_level, "WARN") == 0) { - return PROF_LEVEL_WARN; + *level = PROF_LEVEL_WARN; } else if (strcmp(log_level, "ERROR") == 0) { - return PROF_LEVEL_ERROR; + *level = PROF_LEVEL_ERROR; } else { // default logging is warn - return PROF_LEVEL_WARN; + *level = PROF_LEVEL_WARN; + ret = -1; } + return ret; } const char* diff --git a/src/log.h b/src/log.h index 2a955c90..3bf092b3 100644 --- a/src/log.h +++ b/src/log.h @@ -55,7 +55,7 @@ void log_info(const char* const msg, ...); void log_warning(const char* const msg, ...); void log_error(const char* const msg, ...); void log_msg(log_level_t level, const char* const area, const char* const msg); -log_level_t log_level_from_string(char* log_level); +int log_level_from_string(char* log_level, log_level_t* level); const char* log_string_from_level(log_level_t level); void log_stderr_init(log_level_t level); diff --git a/src/profanity.c b/src/profanity.c index 49adc4a0..869ab561 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -175,7 +175,8 @@ _init(char* log_level, char* config_file, char* log_file, char* theme_name) pthread_mutex_lock(&lock); files_create_directories(); - log_level_t prof_log_level = log_level_from_string(log_level); + log_level_t prof_log_level; + log_level_from_string(log_level, &prof_log_level); prefs_load(config_file); log_init(prof_log_level, log_file); log_stderr_init(PROF_LEVEL_ERROR); diff --git a/src/tools/autocomplete.c b/src/tools/autocomplete.c index 9450b98f..2f1acc1f 100644 --- a/src/tools/autocomplete.c +++ b/src/tools/autocomplete.c @@ -367,34 +367,20 @@ char* autocomplete_param_no_with_func(const char* const input, char* command, int arg_number, autocomplete_func func, gboolean previous, void* context) { if (strncmp(input, command, strlen(command)) == 0) { - GString* result_str = NULL; - // count tokens properly int num_tokens = count_tokens(input); // if correct number of tokens, then candidate for autocompletion of last param if (num_tokens == arg_number) { - gchar* start_str = get_start(input, arg_number); - gchar* comp_str = g_strdup(&input[strlen(start_str)]); + auto_gchar gchar* start_str = get_start(input, arg_number); + auto_gchar gchar* comp_str = g_strdup(&input[strlen(start_str)]); // autocomplete param if (comp_str) { - char* found = func(comp_str, previous, context); + auto_gchar gchar* found = func(comp_str, previous, context); if (found) { - result_str = g_string_new(""); - g_string_append(result_str, start_str); - g_string_append(result_str, found); - - free(start_str); - free(comp_str); - - char* result = result_str->str; - g_string_free(result_str, FALSE); - - return result; + return g_strdup_printf("%s%s", start_str, found); } - } else { - free(start_str); } } } @@ -418,14 +404,12 @@ autocomplete_remove_older_than_max_reverse(Autocomplete ac, int maxsize) static gchar* _search(Autocomplete ac, GList* curr, gboolean quote, search_direction direction) { - gchar* search_str_ascii = g_str_to_ascii(ac->search_str, NULL); - gchar* search_str_lower = g_ascii_strdown(search_str_ascii, -1); - g_free(search_str_ascii); + auto_gchar gchar* search_str_ascii = g_str_to_ascii(ac->search_str, NULL); + auto_gchar gchar* search_str_lower = g_ascii_strdown(search_str_ascii, -1); while (curr) { - gchar* curr_ascii = g_str_to_ascii(curr->data, NULL); - gchar* curr_lower = g_ascii_strdown(curr_ascii, -1); - g_free(curr_ascii); + auto_gchar gchar* curr_ascii = g_str_to_ascii(curr->data, NULL); + auto_gchar gchar* curr_lower = g_ascii_strdown(curr_ascii, -1); // match found if (strncmp(curr_lower, search_str_lower, strlen(search_str_lower)) == 0) { @@ -435,27 +419,13 @@ _search(Autocomplete ac, GList* curr, gboolean quote, search_direction direction // if contains space, quote before returning if (quote && g_strrstr(curr->data, " ")) { - GString* quoted = g_string_new("\""); - g_string_append(quoted, curr->data); - g_string_append(quoted, "\""); - - gchar* result = quoted->str; - g_string_free(quoted, FALSE); - - g_free(search_str_lower); - g_free(curr_lower); - return result; - + return g_strdup_printf("\"%s\"", (gchar*)curr->data); // otherwise just return the string } else { - g_free(search_str_lower); - g_free(curr_lower); return strdup(curr->data); } } - g_free(curr_lower); - if (direction == PREVIOUS) { curr = g_list_previous(curr); } else { @@ -463,6 +433,5 @@ _search(Autocomplete ac, GList* curr, gboolean quote, search_direction direction } } - g_free(search_str_lower); return NULL; } diff --git a/tests/unittests/log/stub_log.c b/tests/unittests/log/stub_log.c index dfa2619a..18d05eca 100644 --- a/tests/unittests/log/stub_log.c +++ b/tests/unittests/log/stub_log.c @@ -67,10 +67,10 @@ get_log_file_location(void) return mock_ptr_type(char*); } -log_level_t -log_level_from_string(char* log_level) +int +log_level_from_string(char* log_level, log_level_t* level) { - return mock_type(log_level_t); + return mock_type(int); } void