summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorTeemu Ikonen <tpikonen@mailbox.org>2021-08-26 17:02:10 +0300
committerAleksander Morgado <aleksander@aleksander.es>2021-09-01 15:50:38 +0000
commitfa19b2b9b1412d3eeb515afe41c55ac414acc982 (patch)
tree32e2894d8849893a1bdc414ec6719e5d70a9b718 /cli
parent7177eeea990f92dacebb967a5d418f3a372e5951 (diff)
cli, location: Fix multi-sentence NMEA message output
Multi-sentence NMEA messages were printed as is, that is with linebreaks, which made mmcli --location-get output look broken. Split NMEA sentences with linebreaks to separate output list items, so that they line up correctly.
Diffstat (limited to 'cli')
-rw-r--r--cli/mmcli-modem-location.c2
-rw-r--r--cli/mmcli-output.c36
-rw-r--r--cli/mmcli-output.h2
3 files changed, 39 insertions, 1 deletions
diff --git a/cli/mmcli-modem-location.c b/cli/mmcli-modem-location.c
index 2865b69c..936ff425 100644
--- a/cli/mmcli-modem-location.c
+++ b/cli/mmcli-modem-location.c
@@ -568,7 +568,7 @@ get_location_process_reply (MMLocation3gpp *location_3gpp,
mmcli_output_string_take (MMC_F_LOCATION_3GPP_LAC, lac);
mmcli_output_string_take (MMC_F_LOCATION_3GPP_TAC, tac);
mmcli_output_string_take (MMC_F_LOCATION_3GPP_CID, cid);
- mmcli_output_string_array_take (MMC_F_LOCATION_GPS_NMEA, nmea, TRUE);
+ mmcli_output_string_array_multiline_take (MMC_F_LOCATION_GPS_NMEA, nmea);
mmcli_output_string (MMC_F_LOCATION_GPS_UTC, gps_utc);
mmcli_output_string_take (MMC_F_LOCATION_GPS_LONG, gps_longitude);
mmcli_output_string_take (MMC_F_LOCATION_GPS_LAT, gps_latitude);
diff --git a/cli/mmcli-output.c b/cli/mmcli-output.c
index 0d1fbf63..6e88792d 100644
--- a/cli/mmcli-output.c
+++ b/cli/mmcli-output.c
@@ -488,6 +488,42 @@ mmcli_output_string_array_take (MmcF field,
}
void
+mmcli_output_string_array_multiline_take (MmcF field,
+ gchar **strv)
+{
+ gchar **merged;
+ GPtrArray *pointers;
+
+ merged = NULL;
+ if (strv) {
+ guint i;
+
+ pointers = g_ptr_array_new ();
+ for (i = 0; strv[i]; i++) {
+ gchar **split;
+
+ split = strv[i] ? g_strsplit (strv[i], "\n", -1) : NULL;
+ if (split) {
+ guint n;
+
+ for (n = 0; split[n]; n++) {
+ if (split[n][0]) {
+ g_strstrip (split[n]);
+ g_ptr_array_add (pointers, g_strdup (split[n]));
+ }
+ }
+ g_strfreev (split);
+ }
+ }
+ g_strfreev (strv);
+ g_ptr_array_add (pointers, NULL);
+ merged = (gchar **)g_ptr_array_free (pointers, FALSE);
+ }
+
+ output_item_new_take_multiple (field, merged, TRUE);
+}
+
+void
mmcli_output_string (MmcF field,
const gchar *str)
{
diff --git a/cli/mmcli-output.h b/cli/mmcli-output.h
index 362230b3..1a8f934a 100644
--- a/cli/mmcli-output.h
+++ b/cli/mmcli-output.h
@@ -341,6 +341,8 @@ void mmcli_output_string_array (MmcF field,
void mmcli_output_string_array_take (MmcF field,
gchar **strv,
gboolean multiline);
+void mmcli_output_string_array_multiline_take (MmcF field,
+ gchar **strv);
void mmcli_output_string_take_typed (MmcF field,
gchar *value,
const gchar *type);