diff src/misc.c @ 1022:9962b24b6b43

Move miscellaneous functions to their own files (new misc.[ch]).
author zas_
date Sun, 31 Aug 2008 10:51:41 +0000
parents
children 650c02c0c8ff
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/misc.c	Sun Aug 31 10:51:41 2008 +0000
@@ -0,0 +1,110 @@
+/*
+ * Geeqie
+ * Copyright (C) 2008 The Geeqie Team
+ *
+ * Authors: Vladimir Nadvornik / Laurent Monin
+ *
+ * This software is released under the GNU General Public License (GNU GPL).
+ * Please read the included file COPYING for more information.
+ * This software comes with no warranty of any kind, use at your own risk!
+ */
+
+#include "main.h"
+#include "misc.h"
+
+gdouble get_zoom_increment(void)
+{
+	return ((options->image.zoom_increment != 0) ? (gdouble)options->image.zoom_increment / 10.0 : 1.0);
+}
+
+gchar *utf8_validate_or_convert(const gchar *text)
+{
+	gint len;
+
+	if (!text) return NULL;
+	
+	len = strlen(text);
+	if (!g_utf8_validate(text, len, NULL))
+		return g_convert(text, len, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
+
+	return g_strdup(text);
+}
+
+gint utf8_compare(const gchar *s1, const gchar *s2, gboolean case_sensitive)
+{
+	gchar *s1_key, *s2_key;
+	gchar *s1_t, *s2_t;
+	gint ret;
+
+	g_assert(g_utf8_validate(s1, -1, NULL));
+	g_assert(g_utf8_validate(s2, -1, NULL));
+
+	if (!case_sensitive)
+		{
+		s1_t = g_utf8_casefold(s1, -1);
+		s2_t = g_utf8_casefold(s2, -1);
+		}
+
+	s1_key = g_utf8_collate_key(s1_t, -1);
+	s2_key = g_utf8_collate_key(s2_t, -1);
+
+	ret = strcmp(s1_key, s2_key);
+
+	g_free(s1_key);
+	g_free(s2_key);
+
+	if (!case_sensitive)
+		{
+		g_free(s1_t);
+		g_free(s2_t);
+		}
+
+	return ret;
+}
+
+/* Borrowed from gtkfilesystemunix.c */
+gchar *expand_tilde(const gchar *filename)
+{
+#ifndef G_OS_UNIX
+	return g_strdup(filename);
+#else
+	const gchar *notilde;
+	const gchar *slash;
+	const gchar *home;
+
+	if (filename[0] != '~')
+		return g_strdup(filename);
+
+	notilde = filename + 1;
+	slash = strchr(notilde, G_DIR_SEPARATOR);
+	if (slash == notilde || !*notilde)
+		{
+		home = g_get_home_dir();
+		if (!home)
+			return g_strdup(filename);
+		}
+	else
+		{
+		gchar *username;
+		struct passwd *passwd;
+
+		if (slash)
+			username = g_strndup(notilde, slash - notilde);
+		else
+			username = g_strdup(notilde);
+
+		passwd = getpwnam(username);
+		g_free(username);
+
+		if (!passwd)
+			return g_strdup(filename);
+
+		home = passwd->pw_dir;
+		}
+
+	if (slash)
+		return g_build_filename(home, G_DIR_SEPARATOR_S, slash + 1, NULL);
+	else
+		return g_build_filename(home, G_DIR_SEPARATOR_S, NULL);
+#endif
+}