[glib] W32: use 64-bit stat for localfile size calculation
- From: Руслан Ижбулатов <ruslanizhb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] W32: use 64-bit stat for localfile size calculation
- Date: Thu, 16 Apr 2015 20:01:10 +0000 (UTC)
commit 6a2543444cf596023efd4d8f185088ecdbc0d507
Author: Руслан Ижбулатов <lrn1986 gmail com>
Date: Mon Aug 4 12:39:08 2014 +0000
W32: use 64-bit stat for localfile size calculation
https://bugzilla.gnome.org/show_bug.cgi?id=728669
gio/glocalfile.c | 32 ++++++++++++++++++++++++++++++--
1 files changed, 30 insertions(+), 2 deletions(-)
---
diff --git a/gio/glocalfile.c b/gio/glocalfile.c
index eed3a99..327fe6f 100644
--- a/gio/glocalfile.c
+++ b/gio/glocalfile.c
@@ -2660,10 +2660,38 @@ g_local_file_measure_size_of_file (gint parent_fd,
#if defined (AT_FDCWD)
if (fstatat (parent_fd, name->data, &buf, AT_SYMLINK_NOFOLLOW) != 0)
-#else
+ return g_local_file_measure_size_error (state->flags, errno, name, error);
+#elif defined (HAVE_LSTAT) || !defined (G_OS_WIN32)
if (g_lstat (name->data, &buf) != 0)
-#endif
return g_local_file_measure_size_error (state->flags, errno, name, error);
+#else
+ {
+ const char *filename = (const gchar *) name->data;
+ wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+ int retval;
+ int save_errno;
+ int len;
+
+ if (wfilename == NULL)
+ return g_local_file_measure_size_error (state->flags, errno, name, error);
+
+ len = wcslen (wfilename);
+ while (len > 0 && G_IS_DIR_SEPARATOR (wfilename[len-1]))
+ len--;
+ if (len > 0 &&
+ (!g_path_is_absolute (filename) || len > g_path_skip_root (filename) - filename))
+ wfilename[len] = '\0';
+
+ retval = _wstat32i64 (wfilename, &buf);
+ save_errno = errno;
+
+ g_free (wfilename);
+
+ errno = save_errno;
+ if (retval != 0)
+ return g_local_file_measure_size_error (state->flags, errno, name, error);
+ }
+#endif
if (name->next)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]