diff -r 94d7459828ba -r 008c75a5e08d librazor/razor.h.in --- a/librazor/razor.h.in Thu Nov 13 10:44:53 2014 +0000 +++ b/librazor/razor.h.in Mon Jul 04 10:48:18 2016 +0100 @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc - * Copyright (C) 2009, 2011, 2012, 2014 J. Ali Harlow + * Copyright (C) 2009, 2011, 2012, 2014, 2016 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ #include #include -#include +#include /* GCC extensions */ #if defined(__GNUC__) @@ -130,6 +130,10 @@ *(dest) = razor_error_dup(src, summary); \ else +#define razor_error_matches(error, domain, code) \ + ((error) && razor_error_get_domain(error) == (domain) && \ + razor_error_get_code(error) == (code)) + #define RAZOR_ERROR_DOMAIN(i1,i2,i3,c) \ (((i1)&0xff)<<24|((i2)&0xff)<<16|((i3)&0xff)<<8|(c)&0xff) @@ -145,6 +149,8 @@ RAZOR_GENERAL_ERROR_DATABASE_EXISTS, RAZOR_GENERAL_ERROR_DATABASE_LOCKED, RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, + RAZOR_GENERAL_ERROR_UNSUPPORTED_URI, + RAZOR_GENERAL_ERROR_BAD_URI, }; int razor_error_get_domain(struct razor_error *error); @@ -195,11 +201,11 @@ * * Returns: non-zero on error. **/ -int razor_atomic_make_dirs(struct razor_atomic *atomic, const char *root, - const char *path); +int razor_atomic_make_dirs(struct razor_atomic *atomic, const char *root_uri, + const char *uri); int razor_atomic_remove(struct razor_atomic *atomic, const char *path); -int razor_atomic_rename_file(struct razor_atomic *atomic, const char *oldpath, - const char *newpath); +int razor_atomic_rename_file(struct razor_atomic *atomic, const char *old_uri, + const char *new_uri); /** * razor_atomic_create_dir @@ -209,8 +215,8 @@ * * Returns: non-zero on error. */ -int razor_atomic_create_dir(struct razor_atomic *atomic, const char *dirname, - mode_t mode); +int razor_atomic_create_dir(struct razor_atomic *atomic, const char *uri, + mode_t mode); /** * razor_atomic_create_symlink @@ -224,7 +230,7 @@ * Returns: non-zero on error. */ int razor_atomic_create_symlink(struct razor_atomic *atomic, const char *target, - const char *path); + const char *uri); /** * razor_atomic_create_file * @@ -234,16 +240,17 @@ * Returns: A handle to be passed to razor_atomic_write() and * razor_atomic_close() or a negative value on error. */ -int razor_atomic_create_file(struct razor_atomic *atomic, const char *filename, - mode_t mode); +int razor_atomic_create_file(struct razor_atomic *atomic, const char *uri, + mode_t mode); int razor_atomic_write(struct razor_atomic *atomic, int handle, - const void *data, size_t size); + const void *data, size_t size); int razor_atomic_close(struct razor_atomic *atomic, int handle); int razor_atomic_sync(struct razor_atomic *atomic, int handle); void razor_atomic_abort(struct razor_atomic *atomic, int domain, int code, - const char *error_msg); -void razor_atomic_propagate_error(struct razor_atomic *atomic, - struct razor_error *error, const char *summary); + const char *error_msg); +void +razor_atomic_propagate_error(struct razor_atomic *atomic, + struct razor_error *error, const char *summary); int razor_atomic_in_error_state(struct razor_atomic *atomic); /** @@ -272,7 +279,7 @@ struct razor_set *razor_set_create_without_root(void); struct razor_set *razor_set_create(void); struct razor_set * -razor_set_open(const char *filename, enum razor_set_flags flags, +razor_set_open(const char *uri, enum razor_set_flags flags, struct razor_error **error); uint32_t razor_set_get_header_version(struct razor_set *set); int razor_set_set_header_version(struct razor_set *set, @@ -283,9 +290,9 @@ struct razor_atomic *atomic, int handle, uint32_t section_mask); int razor_set_write(struct razor_set *set, struct razor_atomic *atomic, - const char *filename, uint32_t setions); + const char *uri, uint32_t setions); int -razor_set_bind_sections(struct razor_set *set, const char *filename, +razor_set_bind_sections(struct razor_set *set, const char *uri, enum razor_set_flags flags, struct razor_error **error); void @@ -506,13 +513,12 @@ const char *path); void razor_relocations_destroy(struct razor_relocations *relocations); -struct razor_rpm *razor_rpm_open(const char *filename, - struct razor_error **error); +struct razor_rpm *razor_rpm_open(const char *uri, struct razor_error **error); void razor_rpm_get_details(struct razor_rpm *rpm, ...); void razor_rpm_set_relocations(struct razor_rpm *rpm, struct razor_relocations *relocations); int razor_rpm_install(struct razor_rpm *rpm, struct razor_atomic *atomic, - const char *root, int install_count, + const char *root_uri, int install_count, enum razor_stage_type stage); int razor_rpm_close(struct razor_rpm *rpm); @@ -599,13 +605,13 @@ **/ struct razor_root; -const char *razor_get_database_path(); -void razor_set_database_path(const char *database_path); -int razor_root_create(const char *root, struct razor_error **error); +const char *razor_get_database_uri(void); +void razor_set_database_uri(const char *database_uri); +int razor_root_create(const char *root_uri, struct razor_error **error); struct razor_root * -razor_root_open(const char *root, struct razor_error **error); +razor_root_open(const char *root_uri, struct razor_error **error); struct razor_set * -razor_root_open_read_only(const char *root, struct razor_error **error); +razor_root_open_read_only(const char *root_uri, struct razor_error **error); struct razor_set *razor_root_get_system_set(struct razor_root *root); int razor_root_close(struct razor_root *root); int @@ -613,6 +619,41 @@ struct razor_atomic *atomic); /** + * SECTION:uri-io + * @title: URI Input/Output + * @short_description: Functions to support non-file URI handlers + * + * Libraries that want to support URIs other than file URIs (which razor + * handles internally), can install their own URI handlers. Unsupported + * virtual functions should be set to %NULL. A fallback URI handler (which + * will be used if no scheme-specific handler is found) can be installed + * by passing scheme as %NULL. Finally, URI handlers can be removed by + * passing vtable as %NULL. + **/ + +struct razor_uri_vtable { + unsigned structure_size; + int (*mkdir)(const char *path, mode_t mode, struct razor_error **error); + int (*unlink)(const char *path, struct razor_error **error); + int (*open)(const char *path, int flags, mode_t mode, + struct razor_error **error); + int (*move)(const char *path, const char *dest, + struct razor_error **error); + void *(*get_contents)(const char *path, size_t *length, int _private, + struct razor_error **error); + int (*free_contents)(void *addr, size_t length); + int (*is_directory)(const char *path, struct razor_error **error); + char *(*mkdtemp_near)(const char *path, const char *_template, + struct razor_error **error); + void *(*opendir)(const char *path, struct razor_error **error); + char *(*readdir)(void *dir, struct razor_error **error); + int (*closedir)(void *dir, struct razor_error **error); +}; + +int razor_uri_set_vtable(const char *scheme, struct razor_uri_vtable *vtable, + struct razor_error **error); + +/** * SECTION:misc * @title: Miscellaneous Functions * @short_description: Various helper functions @@ -636,12 +677,15 @@ char *razor_concat(const char *s, ...) RAZOR_MALLOC RAZOR_NULL_TERMINATED; -char *razor_path_add_root(const char *path, const char *root) RAZOR_MALLOC; -char *razor_path_from_url(const char *url) RAZOR_MALLOC; +char *razor_path_from_uri(const char *uri, struct razor_error **error) + RAZOR_MALLOC; +char *razor_path_to_uri(const char *path) RAZOR_MALLOC; +char *razor_path_relative_to_uri(const char *file_uri, const char *path, + struct razor_error **error) RAZOR_MALLOC; const char *razor_system_arch(void); -int razor_dump_database(FILE *fp, const char *root, const char *filename, +int razor_dump_database(FILE *fp, const char *root_uri, const char *filename, struct razor_error **error); #endif /* _RAZOR_H_ */