libxbps: xbps_repository_unregister(): in remote repositories, also
remove the pkg index file and its directory.
This commit is contained in:
parent
49a356df81
commit
8051232e82
5
NEWS
5
NEWS
@ -1,5 +1,10 @@
|
|||||||
xbps-0.6.2 (???):
|
xbps-0.6.2 (???):
|
||||||
|
|
||||||
|
* libxbps: xbps_repository_unregister(): in remote repositories, also
|
||||||
|
remove the pkg index file and its directory.
|
||||||
|
|
||||||
|
* libxbps: xbps_get_pkg_index_plist(): fixed a memleak.
|
||||||
|
|
||||||
* xbps-bin(8): modify the 'list' target to accept an optional argument to
|
* xbps-bin(8): modify the 'list' target to accept an optional argument to
|
||||||
list packages in the specified state, so that you can list packages that
|
list packages in the specified state, so that you can list packages that
|
||||||
need to be purged, configured and broken (will be used in the future).
|
need to be purged, configured and broken (will be used in the future).
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <libgen.h>
|
||||||
|
|
||||||
#include <xbps_api.h>
|
#include <xbps_api.h>
|
||||||
|
|
||||||
@ -117,7 +118,8 @@ xbps_repository_unregister(const char *uri)
|
|||||||
{
|
{
|
||||||
prop_dictionary_t dict;
|
prop_dictionary_t dict;
|
||||||
prop_array_t array;
|
prop_array_t array;
|
||||||
char *plist;
|
const char *pkgindexdir;
|
||||||
|
char *plist, *pkgindex;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(uri != NULL);
|
assert(uri != NULL);
|
||||||
@ -139,11 +141,44 @@ xbps_repository_unregister(const char *uri)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = xbps_remove_string_from_array(array, uri);
|
if ((rv = xbps_remove_string_from_array(array, uri)) == 0) {
|
||||||
if (rv == 0) {
|
|
||||||
/* Update plist file. */
|
/* Update plist file. */
|
||||||
if (!prop_dictionary_externalize_to_zfile(dict, plist))
|
if (!prop_dictionary_externalize_to_zfile(dict, plist)) {
|
||||||
rv = errno;
|
rv = errno;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If it's a remote repository, also remove the stored XBPS_PKGINDEX
|
||||||
|
* file and its directory.
|
||||||
|
*/
|
||||||
|
if (xbps_check_is_repo_string_remote(uri)) {
|
||||||
|
pkgindex = xbps_get_pkg_index_plist(uri);
|
||||||
|
if (pkgindex == NULL) {
|
||||||
|
rv = EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (unlink(pkgindex) == -1) {
|
||||||
|
if (errno == ENOENT) {
|
||||||
|
free(pkgindex);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "E: cannot remove pkgindex file at "
|
||||||
|
"%s: %s\n", pkgindex, strerror(errno));
|
||||||
|
free(pkgindex);
|
||||||
|
rv = errno;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
pkgindexdir = dirname(pkgindex);
|
||||||
|
if (rmdir(pkgindexdir) == -1) {
|
||||||
|
fprintf(stderr, "E: cannot remove pkgindex dir at "
|
||||||
|
"%s: %s\n", pkgindexdir, strerror(errno));
|
||||||
|
free(pkgindex);
|
||||||
|
rv = errno;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
free(pkgindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user