From: Michael Tremer Date: Wed, 13 Jan 2021 12:01:49 +0000 (+0000) Subject: pakfire: Check if path exists X-Git-Tag: 0.9.28~1285^2~884 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e8366bc73fe0c8582a7465c81362ba587623213;p=pakfire.git pakfire: Check if path exists Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index 6c107a757..7a7db1db3 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -61,6 +61,12 @@ static int Pakfire_init(PakfireObject* self, PyObject* args, PyObject* kwds) { PyErr_SetString(PyExc_ValueError, "Invalid architecture"); break; + // path does not exist + case -ENOENT: + PyErr_Format(PyExc_FileNotFoundError, + "%s does not exist or is not a directory", path); + break; + // Anything else default: PyErr_SetNone(PyExc_OSError); diff --git a/src/libpakfire/include/pakfire/util.h b/src/libpakfire/include/pakfire/util.h index 8c2a16a1d..83c62af01 100644 --- a/src/libpakfire/include/pakfire/util.h +++ b/src/libpakfire/include/pakfire/util.h @@ -44,6 +44,7 @@ char* pakfire_format_date(time_t t); char* pakfire_path_join(const char* first, const char* second); const char* pakfire_path_relpath(const char* root, const char* path); +int pakfire_path_isdir(const char* path); char* pakfire_basename(const char* path); char* pakfire_dirname(const char* path); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 2455e7a0f..4dfae478d 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -373,6 +373,7 @@ global: pakfire_free; pakfire_get_errno; pakfire_partition_string; + pakfire_path_isdir; pakfire_path_join; pakfire_path_relpath; pakfire_read_file_into_buffer; diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 4dfbdcfd7..ed89ac4c8 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -92,6 +92,12 @@ PAKFIRE_EXPORT Pakfire pakfire_create(const char* path, const char* arch) { return NULL; } + // Check if path exists + if (!pakfire_path_isdir(path)) { + errno = -ENOENT; + return NULL; + } + Pakfire pakfire = pakfire_calloc(1, sizeof(*pakfire)); if (pakfire) { pakfire->nrefs = 1; diff --git a/src/libpakfire/util.c b/src/libpakfire/util.c index 24b0f9db5..38d9d5ec0 100644 --- a/src/libpakfire/util.c +++ b/src/libpakfire/util.c @@ -155,6 +155,20 @@ PAKFIRE_EXPORT const char* pakfire_path_relpath(const char* root, const char* pa return NULL; } +PAKFIRE_EXPORT int pakfire_path_isdir(const char* path) { + struct stat s; + + if (stat(path, &s) != 0) { + // Does not seem to exist + return 0; + } + + if (S_ISDIR(s.st_mode)) + return 1; + + return 0; +} + PAKFIRE_EXPORT char* pakfire_basename(const char* path) { char* name = pakfire_strdup(path);