diff options
Diffstat (limited to 'libsylph/utils.c')
-rw-r--r-- | libsylph/utils.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/libsylph/utils.c b/libsylph/utils.c index 803892c5..663d121f 100644 --- a/libsylph/utils.c +++ b/libsylph/utils.c @@ -3156,9 +3156,32 @@ gint change_file_mode_rw(FILE *fp, const gchar *file) DWORD attr; BOOL retval; - attr = GetFileAttributes(file); - retval = SetFileAttributes - (file, attr & ~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN)); + if (G_WIN32_HAVE_WIDECHAR_API()) { + wchar_t *wpath; + + wpath = g_utf8_to_utf16(file, -1, NULL, NULL, NULL); + if (wpath == NULL) + return -1; + + attr = GetFileAttributesW(wpath); + retval = SetFileAttributesW + (wpath, attr & ~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN)); + + g_free(wpath); + } else { + gchar *cp_path; + + cp_path = g_locale_from_utf8(file, -1, NULL, NULL, NULL); + if (cp_path == NULL) + return -1; + + attr = GetFileAttributesA(cp_path); + retval = SetFileAttributesA + (cp_path, attr & ~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN)); + + g_free(cp_path); + } + if (retval) return 0; else |