From 42c21e1c3c0fbc98b56bedbc63022c5e086feb40 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Thu, 4 Oct 2012 09:40:52 +0200 Subject: [PATCH] xbps-create: if a symlink points to an unexistent file store symlink target as is. Seen in recent builds when building the systemd binpkg: [chroot] => Building systemd-194_1.x86_64.xbps... xbps-create.real: main.c:219: ftw_cb: Assertion `p' failed. Which was asserting in a symlink that was pointing to a file provided by the udev pkg, therefore realpath(3) failed. --- bin/xbps-create/main.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/bin/xbps-create/main.c b/bin/xbps-create/main.c index 2a098ca0..beb79df8 100644 --- a/bin/xbps-create/main.c +++ b/bin/xbps-create/main.c @@ -216,9 +216,17 @@ ftw_cb(const char *fpath, const struct stat *sb, int type, struct FTW *ftwbuf) */ if (strncmp(buf, "../", 3) == 0) { p = realpath(fpath, NULL); - assert(p); - xe->target = strdup(p + strlen(destdir)); - free(p); + if (p == NULL) { + /* + * This symlink points to an unexistent file, + * which might be provided in another package. + * So let's use the same target. + */ + xe->target = strdup(buf); + } else { + xe->target = strdup(p + strlen(destdir)); + free(p); + } } else if (strchr(buf, '/') == NULL) { p = strdup(filep); assert(p);