diff options
author | Teemu Ikonen <tpikonen@mailbox.org> | 2021-08-26 17:02:10 +0300 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-09-01 15:50:38 +0000 |
commit | fa19b2b9b1412d3eeb515afe41c55ac414acc982 (patch) | |
tree | 32e2894d8849893a1bdc414ec6719e5d70a9b718 /cli | |
parent | 7177eeea990f92dacebb967a5d418f3a372e5951 (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.c | 2 | ||||
-rw-r--r-- | cli/mmcli-output.c | 36 | ||||
-rw-r--r-- | cli/mmcli-output.h | 2 |
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); |