summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2017-09-27 12:17:53 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2017-09-27 14:02:20 +0200
commit9f36f6d615ab6eca2e37823213c0f6f3ead25921 (patch)
treeb1dcaf47a01bf6c33c7643478e329bb13cfe4502
parent87f3efc26e3f4d8f171c56bdd819088f79e1110c (diff)
downloadbarebox-9f36f6d615ab6eca2e37823213c0f6f3ead25921.tar.gz
barebox-9f36f6d615ab6eca2e37823213c0f6f3ead25921.tar.xz
file_list: Add function to add an entry to the list
Add file_list_add_entry() to add a single entry to a file_list. Then use it in file_list_parse_one() instead of open coding adding a new entry. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--common/file-list.c28
-rw-r--r--include/file-list.h3
2 files changed, 22 insertions, 9 deletions
diff --git a/common/file-list.c b/common/file-list.c
index 90c0f429c5..010f8f0617 100644
--- a/common/file-list.c
+++ b/common/file-list.c
@@ -8,12 +8,26 @@
#define PARSE_NAME 1
#define PARSE_FLAGS 2
+int file_list_add_entry(struct file_list *files, const char *name, const char *filename,
+ unsigned long flags)
+{
+ struct file_list_entry *entry = xzalloc(sizeof(*entry));
+
+ entry->name = xstrdup(name);
+ entry->filename = xstrdup(filename);
+ entry->flags = flags;
+
+ list_add_tail(&entry->list, &files->list);
+
+ return 0;
+}
+
static int file_list_parse_one(struct file_list *files, const char *partstr, const char **endstr)
{
int i = 0, state = PARSE_DEVICE;
char filename[PATH_MAX];
char name[PATH_MAX];
- struct file_list_entry *entry = xzalloc(sizeof(*entry));
+ unsigned long flags = 0;
memset(filename, 0, sizeof(filename));
memset(name, 0, sizeof(name));
@@ -39,13 +53,13 @@ static int file_list_parse_one(struct file_list *files, const char *partstr, con
case PARSE_FLAGS:
switch (*partstr) {
case 's':
- entry->flags |= FILE_LIST_FLAG_SAFE;
+ flags |= FILE_LIST_FLAG_SAFE;
break;
case 'r':
- entry->flags |= FILE_LIST_FLAG_READBACK;
+ flags |= FILE_LIST_FLAG_READBACK;
break;
case 'c':
- entry->flags |= FILE_LIST_FLAG_CREATE;
+ flags |= FILE_LIST_FLAG_CREATE;
break;
default:
return -EINVAL;
@@ -60,15 +74,11 @@ static int file_list_parse_one(struct file_list *files, const char *partstr, con
if (state != PARSE_FLAGS)
return -EINVAL;
- entry->name = xstrdup(name);
- entry->filename = xstrdup(filename);
if (*partstr == ',')
partstr++;
*endstr = partstr;
- list_add_tail(&entry->list, &files->list);
-
- return 0;
+ return file_list_add_entry(files, name, filename, flags);
}
struct file_list *file_list_parse(const char *str)
diff --git a/include/file-list.h b/include/file-list.h
index 608181ff8d..ccdc2b5efd 100644
--- a/include/file-list.h
+++ b/include/file-list.h
@@ -20,6 +20,9 @@ struct file_list {
struct file_list *file_list_parse(const char *str);
void file_list_free(struct file_list *);
+int file_list_add_entry(struct file_list *files, const char *name, const char *filename,
+ unsigned long flags);
+
#define file_list_for_each_entry(files, entry) \
list_for_each_entry(entry, &files->list, list)