comparison 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
comparison
equal deleted inserted replaced
1021:988995f6b1cf 1022:9962b24b6b43
1 /*
2 * Geeqie
3 * Copyright (C) 2008 The Geeqie Team
4 *
5 * Authors: Vladimir Nadvornik / Laurent Monin
6 *
7 * This software is released under the GNU General Public License (GNU GPL).
8 * Please read the included file COPYING for more information.
9 * This software comes with no warranty of any kind, use at your own risk!
10 */
11
12 #include "main.h"
13 #include "misc.h"
14
15 gdouble get_zoom_increment(void)
16 {
17 return ((options->image.zoom_increment != 0) ? (gdouble)options->image.zoom_increment / 10.0 : 1.0);
18 }
19
20 gchar *utf8_validate_or_convert(const gchar *text)
21 {
22 gint len;
23
24 if (!text) return NULL;
25
26 len = strlen(text);
27 if (!g_utf8_validate(text, len, NULL))
28 return g_convert(text, len, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
29
30 return g_strdup(text);
31 }
32
33 gint utf8_compare(const gchar *s1, const gchar *s2, gboolean case_sensitive)
34 {
35 gchar *s1_key, *s2_key;
36 gchar *s1_t, *s2_t;
37 gint ret;
38
39 g_assert(g_utf8_validate(s1, -1, NULL));
40 g_assert(g_utf8_validate(s2, -1, NULL));
41
42 if (!case_sensitive)
43 {
44 s1_t = g_utf8_casefold(s1, -1);
45 s2_t = g_utf8_casefold(s2, -1);
46 }
47
48 s1_key = g_utf8_collate_key(s1_t, -1);
49 s2_key = g_utf8_collate_key(s2_t, -1);
50
51 ret = strcmp(s1_key, s2_key);
52
53 g_free(s1_key);
54 g_free(s2_key);
55
56 if (!case_sensitive)
57 {
58 g_free(s1_t);
59 g_free(s2_t);
60 }
61
62 return ret;
63 }
64
65 /* Borrowed from gtkfilesystemunix.c */
66 gchar *expand_tilde(const gchar *filename)
67 {
68 #ifndef G_OS_UNIX
69 return g_strdup(filename);
70 #else
71 const gchar *notilde;
72 const gchar *slash;
73 const gchar *home;
74
75 if (filename[0] != '~')
76 return g_strdup(filename);
77
78 notilde = filename + 1;
79 slash = strchr(notilde, G_DIR_SEPARATOR);
80 if (slash == notilde || !*notilde)
81 {
82 home = g_get_home_dir();
83 if (!home)
84 return g_strdup(filename);
85 }
86 else
87 {
88 gchar *username;
89 struct passwd *passwd;
90
91 if (slash)
92 username = g_strndup(notilde, slash - notilde);
93 else
94 username = g_strdup(notilde);
95
96 passwd = getpwnam(username);
97 g_free(username);
98
99 if (!passwd)
100 return g_strdup(filename);
101
102 home = passwd->pw_dir;
103 }
104
105 if (slash)
106 return g_build_filename(home, G_DIR_SEPARATOR_S, slash + 1, NULL);
107 else
108 return g_build_filename(home, G_DIR_SEPARATOR_S, NULL);
109 #endif
110 }