diff --git a/cli/src/utils.c b/cli/src/utils.c index 50d9af9ea..d76ee0195 100644 --- a/cli/src/utils.c +++ b/cli/src/utils.c @@ -170,6 +170,32 @@ nmc_terminal_show_progress (const char *str) idx = 0; } +/* + * Ask user for input and return the string. + * The caller is responsible for freeing the returned string. + */ +char * +nmc_get_user_input (const char *ask_str) +{ + char *line = NULL; + size_t line_ln = 0; + ssize_t read; + + fprintf (stdout, "%s", ask_str); + read = getline (&line, &line_ln, stdin); + + /* Remove newline from the string */ + if (read < 1 || (read == 1 && line[0] == '\n')) { + g_free (line); + line = NULL; + } else { + if (line[read-1] == '\n') + line[read-1] = '\0'; + } + + return line; +} + /* * Find out how many columns an UTF-8 string occupies on the screen */ diff --git a/cli/src/utils.h b/cli/src/utils.h index dd4c3642f..54d5b4f39 100644 --- a/cli/src/utils.h +++ b/cli/src/utils.h @@ -32,6 +32,7 @@ char *nmc_ip4_address_as_string (guint32 ip, GError **error); char *nmc_ip6_address_as_string (const struct in6_addr *ip, GError **error); void nmc_terminal_erase_line (void); void nmc_terminal_show_progress (const char *str); +char *nmc_get_user_input (const char *ask_str); int nmc_string_screen_width (const char *start, const char *end); void set_val_str (NmcOutputField fields_array[], guint32 index, char *value); void set_val_arr (NmcOutputField fields_array[], guint32 index, char **value);