gfileutils.h 7.68 KB
Newer Older
Havoc Pennington's avatar
Havoc Pennington committed
1
2
3
4
/* gfileutils.h - File utility functions
 *
 *  Copyright 2000 Red Hat, Inc.
 *
5
6
7
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
8
 * version 2.1 of the License, or (at your option) any later version.
Havoc Pennington's avatar
Havoc Pennington committed
9
 *
10
 * This library is distributed in the hope that it will be useful,
Havoc Pennington's avatar
Havoc Pennington committed
11
12
13
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
15
16
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, see <http://www.gnu.org/licenses/>.
Havoc Pennington's avatar
Havoc Pennington committed
17
18
 */

19
20
21
#ifndef __G_FILEUTILS_H__
#define __G_FILEUTILS_H__

22
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
23
24
25
#error "Only <glib.h> can be included directly."
#endif

26
#include <glibconfig.h>
27
#include <glib/gerror.h>
28
29

G_BEGIN_DECLS
Havoc Pennington's avatar
Havoc Pennington committed
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

#define G_FILE_ERROR g_file_error_quark ()

typedef enum
{
  G_FILE_ERROR_EXIST,
  G_FILE_ERROR_ISDIR,
  G_FILE_ERROR_ACCES,
  G_FILE_ERROR_NAMETOOLONG,
  G_FILE_ERROR_NOENT,
  G_FILE_ERROR_NOTDIR,
  G_FILE_ERROR_NXIO,
  G_FILE_ERROR_NODEV,
  G_FILE_ERROR_ROFS,
  G_FILE_ERROR_TXTBSY,
  G_FILE_ERROR_FAULT,
  G_FILE_ERROR_LOOP,
  G_FILE_ERROR_NOSPC,
  G_FILE_ERROR_NOMEM,
  G_FILE_ERROR_MFILE,
  G_FILE_ERROR_NFILE,
  G_FILE_ERROR_BADF,
  G_FILE_ERROR_INVAL,
  G_FILE_ERROR_PIPE,
  G_FILE_ERROR_AGAIN,
  G_FILE_ERROR_INTR,
  G_FILE_ERROR_IO,
  G_FILE_ERROR_PERM,
Matthias Clasen's avatar
Matthias Clasen committed
58
  G_FILE_ERROR_NOSYS,
Havoc Pennington's avatar
Havoc Pennington committed
59
60
61
  G_FILE_ERROR_FAILED
} GFileError;

62
/* For backward-compat reasons, these are synced to an old
Havoc Pennington's avatar
Havoc Pennington committed
63
64
65
66
67
68
69
70
71
 * anonymous enum in libgnome. But don't use that enum
 * in new code.
 */
typedef enum
{
  G_FILE_TEST_IS_REGULAR    = 1 << 0,
  G_FILE_TEST_IS_SYMLINK    = 1 << 1,
  G_FILE_TEST_IS_DIR        = 1 << 2,
  G_FILE_TEST_IS_EXECUTABLE = 1 << 3,
Havoc Pennington's avatar
Added    
Havoc Pennington committed
72
  G_FILE_TEST_EXISTS        = 1 << 4
Havoc Pennington's avatar
Havoc Pennington committed
73
74
} GFileTest;

75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
 * GFileSetContentsFlags:
 * @G_FILE_SET_CONTENTS_NONE: No guarantees about file consistency or durability.
 *    The most dangerous setting, which is slightly faster than other settings.
 * @G_FILE_SET_CONTENTS_CONSISTENT: Guarantee file consistency: after a crash,
 *    either the old version of the file or the new version of the file will be
 *    available, but not a mixture. On Unix systems this equates to an `fsync()`
 *    on the file and use of an atomic `rename()` of the new version of the file
 *    over the old.
 * @G_FILE_SET_CONTENTS_DURABLE: Guarantee file durability: after a crash, the
 *    new version of the file will be available. On Unix systems this equates to
 *    an `fsync()` on the file (if %G_FILE_SET_CONTENTS_CONSISTENT is unset), or
 *    the effects of %G_FILE_SET_CONTENTS_CONSISTENT plus an `fsync()` on the
 *    directory containing the file after calling `rename()`.
 * @G_FILE_SET_CONTENTS_ONLY_EXISTING: Only apply consistency and durability
 *    guarantees if the file already exists. This may speed up file operations
 *    if the file doesn’t currently exist, but may result in a corrupted version
 *    of the new file if the system crashes while writing it.
 *
 * Flags to pass to g_file_set_contents_full() to affect its safety and
 * performance.
 *
 * Since: 2.66
 */
typedef enum
{
  G_FILE_SET_CONTENTS_NONE = 0,
  G_FILE_SET_CONTENTS_CONSISTENT = 1 << 0,
  G_FILE_SET_CONTENTS_DURABLE = 1 << 1,
  G_FILE_SET_CONTENTS_ONLY_EXISTING = 1 << 2
} GFileSetContentsFlags
GLIB_AVAILABLE_ENUMERATOR_IN_2_66;

108
GLIB_AVAILABLE_IN_ALL
Havoc Pennington's avatar
Havoc Pennington committed
109
110
GQuark     g_file_error_quark      (void);
/* So other code can generate a GFileError */
111
GLIB_AVAILABLE_IN_ALL
Havoc Pennington's avatar
Havoc Pennington committed
112
113
GFileError g_file_error_from_errno (gint err_no);

114
GLIB_AVAILABLE_IN_ALL
Havoc Pennington's avatar
Havoc Pennington committed
115
116
gboolean g_file_test         (const gchar  *filename,
                              GFileTest     test);
117
GLIB_AVAILABLE_IN_ALL
Havoc Pennington's avatar
Havoc Pennington committed
118
119
gboolean g_file_get_contents (const gchar  *filename,
                              gchar       **contents,
120
                              gsize        *length,
Havoc Pennington's avatar
Havoc Pennington committed
121
                              GError      **error);
122
GLIB_AVAILABLE_IN_ALL
123
gboolean g_file_set_contents (const gchar *filename,
124
125
126
                              const gchar *contents,
                              gssize         length,
                              GError       **error);
127
128
129
130
131
132
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_2_66
gboolean g_file_set_contents_full (const gchar            *filename,
                                   const gchar            *contents,
                                   gssize                  length,
                                   GFileSetContentsFlags   flags,
133
                                   int                     mode,
134
135
                                   GError                **error);
G_GNUC_END_IGNORE_DEPRECATIONS
136
GLIB_AVAILABLE_IN_ALL
137
gchar   *g_file_read_link    (const gchar  *filename,
138
                              GError      **error);
Havoc Pennington's avatar
Havoc Pennington committed
139

140
/* Wrapper / workalike for mkdtemp() */
141
GLIB_AVAILABLE_IN_2_30
142
gchar   *g_mkdtemp            (gchar        *tmpl);
143
GLIB_AVAILABLE_IN_2_30
144
145
146
gchar   *g_mkdtemp_full       (gchar        *tmpl,
                               gint          mode);

147
/* Wrapper / workalike for mkstemp() */
148
GLIB_AVAILABLE_IN_ALL
149
gint     g_mkstemp            (gchar        *tmpl);
150
GLIB_AVAILABLE_IN_ALL
151
152
153
gint     g_mkstemp_full       (gchar        *tmpl,
                               gint          flags,
                               gint          mode);
154

155
/* Wrappers for g_mkstemp and g_mkdtemp() */
156
GLIB_AVAILABLE_IN_ALL
157
158
159
gint     g_file_open_tmp      (const gchar  *tmpl,
                               gchar       **name_used,
                               GError      **error);
160
GLIB_AVAILABLE_IN_2_30
161
162
gchar   *g_dir_make_tmp       (const gchar  *tmpl,
                               GError      **error);
Havoc Pennington's avatar
Havoc Pennington committed
163

164
GLIB_AVAILABLE_IN_ALL
165
166
167
gchar   *g_build_path         (const gchar *separator,
                               const gchar *first_element,
                               ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
168
GLIB_AVAILABLE_IN_ALL
169
170
gchar   *g_build_pathv        (const gchar  *separator,
                               gchar       **args) G_GNUC_MALLOC;
171

172
GLIB_AVAILABLE_IN_ALL
173
174
gchar   *g_build_filename     (const gchar *first_element,
                               ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
175
GLIB_AVAILABLE_IN_ALL
176
gchar   *g_build_filenamev    (gchar      **args) G_GNUC_MALLOC;
177
178
179
GLIB_AVAILABLE_IN_2_56
gchar   *g_build_filename_valist (const gchar  *first_element,
                                  va_list      *args) G_GNUC_MALLOC;
180

181
GLIB_AVAILABLE_IN_ALL
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
gint     g_mkdir_with_parents (const gchar *pathname,
                               gint         mode);

#ifdef G_OS_WIN32

/* On Win32, the canonical directory separator is the backslash, and
 * the search path separator is the semicolon. Note that also the
 * (forward) slash works as directory separator.
 */
#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/')

#else  /* !G_OS_WIN32 */

#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)

#endif /* !G_OS_WIN32 */

199
GLIB_AVAILABLE_IN_ALL
200
gboolean     g_path_is_absolute (const gchar *file_name);
201
GLIB_AVAILABLE_IN_ALL
202
const gchar *g_path_skip_root   (const gchar *file_name);
203

204
205
GLIB_DEPRECATED_FOR(g_path_get_basename)
const gchar *g_basename         (const gchar *file_name);
206
#define g_dirname g_path_get_dirname GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_path_get_dirname)
207

208
GLIB_AVAILABLE_IN_ALL
209
gchar *g_get_current_dir   (void);
210
GLIB_AVAILABLE_IN_ALL
211
gchar *g_path_get_basename (const gchar *file_name) G_GNUC_MALLOC;
212
GLIB_AVAILABLE_IN_ALL
213
gchar *g_path_get_dirname  (const gchar *file_name) G_GNUC_MALLOC;
214

215
216
217
218
GLIB_AVAILABLE_IN_2_58
gchar *g_canonicalize_filename (const gchar *filename,
                                const gchar *relative_to) G_GNUC_MALLOC;

219
G_END_DECLS
Havoc Pennington's avatar
Havoc Pennington committed
220

221
#endif /* __G_FILEUTILS_H__ */