2 * File utility functions.
5 * Gonzalo Paniagua Javier (gonzalo@novell.com)
7 * (C) 2006 Novell, Inc.
9 * Permission is hereby granted, free of charge, to any person obtaining
10 * a copy of this software and associated documentation files (the
11 * "Software"), to deal in the Software without restriction, including
12 * without limitation the rights to use, copy, modify, merge, publish,
13 * distribute, sublicense, and/or sell copies of the Software, and to
14 * permit persons to whom the Software is furnished to do so, subject to
15 * the following conditions:
17 * The above copyright notice and this permission notice shall be
18 * included in all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39 static gpointer error_quark = "FileError";
42 g_file_error_quark (void)
48 g_file_error_from_errno (gint err_no)
52 return G_FILE_ERROR_EXIST;
54 return G_FILE_ERROR_ISDIR;
56 return G_FILE_ERROR_ACCES;
58 return G_FILE_ERROR_NAMETOOLONG;
60 return G_FILE_ERROR_NOENT;
62 return G_FILE_ERROR_NOTDIR;
64 return G_FILE_ERROR_NXIO;
66 return G_FILE_ERROR_NODEV;
68 return G_FILE_ERROR_ROFS;
71 return G_FILE_ERROR_TXTBSY;
74 return G_FILE_ERROR_FAULT;
77 return G_FILE_ERROR_LOOP;
80 return G_FILE_ERROR_NOSPC;
82 return G_FILE_ERROR_NOMEM;
84 return G_FILE_ERROR_MFILE;
86 return G_FILE_ERROR_NFILE;
88 return G_FILE_ERROR_BADF;
90 return G_FILE_ERROR_INVAL;
92 return G_FILE_ERROR_PIPE;
94 return G_FILE_ERROR_AGAIN;
96 return G_FILE_ERROR_INTR;
98 return G_FILE_ERROR_IO;
100 return G_FILE_ERROR_PERM;
102 return G_FILE_ERROR_NOSYS;
104 return G_FILE_ERROR_FAILED;
109 #define TMP_FILE_FORMAT "%.*s%s.tmp"
111 #define TMP_FILE_FORMAT "%.*s.%s~"
115 g_file_set_contents (const gchar *filename, const gchar *contents, gssize length, GError **err)
121 if (!(name = strrchr (filename, G_DIR_SEPARATOR)))
126 path = g_strdup_printf (TMP_FILE_FORMAT, name - filename, filename, name);
127 if (!(fp = fopen (path, "wb"))) {
128 g_set_error (err, G_FILE_ERROR, g_file_error_from_errno (errno), "%s", g_strerror (errno));
134 length = strlen (contents);
136 if (fwrite (contents, 1, length, fp) < length) {
137 g_set_error (err, G_FILE_ERROR, g_file_error_from_errno (ferror (fp)), "%s", g_strerror (ferror (fp)));
147 if (g_rename (path, filename) != 0) {
148 g_set_error (err, G_FILE_ERROR, g_file_error_from_errno (errno), "%s", g_strerror (errno));