@@ -238,9 +238,11 @@ JsonNode *remmina_stats_get_os_info()
238238 gchar * kernel_arch ;
239239 gchar * id ;
240240 gchar * description ;
241- gchar * etc_release ;
241+ GHashTable * etc_release ;
242242 gchar * release ;
243243 gchar * codename ;
244+ GHashTableIter iter ;
245+ gchar * key , * value ;
244246
245247 /** @warning this function is usually executed on a dedicated thread,
246248 * not on the main thread */
@@ -249,77 +251,83 @@ JsonNode *remmina_stats_get_os_info()
249251 json_builder_begin_object (b );
250252
251253 json_builder_set_member_name (b , "kernel_name" );
252-
253254 kernel_name = g_strdup_printf ("%s" , remmina_utils_get_kernel_name ());
254255 if (!kernel_name || kernel_name [0 ] == '\0' ) {
255- g_free (kernel_name );
256- kernel_name = g_strdup ("n/a" );
256+ json_builder_add_null_value (b );
257+ }else {
258+ json_builder_add_string_value (b , kernel_name );
257259 }
258- json_builder_add_string_value (b , kernel_name );
259260 g_free (kernel_name );
260261
261262 json_builder_set_member_name (b , "kernel_release" );
262263 kernel_release = g_strdup_printf ("%s" , remmina_utils_get_kernel_release ());
263264 if (!kernel_release || kernel_release [0 ] == '\0' ) {
264- g_free (kernel_release );
265- kernel_release = g_strdup ("n/a" );
265+ json_builder_add_null_value (b );
266+ }else {
267+ json_builder_add_string_value (b , kernel_release );
266268 }
267- json_builder_add_string_value (b , kernel_release );
268269 g_free (kernel_release );
269270
270271 json_builder_set_member_name (b , "kernel_arch" );
271272 kernel_arch = g_strdup_printf ("%s" , remmina_utils_get_kernel_arch ());
272273 if (!kernel_arch || kernel_arch [0 ] == '\0' ) {
273- g_free (kernel_arch );
274- kernel_arch = g_strdup ("n/a" );
274+ json_builder_add_null_value (b );
275+ }else {
276+ json_builder_add_string_value (b , kernel_arch );
275277 }
276- json_builder_add_string_value (b , kernel_arch );
277278 g_free (kernel_arch );
278279
280+ json_builder_set_member_name (b , "lsb_distributor" );
279281 id = remmina_utils_get_lsb_id ();
280282 if (!id || id [0 ] == '\0' ) {
281- g_free (id );
282- id = g_strdup ("n/a" );
283+ json_builder_add_null_value (b );
284+ }else {
285+ json_builder_add_string_value (b , id );
283286 }
284- json_builder_set_member_name (b , "lsb_distributor" );
285- json_builder_add_string_value (b , id );
286287 g_free (id );
287288
289+ json_builder_set_member_name (b , "lsb_distro_description" );
288290 description = remmina_utils_get_lsb_description ();
289291 if (!description || description [0 ] == '\0' ) {
290- g_free (description );
291- description = g_strdup ("n/a" );
292+ json_builder_add_null_value (b );
293+ }else {
294+ json_builder_add_string_value (b , description );
292295 }
293- json_builder_set_member_name (b , "lsb_distro_description" );
294- json_builder_add_string_value (b , description );
295296 g_free (description );
296297
298+ json_builder_set_member_name (b , "lsb_distro_release" );
297299 release = remmina_utils_get_lsb_release ();
298300 if (!release || release [0 ] == '\0' ) {
299- g_free (release );
300- release = g_strdup ("n/a" );
301+ json_builder_add_null_value (b );
302+ }else {
303+ json_builder_add_string_value (b , release );
301304 }
302- json_builder_set_member_name (b , "lsb_distro_release" );
303- json_builder_add_string_value (b , release );
304305 g_free (release );
305306
307+ json_builder_set_member_name (b , "lsb_distro_codename" );
306308 codename = remmina_utils_get_lsb_codename ();
307309 if (!codename || codename [0 ] == '\0' ) {
308- g_free (codename );
309- codename = g_strdup ("n/a" );
310+ json_builder_add_null_value (b );
311+ }else {
312+ json_builder_add_string_value (b , codename );
310313 }
311- json_builder_set_member_name (b , "lsb_distro_codename" );
312- json_builder_add_string_value (b , codename );
313314 g_free (codename );
314315
315316 etc_release = remmina_utils_get_etc_release ();
316- if (!etc_release || etc_release [0 ] == '\0' ) {
317- g_free (etc_release );
318- etc_release = g_strdup ("n/a" );
319- }
320317 json_builder_set_member_name (b , "etc_release" );
321- json_builder_add_string_value (b , etc_release );
322- g_free (etc_release );
318+ if (etc_release ) {
319+ json_builder_begin_object (b );
320+ g_hash_table_iter_init (& iter , etc_release );
321+ while (g_hash_table_iter_next (& iter , (gpointer )& key , (gpointer )& value )) {
322+ json_builder_set_member_name (b , key );
323+ json_builder_add_string_value (b , value );
324+ }
325+ json_builder_end_object (b );
326+ g_hash_table_remove_all (etc_release );
327+ g_hash_table_unref (etc_release );
328+ }else {
329+ json_builder_add_null_value (b );
330+ }
323331
324332 /** @todo Add other means to identify a release name/description
325333 * to cover as much OS as possible, like /etc/issue
0 commit comments