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__ */