From 5cba67520e3370db6f3fd3e06d000f733d4cc1e6 Mon Sep 17 00:00:00 2001 From: Jonathan Lebon Date: Thu, 1 Feb 2018 22:06:50 +0000 Subject: [PATCH] libotutil: factor out utility to parse file by line This will be used in the checkout CLI as well. Closes: #1442 Approved by: cgwalters --- src/libotutil/ot-fs-utils.c | 26 ++++++++++++++++++++++++++ src/libotutil/ot-fs-utils.h | 7 +++++++ src/ostree/ot-builtin-commit.c | 34 ++++------------------------------ 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/libotutil/ot-fs-utils.c b/src/libotutil/ot-fs-utils.c index affac83a..c4fcd56f 100644 --- a/src/libotutil/ot-fs-utils.c +++ b/src/libotutil/ot-fs-utils.c @@ -221,3 +221,29 @@ ot_map_anonymous_tmpfile_from_content (GInputStream *instream, return NULL; return g_mapped_file_get_bytes (mfile); } + +gboolean +ot_parse_file_by_line (const char *path, + gboolean (*cb)(const char*, void*, GError**), + void *cbdata, + GCancellable *cancellable, + GError **error) +{ + g_autofree char *contents = + glnx_file_get_contents_utf8_at (AT_FDCWD, path, NULL, cancellable, error); + if (!contents) + return FALSE; + + g_auto(GStrv) lines = g_strsplit (contents, "\n", -1); + for (char **iter = lines; iter && *iter; iter++) + { + /* skip empty lines at least */ + if (**iter == '\0') + continue; + + if (!cb (*iter, cbdata, error)) + return FALSE; + } + + return TRUE; +} diff --git a/src/libotutil/ot-fs-utils.h b/src/libotutil/ot-fs-utils.h index 5743c09e..74a0fed6 100644 --- a/src/libotutil/ot-fs-utils.h +++ b/src/libotutil/ot-fs-utils.h @@ -90,4 +90,11 @@ ot_map_anonymous_tmpfile_from_content (GInputStream *instream, GBytes *ot_fd_readall_or_mmap (int fd, goffset offset, GError **error); +gboolean +ot_parse_file_by_line (const char *path, + gboolean (*cb)(const char*, void*, GError**), + void *cbdata, + GCancellable *cancellable, + GError **error); + G_END_DECLS diff --git a/src/ostree/ot-builtin-commit.c b/src/ostree/ot-builtin-commit.c index c482b114..370f0e5b 100644 --- a/src/ostree/ot-builtin-commit.c +++ b/src/ostree/ot-builtin-commit.c @@ -124,32 +124,6 @@ static GOptionEntry options[] = { { NULL } }; -static gboolean -parse_file_by_line (const char *path, - gboolean (*cb)(const char*, void*, GError**), - void *cbdata, - GCancellable *cancellable, - GError **error) -{ - g_autofree char *contents = - glnx_file_get_contents_utf8_at (AT_FDCWD, path, NULL, cancellable, error); - if (!contents) - return FALSE; - - g_auto(GStrv) lines = g_strsplit (contents, "\n", -1); - for (char **iter = lines; iter && *iter; iter++) - { - /* skip empty lines at least */ - if (**iter == '\0') - continue; - - if (!cb (*iter, cbdata, error)) - return FALSE; - } - - return TRUE; -} - struct CommitFilterData { GHashTable *mode_adds; GHashTable *mode_overrides; @@ -457,16 +431,16 @@ ostree_builtin_commit (int argc, char **argv, OstreeCommandInvocation *invocatio { filter_data.mode_adds = mode_adds = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); filter_data.mode_overrides = mode_overrides = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - if (!parse_file_by_line (opt_statoverride_file, handle_statoverride_line, - &filter_data, cancellable, error)) + if (!ot_parse_file_by_line (opt_statoverride_file, handle_statoverride_line, + &filter_data, cancellable, error)) goto out; } if (opt_skiplist_file) { skip_list = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - if (!parse_file_by_line (opt_skiplist_file, handle_skiplist_line, - skip_list, cancellable, error)) + if (!ot_parse_file_by_line (opt_skiplist_file, handle_skiplist_line, + skip_list, cancellable, error)) goto out; }