summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2017-05-26 16:01:29 -0400
committerColin Walters <walters@verbum.org>2017-05-30 10:05:59 -0400
commit66d162873c6f23d4628af80aa1f46fdf2d9e5e07 (patch)
tree90f702bd55062b7faedb5327ab8ef0b42e8ec6eb
parent2f8fdf80ec60aff343f4a6b23d1549b28d43dd0c (diff)
downloadlibglnx-66d162873c6f23d4628af80aa1f46fdf2d9e5e07.tar.gz
dirfd,xattrs: Port mostly to new code style
Not everything, but a good chunk of the remaining bits.
-rw-r--r--glnx-dirfd.c39
-rw-r--r--glnx-xattrs.c129
2 files changed, 42 insertions, 126 deletions
diff --git a/glnx-dirfd.c b/glnx-dirfd.c
index 12b983c..388f2a3 100644
--- a/glnx-dirfd.c
+++ b/glnx-dirfd.c
@@ -99,19 +99,14 @@ glnx_dirfd_iterator_init_at (int dfd,
GLnxDirFdIterator *out_dfd_iter,
GError **error)
{
- gboolean ret = FALSE;
glnx_fd_close int fd = -1;
-
if (!glnx_opendirat (dfd, path, follow, &fd, error))
- goto out;
+ return FALSE;
- if (!glnx_dirfd_iterator_init_take_fd (fd, out_dfd_iter, error))
- goto out;
- fd = -1; /* Transfer ownership */
+ if (!glnx_dirfd_iterator_init_take_fd (glnx_steal_fd (&fd), out_dfd_iter, error))
+ return FALSE;
- ret = TRUE;
- out:
- return ret;
+ return TRUE;
}
/**
@@ -128,24 +123,16 @@ glnx_dirfd_iterator_init_take_fd (int dfd,
GLnxDirFdIterator *dfd_iter,
GError **error)
{
- gboolean ret = FALSE;
GLnxRealDirfdIterator *real_dfd_iter = (GLnxRealDirfdIterator*) dfd_iter;
- DIR *d = NULL;
-
- d = fdopendir (dfd);
+ DIR *d = fdopendir (dfd);
if (!d)
- {
- glnx_set_prefix_error_from_errno (error, "%s", "fdopendir");
- goto out;
- }
+ return glnx_throw_errno_prefix (error, "fdopendir");
real_dfd_iter->fd = dfd;
real_dfd_iter->d = d;
real_dfd_iter->initialized = TRUE;
- ret = TRUE;
- out:
- return ret;
+ return TRUE;
}
/**
@@ -165,31 +152,25 @@ glnx_dirfd_iterator_next_dent (GLnxDirFdIterator *dfd_iter,
GCancellable *cancellable,
GError **error)
{
- gboolean ret = FALSE;
GLnxRealDirfdIterator *real_dfd_iter = (GLnxRealDirfdIterator*) dfd_iter;
g_return_val_if_fail (out_dent, FALSE);
g_return_val_if_fail (dfd_iter->initialized, FALSE);
if (g_cancellable_set_error_if_cancelled (cancellable, error))
- goto out;
+ return FALSE;
do
{
errno = 0;
*out_dent = readdir (real_dfd_iter->d);
if (*out_dent == NULL && errno != 0)
- {
- glnx_set_prefix_error_from_errno (error, "%s", "fdopendir");
- goto out;
- }
+ return glnx_throw_errno_prefix (error, "readdir");
} while (*out_dent &&
(strcmp ((*out_dent)->d_name, ".") == 0 ||
strcmp ((*out_dent)->d_name, "..") == 0));
- ret = TRUE;
- out:
- return ret;
+ return TRUE;
}
/**
diff --git a/glnx-xattrs.c b/glnx-xattrs.c
index eadb6b1..3c1a9c5 100644
--- a/glnx-xattrs.c
+++ b/glnx-xattrs.c
@@ -270,31 +270,22 @@ set_all_xattrs_for_path (const char *path,
GCancellable *cancellable,
GError **error)
{
- gboolean ret = FALSE;
- int i, n;
-
- n = g_variant_n_children (xattrs);
- for (i = 0; i < n; i++)
+ const guint n = g_variant_n_children (xattrs);
+ for (guint i = 0; i < n; i++)
{
const guint8* name;
g_autoptr(GVariant) value = NULL;
- const guint8* value_data;
- gsize value_len;
-
g_variant_get_child (xattrs, i, "(^&ay@ay)",
&name, &value);
- value_data = g_variant_get_fixed_array (value, &value_len, 1);
-
+
+ gsize value_len;
+ const guint8* value_data = g_variant_get_fixed_array (value, &value_len, 1);
+
if (lsetxattr (path, (char*)name, (char*)value_data, value_len, 0) < 0)
- {
- glnx_set_prefix_error_from_errno (error, "%s", "lsetxattr");
- goto out;
- }
+ return glnx_throw_errno_prefix (error, "lsetxattr");
}
- ret = TRUE;
- out:
- return ret;
+ return TRUE;
}
/**
@@ -347,35 +338,22 @@ glnx_fd_set_all_xattrs (int fd,
GCancellable *cancellable,
GError **error)
{
- gboolean ret = FALSE;
- int i, n;
-
- n = g_variant_n_children (xattrs);
- for (i = 0; i < n; i++)
+ const guint n = g_variant_n_children (xattrs);
+ for (guint i = 0; i < n; i++)
{
const guint8* name;
- const guint8* value_data;
g_autoptr(GVariant) value = NULL;
- gsize value_len;
- int res;
-
g_variant_get_child (xattrs, i, "(^&ay@ay)",
&name, &value);
- value_data = g_variant_get_fixed_array (value, &value_len, 1);
-
- do
- res = fsetxattr (fd, (char*)name, (char*)value_data, value_len, 0);
- while (G_UNLIKELY (res == -1 && errno == EINTR));
- if (G_UNLIKELY (res == -1))
- {
- glnx_set_prefix_error_from_errno (error, "%s", "fsetxattr");
- goto out;
- }
+
+ gsize value_len;
+ const guint8* value_data = g_variant_get_fixed_array (value, &value_len, 1);
+
+ if (TEMP_FAILURE_RETRY (fsetxattr (fd, (char*)name, (char*)value_data, value_len, 0)) < 0)
+ return glnx_throw_errno_prefix (error, "fsetxattr");
}
- ret = TRUE;
- out:
- return ret;
+ return TRUE;
}
/**
@@ -395,35 +373,17 @@ glnx_lgetxattrat (int dfd,
GError **error)
{
char pathbuf[PATH_MAX];
- GBytes *bytes = NULL;
- ssize_t bytes_read, real_size;
- guint8 *buf;
-
snprintf (pathbuf, sizeof (pathbuf), "/proc/self/fd/%d/%s", dfd, subpath);
- do
- bytes_read = lgetxattr (pathbuf, attribute, NULL, 0);
- while (G_UNLIKELY (bytes_read < 0 && errno == EINTR));
- if (G_UNLIKELY (bytes_read < 0))
- {
- glnx_set_error_from_errno (error);
- goto out;
- }
+ ssize_t bytes_read, real_size;
+ if (TEMP_FAILURE_RETRY (bytes_read = lgetxattr (pathbuf, attribute, NULL, 0)) < 0)
+ return glnx_null_throw_errno_prefix (error, "lgetxattr");
- buf = g_malloc (bytes_read);
- do
- real_size = lgetxattr (pathbuf, attribute, buf, bytes_read);
- while (G_UNLIKELY (real_size < 0 && errno == EINTR));
- if (G_UNLIKELY (real_size < 0))
- {
- glnx_set_error_from_errno (error);
- g_free (buf);
- goto out;
- }
+ g_autofree guint8 *buf = g_malloc (bytes_read);
+ if (TEMP_FAILURE_RETRY (real_size = lgetxattr (pathbuf, attribute, buf, bytes_read)) < 0)
+ return glnx_null_throw_errno_prefix (error, "lgetxattr");
- bytes = g_bytes_new_take (buf, real_size);
- out:
- return bytes;
+ return g_bytes_new_take (g_steal_pointer (&buf), real_size);
}
/**
@@ -439,33 +399,16 @@ glnx_fgetxattr_bytes (int fd,
const char *attribute,
GError **error)
{
- GBytes *bytes = NULL;
ssize_t bytes_read, real_size;
- guint8 *buf;
- do
- bytes_read = fgetxattr (fd, attribute, NULL, 0);
- while (G_UNLIKELY (bytes_read < 0 && errno == EINTR));
- if (G_UNLIKELY (bytes_read < 0))
- {
- glnx_set_error_from_errno (error);
- goto out;
- }
+ if (TEMP_FAILURE_RETRY (bytes_read = fgetxattr (fd, attribute, NULL, 0)) < 0)
+ return glnx_null_throw_errno_prefix (error, "fgetxattr");
- buf = g_malloc (bytes_read);
- do
- real_size = fgetxattr (fd, attribute, buf, bytes_read);
- while (G_UNLIKELY (real_size < 0 && errno == EINTR));
- if (G_UNLIKELY (real_size < 0))
- {
- glnx_set_error_from_errno (error);
- g_free (buf);
- goto out;
- }
+ g_autofree guint8 *buf = g_malloc (bytes_read);
+ if (TEMP_FAILURE_RETRY (real_size = fgetxattr (fd, attribute, buf, bytes_read)) < 0)
+ return glnx_null_throw_errno_prefix (error, "fgetxattr");
- bytes = g_bytes_new_take (buf, real_size);
- out:
- return bytes;
+ return g_bytes_new_take (g_steal_pointer (&buf), real_size);
}
/**
@@ -490,18 +433,10 @@ glnx_lsetxattrat (int dfd,
GError **error)
{
char pathbuf[PATH_MAX];
- int res;
-
snprintf (pathbuf, sizeof (pathbuf), "/proc/self/fd/%d/%s", dfd, subpath);
- do
- res = lsetxattr (subpath, attribute, value, len, flags);
- while (G_UNLIKELY (res == -1 && errno == EINTR));
- if (G_UNLIKELY (res == -1))
- {
- glnx_set_error_from_errno (error);
- return FALSE;
- }
+ if (TEMP_FAILURE_RETRY (lsetxattr (subpath, attribute, value, len, flags)) < 0)
+ return glnx_throw_errno_prefix (error, "lsetxattr");
return TRUE;
}