mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 23:16:14 +01:00
Clarify use of struct stat on Windows
This commit is contained in:
parent
5589d2b455
commit
021643cda4
@ -107,6 +107,11 @@
|
|||||||
|
|
||||||
#include "gioalias.h"
|
#include "gioalias.h"
|
||||||
|
|
||||||
|
/* See gstdio.h */
|
||||||
|
#ifndef G_OS_WIN32
|
||||||
|
#define _g_stat_struct stat
|
||||||
|
#endif
|
||||||
|
|
||||||
static void g_local_file_file_iface_init (GFileIface *iface);
|
static void g_local_file_file_iface_init (GFileIface *iface);
|
||||||
|
|
||||||
static GFileAttributeInfoList *local_writable_attributes = NULL;
|
static GFileAttributeInfoList *local_writable_attributes = NULL;
|
||||||
@ -736,7 +741,7 @@ get_mount_info (GFileInfo *fs_info,
|
|||||||
const char *path,
|
const char *path,
|
||||||
GFileAttributeMatcher *matcher)
|
GFileAttributeMatcher *matcher)
|
||||||
{
|
{
|
||||||
struct stat buf;
|
struct _g_stat_struct buf;
|
||||||
gboolean got_info;
|
gboolean got_info;
|
||||||
gpointer info_as_ptr;
|
gpointer info_as_ptr;
|
||||||
guint mount_info;
|
guint mount_info;
|
||||||
@ -1047,7 +1052,7 @@ g_local_file_find_enclosing_mount (GFile *file,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
GLocalFile *local = G_LOCAL_FILE (file);
|
GLocalFile *local = G_LOCAL_FILE (file);
|
||||||
struct stat buf;
|
struct _g_stat_struct buf;
|
||||||
char *mountpoint;
|
char *mountpoint;
|
||||||
GMount *mount;
|
GMount *mount;
|
||||||
|
|
||||||
@ -1093,7 +1098,7 @@ g_local_file_set_display_name (GFile *file,
|
|||||||
{
|
{
|
||||||
GLocalFile *local, *new_local;
|
GLocalFile *local, *new_local;
|
||||||
GFile *new_file, *parent;
|
GFile *new_file, *parent;
|
||||||
struct stat statbuf;
|
struct _g_stat_struct statbuf;
|
||||||
int errsv;
|
int errsv;
|
||||||
|
|
||||||
parent = g_file_get_parent (file);
|
parent = g_file_get_parent (file);
|
||||||
@ -1504,7 +1509,7 @@ get_parent (const char *path,
|
|||||||
dev_t *parent_dev)
|
dev_t *parent_dev)
|
||||||
{
|
{
|
||||||
char *parent, *tmp;
|
char *parent, *tmp;
|
||||||
struct stat parent_stat;
|
struct _g_stat_struct parent_stat;
|
||||||
int num_recursions;
|
int num_recursions;
|
||||||
char *path_copy;
|
char *path_copy;
|
||||||
|
|
||||||
@ -1713,12 +1718,12 @@ _g_local_file_has_trash_dir (const char *dirname, dev_t dir_dev)
|
|||||||
char *topdir, *globaldir, *trashdir, *tmpname;
|
char *topdir, *globaldir, *trashdir, *tmpname;
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
char uid_str[32];
|
char uid_str[32];
|
||||||
struct stat global_stat, trash_stat;
|
struct _g_stat_struct global_stat, trash_stat;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
|
||||||
if (g_once_init_enter (&home_dev_set))
|
if (g_once_init_enter (&home_dev_set))
|
||||||
{
|
{
|
||||||
struct stat home_stat;
|
struct _g_stat_struct home_stat;
|
||||||
|
|
||||||
g_stat (g_get_home_dir (), &home_stat);
|
g_stat (g_get_home_dir (), &home_stat);
|
||||||
home_dev = home_stat.st_dev;
|
home_dev = home_stat.st_dev;
|
||||||
@ -1780,7 +1785,7 @@ g_local_file_trash (GFile *file,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
GLocalFile *local = G_LOCAL_FILE (file);
|
GLocalFile *local = G_LOCAL_FILE (file);
|
||||||
struct stat file_stat, home_stat;
|
struct _g_stat_struct file_stat, home_stat;
|
||||||
const char *homedir;
|
const char *homedir;
|
||||||
char *trashdir, *topdir, *infodir, *filesdir;
|
char *trashdir, *topdir, *infodir, *filesdir;
|
||||||
char *basename, *trashname, *trashfile, *infoname, *infofile;
|
char *basename, *trashname, *trashfile, *infoname, *infofile;
|
||||||
@ -1790,7 +1795,7 @@ g_local_file_trash (GFile *file,
|
|||||||
gboolean is_homedir_trash;
|
gboolean is_homedir_trash;
|
||||||
char delete_time[32];
|
char delete_time[32];
|
||||||
int fd;
|
int fd;
|
||||||
struct stat trash_stat, global_stat;
|
struct _g_stat_struct trash_stat, global_stat;
|
||||||
char *dirname, *globaldir;
|
char *dirname, *globaldir;
|
||||||
|
|
||||||
if (g_lstat (local->filename, &file_stat) != 0)
|
if (g_lstat (local->filename, &file_stat) != 0)
|
||||||
@ -2188,7 +2193,7 @@ g_local_file_move (GFile *source,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
GLocalFile *local_source, *local_destination;
|
GLocalFile *local_source, *local_destination;
|
||||||
struct stat statbuf;
|
struct _g_stat_struct statbuf;
|
||||||
gboolean destination_exist, source_is_dir;
|
gboolean destination_exist, source_is_dir;
|
||||||
char *backup_name;
|
char *backup_name;
|
||||||
int res;
|
int res;
|
||||||
|
@ -96,6 +96,11 @@
|
|||||||
|
|
||||||
#include "gioalias.h"
|
#include "gioalias.h"
|
||||||
|
|
||||||
|
/* See gstdio.h */
|
||||||
|
#ifndef G_OS_WIN32
|
||||||
|
#define _g_stat_struct stat
|
||||||
|
#endif
|
||||||
|
|
||||||
struct ThumbMD5Context {
|
struct ThumbMD5Context {
|
||||||
guint32 buf[4];
|
guint32 buf[4];
|
||||||
guint32 bits[2];
|
guint32 bits[2];
|
||||||
@ -788,10 +793,7 @@ _g_local_file_info_get_parent_info (const char *dir,
|
|||||||
GFileAttributeMatcher *attribute_matcher,
|
GFileAttributeMatcher *attribute_matcher,
|
||||||
GLocalParentFileInfo *parent_info)
|
GLocalParentFileInfo *parent_info)
|
||||||
{
|
{
|
||||||
/* Use plain struct stat for now as long as we only look at the
|
struct _g_stat_struct statbuf;
|
||||||
* S_ISVTX bit which doesn't exist on Win32 anyway.
|
|
||||||
*/
|
|
||||||
struct stat statbuf;
|
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
parent_info->extra_data = NULL;
|
parent_info->extra_data = NULL;
|
||||||
|
@ -51,6 +51,10 @@
|
|||||||
#error Please port this to your operating system
|
#error Please port this to your operating system
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined (_MSC_VER) && !defined(_WIN64)
|
||||||
|
#undef _wstat
|
||||||
|
#define _wstat _wstat32
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_access:
|
* g_access:
|
||||||
@ -442,8 +446,13 @@ g_chdir (const gchar *path)
|
|||||||
* Since: 2.6
|
* Since: 2.6
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
g_stat (const gchar *filename,
|
g_stat (const gchar *filename,
|
||||||
struct stat *buf)
|
#ifdef G_OS_WIN32
|
||||||
|
struct _g_stat_struct *buf
|
||||||
|
#else
|
||||||
|
struct stat *buf
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
|
wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
|
||||||
@ -464,7 +473,7 @@ g_stat (const gchar *filename,
|
|||||||
(!g_path_is_absolute (filename) || len > g_path_skip_root (filename) - filename))
|
(!g_path_is_absolute (filename) || len > g_path_skip_root (filename) - filename))
|
||||||
wfilename[len] = '\0';
|
wfilename[len] = '\0';
|
||||||
|
|
||||||
retval = _wstat (wfilename, (struct _stat *) buf);
|
retval = _wstat (wfilename, buf);
|
||||||
save_errno = errno;
|
save_errno = errno;
|
||||||
|
|
||||||
g_free (wfilename);
|
g_free (wfilename);
|
||||||
@ -496,8 +505,13 @@ g_stat (const gchar *filename,
|
|||||||
* Since: 2.6
|
* Since: 2.6
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
g_lstat (const gchar *filename,
|
g_lstat (const gchar *filename,
|
||||||
struct stat *buf)
|
#ifdef G_OS_WIN32
|
||||||
|
struct _g_stat_struct *buf
|
||||||
|
#else
|
||||||
|
struct stat *buf
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LSTAT
|
#ifdef HAVE_LSTAT
|
||||||
/* This can't be Win32, so don't do the widechar dance. */
|
/* This can't be Win32, so don't do the widechar dance. */
|
||||||
|
@ -89,12 +89,49 @@ int g_mkdir (const gchar *filename,
|
|||||||
|
|
||||||
int g_chdir (const gchar *path);
|
int g_chdir (const gchar *path);
|
||||||
|
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
|
|
||||||
|
/* The _g_stat_struct struct tag is an internal implementation detail
|
||||||
|
* and not part of the public GLib API.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (_MSC_VER) && !defined(_WIN64)
|
||||||
|
|
||||||
|
/* Make it clear that we mean the struct with 32-bit st_size and
|
||||||
|
* 32-bit st_*time fields as that is how the 32-bit GLib DLL normally
|
||||||
|
* has been compiled. If you get a compiler warning when calling
|
||||||
|
* g_stat(), do take it seriously and make sure that the type of
|
||||||
|
* struct stat the code in GLib fills in matches the struct the type
|
||||||
|
* of struct stat you pass to g_stat(). To avoid hassle, just use the
|
||||||
|
* GIO API instead which doesn't use struct stat to get file
|
||||||
|
* attributes, .
|
||||||
|
*/
|
||||||
|
#define _g_stat_struct _stat32
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define _g_stat_struct _stat
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int g_stat (const gchar *filename,
|
||||||
|
struct _g_stat_struct *buf);
|
||||||
|
|
||||||
|
int g_lstat (const gchar *filename,
|
||||||
|
struct _g_stat_struct *buf);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* No _g_stat_struct used on Unix */
|
||||||
|
|
||||||
int g_stat (const gchar *filename,
|
int g_stat (const gchar *filename,
|
||||||
struct stat *buf);
|
struct stat *buf);
|
||||||
|
|
||||||
int g_lstat (const gchar *filename,
|
int g_lstat (const gchar *filename,
|
||||||
struct stat *buf);
|
struct stat *buf);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
int g_unlink (const gchar *filename);
|
int g_unlink (const gchar *filename);
|
||||||
|
|
||||||
int g_remove (const gchar *filename);
|
int g_remove (const gchar *filename);
|
||||||
|
Loading…
Reference in New Issue
Block a user