librazor/razor.c
changeset 489 9d0a04089d22
parent 475 008c75a5e08d
child 499 c89e5edb8eae
     1.1 --- a/librazor/razor.c	Mon Jul 04 10:48:18 2016 +0100
     1.2 +++ b/librazor/razor.c	Mon Jul 11 16:49:53 2016 +0100
     1.3 @@ -621,13 +621,13 @@
     1.4  RAZOR_EXPORT int
     1.5  razor_package_remove(struct razor_set *prev, struct razor_set *next,
     1.6  		     struct razor_atomic *atomic, struct razor_package *package,
     1.7 -		     const char *root, int install_count,
     1.8 +		     const char *root_uri, int install_count,
     1.9  		     enum razor_stage_type stage)
    1.10  {
    1.11  	struct razor_file_iterator *fi;
    1.12  	struct razor_package_iterator *pi;
    1.13  	struct razor_package *p;
    1.14 -	char *buffer, buf[32];
    1.15 +	char *uri, *relative, *buffer, buf[32];
    1.16  	const char *name, *program, *script;
    1.17  	int i, count, retval = 0;
    1.18  	struct environment env;
    1.19 @@ -655,8 +655,9 @@
    1.20  					  RAZOR_DETAIL_PREUN, &script,
    1.21  					  RAZOR_DETAIL_LAST);
    1.22  
    1.23 -		retval = razor_run_script(root, RAZOR_PROPERTY_PREUN, program,
    1.24 -					  script, install_count, &tmp_error);
    1.25 +		retval = razor_run_script(root_uri, RAZOR_PROPERTY_PREUN,
    1.26 +					  program, script, install_count,
    1.27 +					  &tmp_error);
    1.28  
    1.29  		if (retval < 0) {
    1.30  			razor_atomic_propagate_error(atomic, tmp_error, NULL);
    1.31 @@ -675,9 +676,34 @@
    1.32  				count++;
    1.33  			razor_package_iterator_destroy(pi);
    1.34  			if (count <= 0) {
    1.35 -				buffer = razor_concat(root, name, NULL);
    1.36 -				razor_atomic_remove(atomic, buffer);
    1.37 -				free(buffer);
    1.38 +				uri = razor_path_to_uri(name);
    1.39 +
    1.40 +				if (str_has_prefix(uri, "file:///"))
    1.41 +					relative = uri + 8;
    1.42 +				else if (str_has_prefix(uri, "file:/"))
    1.43 +					relative = uri + 6;
    1.44 +				else if (str_has_prefix(uri, "file:"))
    1.45 +					relative = uri + 5;
    1.46 +				else if (str_has_prefix(uri, "/"))
    1.47 +					relative = uri + 1;
    1.48 +				else
    1.49 +					relative = uri;
    1.50 +
    1.51 +				buffer = razor_resolve_uri_root(root_uri,
    1.52 +								relative, 1,
    1.53 +								&tmp_error);
    1.54 +				free(uri);
    1.55 +
    1.56 +				if (buffer) {
    1.57 +					razor_atomic_remove(atomic, buffer);
    1.58 +					free(buffer);
    1.59 +				} else {
    1.60 +					razor_atomic_propagate_error(atomic,
    1.61 +								     tmp_error,
    1.62 +								     NULL);
    1.63 +					tmp_error = NULL;
    1.64 +					break;
    1.65 +				}
    1.66  			}
    1.67  		}
    1.68  
    1.69 @@ -692,8 +718,9 @@
    1.70  					  RAZOR_DETAIL_POSTUN, &script,
    1.71  					  RAZOR_DETAIL_LAST);
    1.72  
    1.73 -		retval |= razor_run_script(root, RAZOR_PROPERTY_POSTUN, program,
    1.74 -					   script, install_count, &tmp_error);
    1.75 +		retval |= razor_run_script(root_uri, RAZOR_PROPERTY_POSTUN,
    1.76 +					   program, script, install_count,
    1.77 +					   &tmp_error);
    1.78  
    1.79  		if (retval < 0) {
    1.80  			razor_atomic_propagate_error(atomic, tmp_error, NULL);