#include <pakfire/dist.h>
#include <pakfire/execute.h>
#include <pakfire/logging.h>
+#include <pakfire/mount.h>
#include <pakfire/packagelist.h>
#include <pakfire/pakfire.h>
#include <pakfire/key.h>
#include <pakfire/dist.h>
#include <pakfire/file.h>
#include <pakfire/logging.h>
+#include <pakfire/mount.h>
#include <pakfire/package.h>
#include <pakfire/packager.h>
#include <pakfire/parser.h>
# #
#############################################################################*/
-#ifdef PAKFIRE_PRIVATE
-
-#include <sys/queue.h>
+#ifndef PAKFIRE_MOUNT_H
+#define PAKFIRE_MOUNT_H
#include <pakfire/pakfire.h>
-int pakfire_mount_list(struct pakfire* pakfire);
+int pakfire_bind(struct pakfire* pakfire, const char* src, const char* dst, int flags);
-int pakfire_mount(struct pakfire* pakfire, const char* source, const char* target,
- const char* filesystemtype, unsigned long mountflags, const void* data);
+#ifdef PAKFIRE_PRIVATE
+
+int pakfire_mount_list(struct pakfire* pakfire);
int pakfire_mount_all(struct pakfire* pakfire);
int pakfire_umount_all(struct pakfire* pakfire);
#endif /* PAKFIRE_PRIVATE */
+
+#endif /* PAKFIRE_MOUNT_H */
int pakfire_clean(struct pakfire* pakfire, int flags);
int pakfire_refresh(struct pakfire* pakfire, int flags);
-int pakfire_bind(struct pakfire* pakfire, const char* src, const char* dst, int flags);
-
int pakfire_list_keys(struct pakfire* pakfire, struct pakfire_key*** keys);
int pakfire_copy_in(struct pakfire* pakfire, const char* src, const char* dst);
#include <pakfire/arch.h>
#include <pakfire/logging.h>
#include <pakfire/pakfire.h>
+#include <pakfire/private.h>
#include <pakfire/mount.h>
#include <pakfire/util.h>
__pakfire_is_mountpoint, path);
}
-int pakfire_mount(struct pakfire* pakfire, const char* source, const char* target,
+static int pakfire_mount(struct pakfire* pakfire, const char* source, const char* target,
const char* fstype, unsigned long mflags, const void* data) {
const char* options = (const char*)data;
int r;
return pakfire_mount_foreach(pakfire, MNT_ITER_BACKWARD,
__pakfire_umount, NULL);
}
+
+PAKFIRE_EXPORT int pakfire_bind(struct pakfire* pakfire, const char* src, const char* dst, int flags) {
+ struct stat st;
+ char mountpoint[PATH_MAX];
+
+ if (!dst)
+ dst = src;
+
+ int r = pakfire_make_path(pakfire, mountpoint, dst);
+ if (r < 0)
+ return 1;
+
+ DEBUG(pakfire, "Bind-mounting %s to %s\n", src, mountpoint);
+
+ r = stat(src, &st);
+ if (r < 0) {
+ ERROR(pakfire, "Could not stat %s: %m\n", src);
+ return 1;
+ }
+
+ // Make sure the mountpoint exists
+ switch (st.st_mode & S_IFMT) {
+ case S_IFDIR:
+ r = pakfire_mkdir(mountpoint, 0);
+ if (r && errno != EEXIST)
+ return r;
+ break;
+
+ case S_IFREG:
+ case S_IFLNK:
+ // Make parent directory
+ r = pakfire_mkparentdir(mountpoint, 0);
+ if (r)
+ return r;
+
+ // Create a file
+ FILE* f = fopen(mountpoint, "w");
+ if (!f)
+ return 1;
+ fclose(f);
+ break;
+
+ default:
+ errno = ENOTSUP;
+ return 1;
+ }
+
+ // Perform mount
+ return pakfire_mount(pakfire, src, mountpoint, NULL, flags|MS_BIND, NULL);
+}
return __pakfire_path_join(dst, length, pakfire->path, path);
}
-PAKFIRE_EXPORT int pakfire_bind(struct pakfire* pakfire, const char* src, const char* dst, int flags) {
- struct stat st;
- char mountpoint[PATH_MAX];
-
- if (!dst)
- dst = src;
-
- int r = pakfire_make_path(pakfire, mountpoint, dst);
- if (r < 0)
- return 1;
-
- DEBUG(pakfire, "Bind-mounting %s to %s\n", src, mountpoint);
-
- r = stat(src, &st);
- if (r < 0) {
- ERROR(pakfire, "Could not stat %s: %m\n", src);
- return 1;
- }
-
- // Make sure the mountpoint exists
- switch (st.st_mode & S_IFMT) {
- case S_IFDIR:
- r = pakfire_mkdir(mountpoint, 0);
- if (r && errno != EEXIST)
- return r;
- break;
-
- case S_IFREG:
- case S_IFLNK:
- // Make parent directory
- r = pakfire_mkparentdir(mountpoint, 0);
- if (r)
- return r;
-
- // Create a file
- FILE* f = fopen(mountpoint, "w");
- if (!f)
- return 1;
- fclose(f);
- break;
-
- default:
- errno = ENOTSUP;
- return 1;
- }
-
- // Perform mount
- return pakfire_mount(pakfire, src, mountpoint, NULL, flags|MS_BIND, NULL);
-}
-
gpgme_ctx_t pakfire_get_gpgctx(struct pakfire* pakfire) {
return pakfire->gpgctx;
}