diff -r 94d7459828ba -r 6ba4c0f3c9d1 librazor/razor.c --- a/librazor/razor.c Thu Nov 13 10:44:53 2014 +0000 +++ b/librazor/razor.c Tue Jul 05 09:40:01 2016 +0100 @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc - * Copyright (C) 2009-2012 J. Ali Harlow + * Copyright (C) 2009-2012, 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 @@ -28,10 +28,8 @@ #include #include #include -#include -#include +#include #include -#include #include #include #include @@ -140,7 +138,7 @@ }; RAZOR_EXPORT 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) { struct razor_set_section *s, *sections; @@ -156,9 +154,9 @@ return -1; } - file->header = razor_file_get_contents(filename, &file->size, - flags & RAZOR_SET_PRIVATE, - error); + file->header = razor_uri_get_contents(uri, &file->size, + flags & RAZOR_SET_PRIVATE, + error); if (!file->header) { free(file); return -1; @@ -178,9 +176,8 @@ reason = NULL; if (reason) { - razor_set_error(error, RAZOR_GENERAL_ERROR, code, filename, - reason); - razor_file_free_contents(file->header, file->size); + razor_set_error(error, RAZOR_GENERAL_ERROR, code, uri, reason); + razor_uri_free_contents(file->header, file->size); free(file); return -1; } @@ -220,7 +217,7 @@ } RAZOR_EXPORT 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) { struct razor_set *set; @@ -234,7 +231,7 @@ set->lock_fd = -1; set->ref_count = 1; - if (razor_set_bind_sections(set, filename, flags, error)) { + if (razor_set_bind_sections(set, uri, flags, error)) { free(set); return NULL; } @@ -242,18 +239,18 @@ } int -razor_set_aquire_lock(struct razor_set *set, const char *path, int exclusive) +razor_set_acquire_lock(struct razor_set *set, const char *uri, int exclusive) { int fd; assert(set != NULL); - if (path) { - fd = open(path, O_CREAT | O_RDWR | O_TRUNC | O_BINARY, 0666); + if (uri) { + fd = razor_uri_open(uri, O_CREAT | O_RDWR | O_TRUNC | O_BINARY, + 0666, NULL); if (fd < 0) return -1; - } else { + } else fd = -1; - } #ifdef MSWIN_API DWORD flags = LOCKFILE_FAIL_IMMEDIATELY; @@ -310,12 +307,12 @@ } else { for (file = set->mapped_files; file != NULL; file = next) { next = file->next; - razor_file_free_contents(file->header, file->size); + razor_uri_free_contents(file->header, file->size); free(file); } } - razor_set_aquire_lock(set, NULL, 0); + razor_set_acquire_lock(set, NULL, 0); free(set); } @@ -390,11 +387,11 @@ RAZOR_EXPORT int razor_set_write(struct razor_set *set, struct razor_atomic *atomic, - const char *filename, uint32_t sections) + const char *uri, uint32_t sections) { int h; - h = razor_atomic_create_file(atomic, filename, + h = razor_atomic_create_file(atomic, uri, S_IRWXU | S_IRWXG | S_IRWXO); if (h < 0) return -1; @@ -636,6 +633,7 @@ struct environment env; struct list *link; const char *prefix; + struct razor_error *tmp_error = NULL; if (stage & RAZOR_STAGE_SCRIPTS) { environment_init(&env); @@ -658,7 +656,12 @@ RAZOR_DETAIL_LAST); retval = razor_run_script(root, RAZOR_PROPERTY_PREUN, program, - script, install_count); + script, install_count, &tmp_error); + + if (retval < 0) { + razor_atomic_propagate_error(atomic, tmp_error, NULL); + tmp_error = NULL; + } } if (!retval && (stage & RAZOR_STAGE_FILES)) { @@ -690,7 +693,12 @@ RAZOR_DETAIL_LAST); retval |= razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, - script, install_count); + script, install_count, &tmp_error); + + if (retval < 0) { + razor_atomic_propagate_error(atomic, tmp_error, NULL); + tmp_error = NULL; + } } if (stage & RAZOR_STAGE_SCRIPTS) {