summaryrefslogtreecommitdiff
path: root/lib/sqfs/dir_reader/find_by_path.c
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2022-06-01 14:21:56 +0200
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2022-06-02 17:26:53 +0200
commit9d474f278d21ddc452d8a1a722b3735fae94115c (patch)
treea47560294e37160e358cfd533f93c33ff0cc5f31 /lib/sqfs/dir_reader/find_by_path.c
parent653e24411937f9200ddfae9080f904a1d16d3366 (diff)
Cleanup: libsqfs: sqfs_dir_reader_find_by_path
Split out several repated patterns into helper functions and move the rest of the code back into dir_reader.c Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/sqfs/dir_reader/find_by_path.c')
-rw-r--r--lib/sqfs/dir_reader/find_by_path.c82
1 files changed, 0 insertions, 82 deletions
diff --git a/lib/sqfs/dir_reader/find_by_path.c b/lib/sqfs/dir_reader/find_by_path.c
deleted file mode 100644
index 0cd800f..0000000
--- a/lib/sqfs/dir_reader/find_by_path.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* SPDX-License-Identifier: LGPL-3.0-or-later */
-/*
- * find_by_path.c
- *
- * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at>
- */
-#define SQFS_BUILDING_DLL
-#include "internal.h"
-
-int sqfs_dir_reader_find_by_path(sqfs_dir_reader_t *rd,
- const sqfs_inode_generic_t *start,
- const char *path, sqfs_inode_generic_t **out)
-{
- sqfs_inode_generic_t *inode;
- sqfs_dir_entry_t *ent;
- const char *ptr;
- int ret = 0;
-
- if (start == NULL) {
- ret = sqfs_dir_reader_get_root_inode(rd, &inode);
- } else {
- inode = alloc_flex(sizeof(*inode), 1,
- start->payload_bytes_used);
- if (inode == NULL) {
- ret = SQFS_ERROR_ALLOC;
- } else {
- memcpy(inode, start,
- sizeof(*start) + start->payload_bytes_used);
- }
- }
-
- if (ret)
- return ret;
-
- while (*path != '\0') {
- if (*path == '/') {
- while (*path == '/')
- ++path;
- continue;
- }
-
- ret = sqfs_dir_reader_open_dir(rd, inode, 0);
- free(inode);
- if (ret)
- return ret;
-
- ptr = strchr(path, '/');
- if (ptr == NULL) {
-
- if (ptr == NULL) {
- for (ptr = path; *ptr != '\0'; ++ptr)
- ;
- }
- }
-
- do {
- ret = sqfs_dir_reader_read(rd, &ent);
- if (ret < 0)
- return ret;
-
- if (ret == 0) {
- ret = strncmp((const char *)ent->name,
- path, ptr - path);
- if (ret == 0)
- ret = ent->name[ptr - path];
- free(ent);
- }
- } while (ret < 0);
-
- if (ret > 0)
- return SQFS_ERROR_NO_ENTRY;
-
- ret = sqfs_dir_reader_get_inode(rd, &inode);
- if (ret)
- return ret;
-
- path = ptr;
- }
-
- *out = inode;
- return 0;
-}