core: Add a few more GIO utility functions

This commit is contained in:
Colin Walters 2012-03-31 10:32:02 -04:00
parent 70afd6011f
commit b221b0fdd6
2 changed files with 96 additions and 0 deletions

View File

@ -77,6 +77,91 @@ ot_gfile_ensure_directory (GFile *dir,
return ret;
}
GFile *
ot_gfile_get_child_strconcat (GFile *parent,
const char *first,
...)
{
va_list args;
GFile *ret;
GString *buf;
const char *arg;
g_return_val_if_fail (first != NULL, NULL);
va_start (args, first);
buf = g_string_new (first);
while ((arg = va_arg (args, const char *)) != NULL)
g_string_append (buf, arg);
ret = g_file_get_child (parent, buf->str);
g_string_free (buf, TRUE);
return ret;
}
/**
* ot_gfile_unlink:
* @path: Path to file
* @cancellable: a #GCancellable
* @error: a #GError
*
* Like g_file_delete(), except this function does not follow Unix
* symbolic links, and will delete a symbolic link even if it's
* pointing to a nonexistent file. In other words, this function
* merely wraps the raw Unix function unlink().
*
* Returns: %TRUE on success, %FALSE on error
*/
gboolean
ot_gfile_unlink (GFile *path,
GCancellable *cancellable,
GError **error)
{
if (g_cancellable_set_error_if_cancelled (cancellable, error))
return FALSE;
if (unlink (ot_gfile_get_path_cached (path)) < 0)
{
ot_util_set_error_from_errno (error, errno);
return FALSE;
}
return TRUE;
}
/**
* ot_gfile_rename:
* @from: Current path
* @to: New path
* @cancellable: a #GCancellable
* @error: a #GError
*
* This function wraps the raw Unix function rename().
*
* Returns: %TRUE on success, %FALSE on error
*/
gboolean
ot_gfile_rename (GFile *from,
GFile *to,
GCancellable *cancellable,
GError **error)
{
if (g_cancellable_set_error_if_cancelled (cancellable, error))
return FALSE;
if (rename (ot_gfile_get_path_cached (from),
ot_gfile_get_path_cached (to)) < 0)
{
ot_util_set_error_from_errno (error, errno);
return FALSE;
}
return TRUE;
}
gboolean
ot_gfile_load_contents_utf8 (GFile *file,
char **contents_out,

View File

@ -36,6 +36,8 @@ G_BEGIN_DECLS
GFileType ot_gfile_type_for_mode (guint32 mode);
GFile *ot_gfile_get_child_strconcat (GFile *parent, const char *first, ...) G_GNUC_NULL_TERMINATED;
GFile *ot_gfile_new_for_path (const char *path);
const char *ot_gfile_get_path_cached (GFile *file);
@ -44,6 +46,15 @@ const char *ot_gfile_get_basename_cached (GFile *file);
gboolean ot_gfile_ensure_directory (GFile *dir, gboolean with_parents, GError **error);
gboolean ot_gfile_rename (GFile *src,
GFile *dest,
GCancellable *cancellable,
GError **error);
gboolean ot_gfile_unlink (GFile *path,
GCancellable *cancellable,
GError **error);
gboolean ot_gfile_load_contents_utf8 (GFile *file,
char **contents_out,
char **etag_out,