diff options
author | Tor Lillqvist <tml@novell.com> | 2005-11-26 11:51:16 +0800 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2005-11-26 11:51:16 +0800 |
commit | 18c08853768cc4cae9125aaf185268b90a0f23cf (patch) | |
tree | 611bfb0f360ffa8f3100d038d97df56c628055a1 /e-util/e-util.c | |
parent | 9fa1e996bc1a3249c0d5ee59752f7117a490d40d (diff) | |
download | gsoc2013-evolution-18c08853768cc4cae9125aaf185268b90a0f23cf.tar.gz gsoc2013-evolution-18c08853768cc4cae9125aaf185268b90a0f23cf.tar.zst gsoc2013-evolution-18c08853768cc4cae9125aaf185268b90a0f23cf.zip |
Use g_get_tmp_dir() instead of hardcoding /tmp.
2005-11-26 Tor Lillqvist <tml@novell.com>
* 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
Diffstat (limited to 'e-util/e-util.c')
-rw-r--r-- | e-util/e-util.c | 59 |
1 files changed, 57 insertions, 2 deletions
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 <gtk/gtk.h> #include <libgnome/gnome-util.h> +#ifdef G_OS_WIN32 +#include <windows.h> +#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<p) *ts++ = '_'; } @@ -1252,3 +1277,33 @@ e_gettext (const char *msgid) return dgettext (E_I18N_DOMAIN, msgid); } +#ifdef G_OS_WIN32 + +int +fsync (int fd) +{ + int handle; + struct stat st; + + handle = _get_osfhandle (fd); + if (handle == -1) + return -1; + + fstat (fd, &st); + + /* FlushFileBuffers() fails if called on a handle to the + * console output. As we cannot know whether fd refers to the + * console output or not, punt, and call FlushFileBuffers() + * only for regular files and pipes. + */ + if (!(S_ISREG (st.st_mode) || S_ISFIFO (st.st_mode))) + return 0; + + if (FlushFileBuffers ((HANDLE) handle)) + return 0; + + errno = EIO; + return -1; +} + +#endif |