mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-12 15:36:17 +01:00
glib/gstdio.h glib/gstdio.c Wrap also access() and chmod(). (#169623)
2005-04-08 Tor Lillqvist <tml@novell.com> * glib/gstdio.h * glib/gstdio.c * glib/glib.symbols (g_access, g_chmod): Wrap also access() and chmod(). (#169623)
This commit is contained in:
parent
5a88294fc3
commit
9099d64b3a
@ -1,3 +1,10 @@
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
* glib/gstdio.h
|
||||
* glib/gstdio.c
|
||||
* glib/glib.symbols (g_access, g_chmod): Wrap also access() and
|
||||
chmod(). (#169623)
|
||||
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
Improve g_get_system_data_dirs() on Windows. A library that calls
|
||||
|
@ -1,3 +1,10 @@
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
* glib/gstdio.h
|
||||
* glib/gstdio.c
|
||||
* glib/glib.symbols (g_access, g_chmod): Wrap also access() and
|
||||
chmod(). (#169623)
|
||||
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
Improve g_get_system_data_dirs() on Windows. A library that calls
|
||||
|
@ -1,3 +1,10 @@
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
* glib/gstdio.h
|
||||
* glib/gstdio.c
|
||||
* glib/glib.symbols (g_access, g_chmod): Wrap also access() and
|
||||
chmod(). (#169623)
|
||||
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
Improve g_get_system_data_dirs() on Windows. A library that calls
|
||||
|
@ -1,3 +1,10 @@
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
* glib/gstdio.h
|
||||
* glib/gstdio.c
|
||||
* glib/glib.symbols (g_access, g_chmod): Wrap also access() and
|
||||
chmod(). (#169623)
|
||||
|
||||
2005-04-08 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
Improve g_get_system_data_dirs() on Windows. A library that calls
|
||||
|
@ -849,6 +849,8 @@ g_spawn_sync
|
||||
#if IN_FILE(__G_STDIO_C__)
|
||||
#if !defined(G_OS_UNIX) || defined(G_STDIO_NO_WRAP_ON_UNIX)
|
||||
/* gstdio wrappers */
|
||||
g_access
|
||||
g_chmod
|
||||
g_open
|
||||
g_rename
|
||||
g_mkdir
|
||||
|
139
glib/gstdio.c
139
glib/gstdio.c
@ -48,6 +48,145 @@
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* g_access:
|
||||
* @filename: a pathname in the GLib file name encoding
|
||||
* @mode: as in access()
|
||||
*
|
||||
* A wrapper for the POSIX access() function. This function is used to
|
||||
* test a pathname for one or several of read, write or execute
|
||||
* permissions, or just existence. On Windows, the underlying access()
|
||||
* function in the C library only checks the READONLY attribute, and
|
||||
* does not look at the ACL at all. Software that needs to handle file
|
||||
* permisssions on Windows more exactly should use the Win32 API.
|
||||
*
|
||||
* See the C library manual for more details about access().
|
||||
*
|
||||
* Returns: zero if the pathname refers to an existing file system
|
||||
* object that has all the tested permissions, or -1 otherwise or on
|
||||
* error.
|
||||
*
|
||||
* Since: 2.7
|
||||
*/
|
||||
int
|
||||
g_access (const gchar *filename,
|
||||
int mode)
|
||||
{
|
||||
#ifdef G_OS_WIN32
|
||||
if (G_WIN32_HAVE_WIDECHAR_API ())
|
||||
{
|
||||
wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
|
||||
int retval;
|
||||
int save_errno;
|
||||
|
||||
if (wfilename == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = _waccess (wfilename, mode);
|
||||
save_errno = errno;
|
||||
|
||||
g_free (wfilename);
|
||||
|
||||
errno = save_errno;
|
||||
return retval;
|
||||
}
|
||||
else
|
||||
{
|
||||
gchar *cp_filename = g_locale_from_utf8 (filename, -1, NULL, NULL, NULL);
|
||||
int retval;
|
||||
int save_errno;
|
||||
|
||||
if (cp_filename == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = access (cp_filename, mode);
|
||||
save_errno = errno;
|
||||
|
||||
g_free (cp_filename);
|
||||
|
||||
errno = save_errno;
|
||||
return retval;
|
||||
}
|
||||
#else
|
||||
return access (filename, mode);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* g_chmod:
|
||||
* @filename: a pathname in the GLib file name encoding
|
||||
* @mode: as in chmod()
|
||||
*
|
||||
* A wrapper for the POSIX chmod() function. The chmod() function is
|
||||
* used to set the permissions of a file system object. Note that on
|
||||
* Windows the file protection mechanism is not at all POSIX-like, and
|
||||
* the underlying chmod() function in the C library just sets or
|
||||
* clears the READONLY attribute. It does not touch any ACL. Software
|
||||
* that needs to manage file permisssions on Windows exactly should
|
||||
* use the Win32 API.
|
||||
*
|
||||
* See the C library manual for more details about chmod().
|
||||
*
|
||||
* Returns: zero if the operation succeedd, -1 on error.
|
||||
*
|
||||
* Since: 2.7
|
||||
*/
|
||||
int
|
||||
g_chmod (const gchar *filename,
|
||||
int mode)
|
||||
{
|
||||
#ifdef G_OS_WIN32
|
||||
if (G_WIN32_HAVE_WIDECHAR_API ())
|
||||
{
|
||||
wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
|
||||
int retval;
|
||||
int save_errno;
|
||||
|
||||
if (wfilename == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = _wchmod (wfilename, mode);
|
||||
save_errno = errno;
|
||||
|
||||
g_free (wfilename);
|
||||
|
||||
errno = save_errno;
|
||||
return retval;
|
||||
}
|
||||
else
|
||||
{
|
||||
gchar *cp_filename = g_locale_from_utf8 (filename, -1, NULL, NULL, NULL);
|
||||
int retval;
|
||||
int save_errno;
|
||||
|
||||
if (cp_filename == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = chmod (cp_filename, mode);
|
||||
save_errno = errno;
|
||||
|
||||
g_free (cp_filename);
|
||||
|
||||
errno = save_errno;
|
||||
return retval;
|
||||
}
|
||||
#else
|
||||
return chmod (filename, mode);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* g_open:
|
||||
* @filename: a pathname in the GLib file name encoding
|
||||
|
@ -31,6 +31,8 @@
|
||||
* format mismatches, especially with large file interfaces.
|
||||
*/
|
||||
|
||||
#define g_access access
|
||||
#define g_chmod chmod
|
||||
#define g_open open
|
||||
#define g_rename rename
|
||||
#define g_mkdir mkdir
|
||||
@ -54,6 +56,12 @@
|
||||
* API.
|
||||
*/
|
||||
|
||||
int g_access (const gchar *filename,
|
||||
int mode);
|
||||
|
||||
int g_chmod (const gchar *filename,
|
||||
int mode);
|
||||
|
||||
int g_open (const gchar *filename,
|
||||
int flags,
|
||||
int mode);
|
||||
|
Loading…
Reference in New Issue
Block a user