From 18c08853768cc4cae9125aaf185268b90a0f23cf Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Sat, 26 Nov 2005 03:51:16 +0000 Subject: Use g_get_tmp_dir() instead of hardcoding /tmp. 2005-11-26 Tor Lillqvist * e-menu.c (emph_construct_menu): Use g_get_tmp_dir() instead of hardcoding /tmp. * e-util.c (e_strstrcase): Use g_ascii_strncasecmp() instead of the deprecated g_strncasecmp(). What kinds of strings this function is supposed to be used on (UTF-8 or some random single- or multi-byte encoding) is anybody's guess. This function isn't used in Evolution and should probably go away, though. And this is one of the files that have a partially duplicated copy in e-d-s/libedataserver, too, so doubly so. (e_filename_make_safe): Mark more bytes as unsafe on Win32. Add comments. This function is really under-specified and weird, one wonders whether it really does what the author thought it should do. (fsync): Add Win32 implementation of fsync(). * e-xml-utils.c (e_xml_get_bool_prop_by_name_with_default): Use g_ascii_strcasecmp() instead of the deprecated g_strcasecmp(), especially as we are comparing to literal ASCII strings. svn path=/trunk/; revision=30684 --- e-util/e-util.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) (limited to 'e-util/e-util.c') diff --git a/e-util/e-util.c b/e-util/e-util.c index bf4fe6292b..f1444a2a64 100644 --- a/e-util/e-util.c +++ b/e-util/e-util.c @@ -40,6 +40,10 @@ #include #include +#ifdef G_OS_WIN32 +#include +#endif + #include "e-i18n.h" #include "e-util.h" #include "e-util-private.h" @@ -432,18 +436,35 @@ e_strstrcase (const gchar *haystack, const gchar *needle) return (gchar *) haystack; for (ptr = haystack; *(ptr + len - 1) != '\0'; ptr++) - if (!g_strncasecmp (ptr, needle, len)) + if (!g_ascii_strncasecmp (ptr, needle, len)) return (gchar *) ptr; return NULL; } /* This only makes a filename safe for usage as a filename. It still may have shell meta-characters in it. */ + +/* This code is rather misguided and mostly pointless, but can't be + * changed because of backward compatibility, I guess. + * + * It replaces some perfectly safe characters like '%' with an + * underscore. (Recall that on Unix, the only bytes not allowed in a + * file name component are '\0' and '/'.) On the other hand, the UTF-8 + * for a printable non-ASCII Unicode character (that thus consists of + * several very nonprintable non-ASCII bytes) is let through as + * such. But those bytes are of course also allowed in filenames, so + * it doesn't matter as such... + */ void e_filename_make_safe (gchar *string) { gchar *p, *ts; gunichar c; +#ifdef G_OS_WIN32 + const char *unsafe_chars = " /'\"`&();|<>$%{}!\\:*?"; +#else + const char *unsafe_chars = " /'\"`&();|<>$%{}!"; +#endif g_return_if_fail (string != NULL); p = string; @@ -452,7 +473,11 @@ e_filename_make_safe (gchar *string) c = g_utf8_get_char (p); ts = p; p = g_utf8_next_char (p); - if (!g_unichar_isprint(c) || ( c < 0xff && strchr (" /'\"`&();|<>$%{}!", c&0xff ))) { + /* I wonder what this code is supposed to actually + * achieve, and whether it does that as currently + * written? + */ + if (!g_unichar_isprint(c) || ( c < 0xff && strchr (unsafe_chars, c&0xff ))) { while (ts