[geany/geany] ad54ee: Merge pull request #2618 from codebrainz/os-info-improvements

Colomban Wendling git-noreply at xxxxx
Sun Oct 25 09:25:26 UTC 2020


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Sun, 25 Oct 2020 09:25:26 UTC
Commit:      ad54ee5999d41e635f46a131b62067bb145c6050
             https://github.com/geany/geany/commit/ad54ee5999d41e635f46a131b62067bb145c6050

Log Message:
-----------
Merge pull request #2618 from codebrainz/os-info-improvements

OS Info Improvements


Modified Paths:
--------------
    src/libmain.c
    src/utils.c
    src/utils.h

Modified: src/libmain.c
16 lines changed, 7 insertions(+), 9 deletions(-)
===================================================================
@@ -1068,6 +1068,7 @@ gint main_lib(gint argc, gchar **argv)
 	gint config_dir_result;
 	const gchar *locale;
 	gchar *utf8_configdir;
+	gchar *os_info;
 
 #if ! GLIB_CHECK_VERSION(2, 36, 0)
 	g_type_init();
@@ -1161,15 +1162,12 @@ gint main_lib(gint argc, gchar **argv)
 		gtk_major_version, gtk_minor_version, gtk_micro_version,
 		glib_major_version, glib_minor_version, glib_micro_version);
 
-#if GLIB_CHECK_VERSION(2, 64, 0)
-	gchar *os_prettyname = g_get_os_info(G_OS_INFO_KEY_PRETTY_NAME);
-	gchar *os_codename = g_get_os_info(G_OS_INFO_KEY_VERSION_CODENAME);
-	geany_debug("OS: %s (%s)",
-		os_prettyname ? os_prettyname : "Unknown",
-		os_codename ? os_codename : "Unknown");
-	g_free(os_prettyname);
-	g_free(os_codename);
-#endif
+	os_info = utils_get_os_info_string();
+	if (os_info != NULL)
+	{
+		geany_debug("OS: %s", os_info);
+		g_free(os_info);
+	}
 
 	geany_debug("System data dir: %s", app->datadir);
 	utf8_configdir = utils_get_utf8_from_locale(app->configdir);


Modified: src/utils.c
68 lines changed, 68 insertions(+), 0 deletions(-)
===================================================================
@@ -2406,3 +2406,71 @@ gchar *utils_get_real_path(const gchar *file_name)
 {
 	return tm_get_real_path(file_name);
 }
+
+
+/*
+ * Get a string describing the OS.
+ *
+ * If the OS can be determined, a string which describes the OS will
+ * be returned. If no OS can be determined then `NULL` will be returned.
+ *
+ * @note The format of the returned string is unspecified and is only
+ * meant to provide diagnostic information to the user.
+ *
+ * @return A newly-allocated string containing a description of the
+ * OS if it can be determined or `NULL` if it cannot.
+ *
+ * @since 1.37
+ */
+gchar *utils_get_os_info_string(void)
+{
+	gchar *os_info = NULL;
+
+#if GLIB_CHECK_VERSION(2, 64, 0)
+# if ! defined(__APPLE__)
+	/* on non-macOS operating systems */
+	{
+		GString *os_str;
+		gchar *pretty_name;
+		gchar *code_name;
+
+		pretty_name = g_get_os_info(G_OS_INFO_KEY_PRETTY_NAME);
+		if (pretty_name == NULL)
+			return NULL;
+
+		os_str = g_string_new(pretty_name);
+		g_free(pretty_name);
+
+		code_name = g_get_os_info(G_OS_INFO_KEY_VERSION_CODENAME);
+		if (code_name != NULL)
+		{
+			g_string_append_printf(os_str, " (%s)", code_name);
+			g_free(code_name);
+		}
+
+		os_info = g_string_free(os_str, FALSE);
+	}
+# else
+	/* on macOS, only `G_OS_INFO_KEY_NAME` is supported and returns the
+	 * fixed string `macOS` */
+	os_info = g_get_os_info(G_OS_INFO_KEY_NAME);
+# endif
+#else
+	/* if g_get_os_info() is not available, do it the old-fashioned way */
+# if defined(_WIN64)
+	os_info = g_strdup("Microsoft Windows (64-bit)");
+# elif defined(_WIN32)
+	os_info = g_strdup("Microsoft Windows");
+# elif defined(__APPLE__)
+	os_info = g_strdup("Apple macOS");
+# elif defined(__linux__)
+	os_info = g_strdup("Linux");
+# elif defined(__FreeBSD__)
+	os_info = g_strdup("FreeBSD");
+# elif defined(__ANDROID__)
+	os_info = g_strdup("Android");
+# endif
+#endif
+
+	return os_info;
+}


Modified: src/utils.h
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -332,6 +332,8 @@ const gchar *utils_resource_dir(GeanyResourceDirType type);
 
 void utils_start_new_geany_instance(const gchar *doc_path);
 
+gchar *utils_get_os_info_string(void);
+
 #endif /* GEANY_PRIVATE */
 
 G_END_DECLS



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list