1 /* gstdio.h - GFilename wrappers for C library functions 2 * 3 * Copyright 2004 Tor Lillqvist 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with this library; if not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #ifndef __G_STDIO_H__ 20 #define __G_STDIO_H__ 21 22 #include <glib/gprintf.h> 23 24 #include <sys/stat.h> 25 26 G_BEGIN_DECLS 27 28 #if (defined (__MINGW64_VERSION_MAJOR) || defined (_MSC_VER)) && !defined(_WIN64) 29 30 /* Make it clear that we mean the struct with 32-bit st_size and 31 * 32-bit st_*time fields as that is how the 32-bit GLib DLL normally 32 * has been compiled. If you get a compiler warning when calling 33 * g_stat(), do take it seriously and make sure that the type of 34 * struct stat the code in GLib fills in matches the struct the type 35 * of struct stat you pass to g_stat(). To avoid hassle, to get file 36 * attributes just use the GIO API instead which doesn't use struct 37 * stat. 38 * 39 * Sure, it would be nicer to use a struct with 64-bit st_size and 40 * 64-bit st_*time fields, but changing that now would break ABI. And 41 * in MinGW, a plain "struct stat" is the one with 32-bit st_size and 42 * st_*time fields. 43 */ 44 45 typedef struct _stat32 GStatBuf; 46 47 #elif defined(__MINGW64_VERSION_MAJOR) && defined(_WIN64) 48 49 typedef struct _stat64 GStatBuf; 50 51 #else 52 53 typedef struct stat GStatBuf; 54 55 #endif 56 57 #if defined(G_OS_UNIX) && !defined(G_STDIO_WRAP_ON_UNIX) 58 59 /* Just pass on to the system functions, so there's no potential for data 60 * format mismatches, especially with large file interfaces. 61 * A few functions can't be handled in this way, since they are not defined 62 * in a portable system header that we could include here. 63 * 64 * #G_STDIO_WRAP_ON_UNIX is not public API and its behaviour is not guaranteed 65 * in future. 66 */ 67 68 #ifndef __GTK_DOC_IGNORE__ 69 #define g_chmod chmod 70 #define g_open open 71 #define g_creat creat 72 #define g_rename rename 73 #define g_mkdir mkdir 74 #define g_stat stat 75 #define g_lstat lstat 76 #define g_remove remove 77 #define g_fopen fopen 78 #define g_freopen freopen 79 #define g_utime utime 80 #endif 81 82 GLIB_AVAILABLE_IN_ALL 83 int g_access (const gchar *filename, 84 int mode); 85 86 GLIB_AVAILABLE_IN_ALL 87 int g_chdir (const gchar *path); 88 89 GLIB_AVAILABLE_IN_ALL 90 int g_unlink (const gchar *filename); 91 92 GLIB_AVAILABLE_IN_ALL 93 int g_rmdir (const gchar *filename); 94 95 #else /* ! G_OS_UNIX */ 96 97 /* Wrappers for C library functions that take pathname arguments. On 98 * Unix, the pathname is a file name as it literally is in the file 99 * system. On well-maintained systems with consistent users who know 100 * what they are doing and no exchange of files with others this would 101 * be a well-defined encoding, preferably UTF-8. On Windows, the 102 * pathname is always in UTF-8, even if that is not the on-disk 103 * encoding, and not the encoding accepted by the C library or Win32 104 * API. 105 */ 106 107 GLIB_AVAILABLE_IN_ALL 108 int g_access (const gchar *filename, 109 int mode); 110 111 GLIB_AVAILABLE_IN_ALL 112 int g_chmod (const gchar *filename, 113 int mode); 114 115 GLIB_AVAILABLE_IN_ALL 116 int g_open (const gchar *filename, 117 int flags, 118 int mode); 119 120 GLIB_AVAILABLE_IN_ALL 121 int g_creat (const gchar *filename, 122 int mode); 123 124 GLIB_AVAILABLE_IN_ALL 125 int g_rename (const gchar *oldfilename, 126 const gchar *newfilename); 127 128 GLIB_AVAILABLE_IN_ALL 129 int g_mkdir (const gchar *filename, 130 int mode); 131 132 GLIB_AVAILABLE_IN_ALL 133 int g_chdir (const gchar *path); 134 135 GLIB_AVAILABLE_IN_ALL 136 int g_stat (const gchar *filename, 137 GStatBuf *buf); 138 139 GLIB_AVAILABLE_IN_ALL 140 int g_lstat (const gchar *filename, 141 GStatBuf *buf); 142 143 GLIB_AVAILABLE_IN_ALL 144 int g_unlink (const gchar *filename); 145 146 GLIB_AVAILABLE_IN_ALL 147 int g_remove (const gchar *filename); 148 149 GLIB_AVAILABLE_IN_ALL 150 int g_rmdir (const gchar *filename); 151 152 GLIB_AVAILABLE_IN_ALL 153 FILE *g_fopen (const gchar *filename, 154 const gchar *mode); 155 156 GLIB_AVAILABLE_IN_ALL 157 FILE *g_freopen (const gchar *filename, 158 const gchar *mode, 159 FILE *stream); 160 161 struct utimbuf; /* Don't need the real definition of struct utimbuf when just 162 * including this header. 163 */ 164 165 GLIB_AVAILABLE_IN_ALL 166 int g_utime (const gchar *filename, 167 struct utimbuf *utb); 168 169 #endif /* G_OS_UNIX */ 170 171 GLIB_AVAILABLE_IN_2_36 172 gboolean g_close (gint fd, 173 GError **error); 174 175 G_END_DECLS 176 177 #endif /* __G_STDIO_H__ */ 178