Mercurial > geeqie
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 +}