diff --git a/lib/package_alternatives.c b/lib/package_alternatives.c index 9b4d0027..5e4f2b36 100644 --- a/lib/package_alternatives.c +++ b/lib/package_alternatives.c @@ -111,6 +111,7 @@ static int remove_symlinks(struct xbps_handle *xhp, xbps_array_t a, const char *grname) { unsigned int i, cnt; + struct stat st; cnt = xbps_array_count(a); for (i = 0; i < cnt; i++) { @@ -132,6 +133,11 @@ remove_symlinks(struct xbps_handle *xhp, xbps_array_t a, const char *grname) } else { lnk = xbps_xasprintf("%s%s", xhp->rootdir, l); } + if (lstat(lnk, &st) == -1 || !S_ISLNK(st.st_mode)) { + free(lnk); + free(l); + continue; + } xbps_set_cb_state(xhp, XBPS_STATE_ALTGROUP_LINK_REMOVED, 0, NULL, "Removing '%s' alternatives group symlink: %s", grname, l); unlink(lnk);