summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--recipes-devtools/opkg/files/0004-opkg-symlink.patch24
-rw-r--r--recipes-devtools/opkg/opkg_%.bbappend3
2 files changed, 26 insertions, 1 deletions
diff --git a/recipes-devtools/opkg/files/0004-opkg-symlink.patch b/recipes-devtools/opkg/files/0004-opkg-symlink.patch
new file mode 100644
index 0000000..e105a8f
--- /dev/null
+++ b/recipes-devtools/opkg/files/0004-opkg-symlink.patch
@@ -0,0 +1,24 @@
+opkg refused to install when a symlink was in a path.
+Have it follow symlinks when installing.
+===================================================================
+diff -Naru orig/libopkg/opkg_install.c new/libopkg/opkg_install.c
+--- orig/libopkg/opkg_install.c 2020-09-08 14:08:55.550694837 -0500
++++ new/libopkg/opkg_install.c 2020-09-08 14:18:00.286678711 -0500
+@@ -443,6 +443,17 @@
+ pkg_t *obs;
+ int existing_is_dir = file_is_dir(filename);
+
++ /* Existing patch might be a symlink, and still be OK */
++ if ((!existing_is_dir) && S_ISDIR(file_info->mode)) {
++ int rslt;
++ struct stat sbuf;
++
++ /* Use stat to follow a symlink */
++ rslt = stat(filename,&sbuf);
++ if((!rslt) && S_ISDIR(sbuf.st_mode))
++ existing_is_dir = 1; /* file_is_dir was wrong */
++ }
++
+ /* OK if both the existing file and new file are directories. */
+ if (existing_is_dir && S_ISDIR(file_info->mode)) {
+ continue;
diff --git a/recipes-devtools/opkg/opkg_%.bbappend b/recipes-devtools/opkg/opkg_%.bbappend
index 7b45903..7db3ade 100644
--- a/recipes-devtools/opkg/opkg_%.bbappend
+++ b/recipes-devtools/opkg/opkg_%.bbappend
@@ -1,6 +1,7 @@
-PR .= ".mlinux1"
+PR .= ".mlinux2"
SRC_URI += " file://0003-opkg_conf-create-opkg.lock-in-run-lock-instead-of-run.patch \
+ file://0004-opkg-symlink.patch \
"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"