summaryrefslogtreecommitdiff
path: root/system/musl/amalgamation.patch
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2019-04-10 02:59:26 +0000
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2019-04-10 02:59:26 +0000
commitcfc995507eeee6456c2fcd8315fd1df8e1c8c984 (patch)
treeef43da943392abe58b162ef8c4f7746e81a2a733 /system/musl/amalgamation.patch
parentc9ad7b95087dbe1d6670937f3b2833e1247cd56e (diff)
downloadpackages-cfc995507eeee6456c2fcd8315fd1df8e1c8c984.tar.gz
packages-cfc995507eeee6456c2fcd8315fd1df8e1c8c984.tar.bz2
packages-cfc995507eeee6456c2fcd8315fd1df8e1c8c984.tar.xz
packages-cfc995507eeee6456c2fcd8315fd1df8e1c8c984.zip
system/musl: bump to 1.1.22
Diffstat (limited to 'system/musl/amalgamation.patch')
-rw-r--r--system/musl/amalgamation.patch244
1 files changed, 0 insertions, 244 deletions
diff --git a/system/musl/amalgamation.patch b/system/musl/amalgamation.patch
index fa118c910..bd8e6a141 100644
--- a/system/musl/amalgamation.patch
+++ b/system/musl/amalgamation.patch
@@ -280,27 +280,6 @@ index 03c5a77b..c423b825 100644
int ret = __clock_gettime(CLOCK_REALTIME, ts);
return ret < 0 ? 0 : base;
}
-diff --git a/src/stdio/setvbuf.c b/src/stdio/setvbuf.c
-index 06ea296c..523dddc8 100644
---- a/src/stdio/setvbuf.c
-+++ b/src/stdio/setvbuf.c
-@@ -12,13 +12,15 @@ int setvbuf(FILE *restrict f, char *restrict buf, int type, size_t size)
-
- if (type == _IONBF) {
- f->buf_size = 0;
-- } else {
-+ } else if (type == _IOLBF || type == _IOFBF) {
- if (buf && size >= UNGET) {
- f->buf = (void *)(buf + UNGET);
- f->buf_size = size - UNGET;
- }
- if (type == _IOLBF && f->buf_size)
- f->lbf = '\n';
-+ } else {
-+ return -1;
- }
-
- f->flags |= F_SVB;
diff --git a/src/unistd/getcwd.c b/src/unistd/getcwd.c
index f407ffe0..4fd3a60c 100644
--- a/src/unistd/getcwd.c
@@ -318,20 +297,6 @@ index f407ffe0..4fd3a60c 100644
if (ret == 0 || buf[0] != '/') {
errno = ENOENT;
return 0;
-diff --git a/include/tar.h b/include/tar.h
-index 2eba66ec..d15bd9b4 100644
---- a/include/tar.h
-+++ b/include/tar.h
-@@ -5,9 +5,7 @@
-
- #define TSUID 04000
- #define TSGID 02000
--#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_XOPEN_SOURCE)
- #define TSVTX 01000
--#endif
- #define TUREAD 00400
- #define TUWRITE 00200
- #define TUEXEC 00100
diff --git a/src/conf/fpathconf.c b/src/conf/fpathconf.c
index b6a9d63e..83e47e87 100644
--- a/src/conf/fpathconf.c
@@ -437,212 +402,3 @@ index 4d91338b..04321887 100644
#define O_ACCMODE (03|O_SEARCH)
#define O_RDONLY 00
-diff --git a/src/dirent/fdopendir.c b/src/dirent/fdopendir.c
-index c377271d..d78fb87f 100644
---- a/src/dirent/fdopendir.c
-+++ b/src/dirent/fdopendir.c
-@@ -13,6 +13,10 @@ DIR *fdopendir(int fd)
- if (fstat(fd, &st) < 0) {
- return 0;
- }
-+ if (fcntl(fd, F_GETFL) & O_PATH) {
-+ errno = EBADF;
-+ return 0;
-+ }
- if (!S_ISDIR(st.st_mode)) {
- errno = ENOTDIR;
- return 0;
-diff --git a/src/unistd/renameat.c b/src/unistd/renameat.c
-index 12574822..07386407 100644
---- a/src/unistd/renameat.c
-+++ b/src/unistd/renameat.c
-@@ -1,7 +1,38 @@
-+#include <errno.h>
-+#include <libgen.h>
-+#include <limits.h>
- #include <stdio.h>
-+#include <string.h>
- #include "syscall.h"
-
- int renameat(int oldfd, const char *old, int newfd, const char *new)
- {
-+ char old_copy[PATH_MAX+1], new_copy[PATH_MAX+1];
-+ char *base;
-+
-+ if (strlen(old) > PATH_MAX || strlen(new) > PATH_MAX) {
-+ errno = ENAMETOOLONG;
-+ return -1;
-+ }
-+
-+ if (strlen(old) == 0 || strlen(new) == 0) {
-+ errno = ENOENT;
-+ return -1;
-+ }
-+
-+ strcpy(old_copy, old);
-+ strcpy(new_copy, new);
-+
-+ base = basename(old_copy);
-+ strncpy(old_copy, base, sizeof(old_copy));
-+ base = basename(new_copy);
-+ strncpy(new_copy, base, sizeof(new_copy));
-+
-+ if (strcmp(old_copy, ".") == 0 || strcmp(old_copy, "..") == 0 ||
-+ strcmp(new_copy, ".") == 0 || strcmp(new_copy, "..") == 0) {
-+ errno = EINVAL;
-+ return -1;
-+ }
-+
- return syscall(SYS_renameat, oldfd, old, newfd, new);
- }
-diff --git a/src/unistd/renameat.c b/src/unistd/renameat.c
-index 07386407..7e850401 100644
---- a/src/unistd/renameat.c
-+++ b/src/unistd/renameat.c
-@@ -1,16 +1,23 @@
- #include <errno.h>
-+#include <fcntl.h>
- #include <libgen.h>
- #include <limits.h>
- #include <stdio.h>
- #include <string.h>
-+#include <sys/stat.h>
-+#include <sys/types.h>
-+#include <unistd.h>
- #include "syscall.h"
-
- int renameat(int oldfd, const char *old, int newfd, const char *new)
- {
- char old_copy[PATH_MAX+1], new_copy[PATH_MAX+1];
- char *base;
-+ size_t old_size, new_size;
-+ struct stat statbuf;
-
-- if (strlen(old) > PATH_MAX || strlen(new) > PATH_MAX) {
-+ if ((old_size = strlen(old)) > PATH_MAX || \
-+ (new_size = strlen(new)) > PATH_MAX) {
- errno = ENAMETOOLONG;
- return -1;
- }
-@@ -34,5 +41,31 @@ int renameat(int oldfd, const char *old, int newfd, const char *new)
- return -1;
- }
-
-+ /* The Linux kernel will fail when attempting to rename a symlink of a
-+ directory with a trailing slash. We therefore have to handle this
-+ case ourselves. */
-+ if (old[old_size - 1] == '/') {
-+ /* Calling stat(2) on a symlink to a dir with the trailing
-+ slash causes stat(2) to return the actual directory instead
-+ of the symlink itself. */
-+ strcpy(old_copy, old);
-+ old_copy[old_size - 1] = '\0';
-+ if (fstatat(oldfd, old_copy, &statbuf, AT_SYMLINK_NOFOLLOW) == -1) {
-+ return -1;
-+ }
-+ if (S_ISLNK(statbuf.st_mode)) {
-+ if (fstatat(oldfd, old, &statbuf, 0) == -1) {
-+ return -1;
-+ }
-+ if (S_ISDIR(statbuf.st_mode)) {
-+ old = old_copy;
-+ } else {
-+ /* may as well not waste the syscall */
-+ errno = ENOTDIR;
-+ return -1;
-+ }
-+ }
-+ }
-+
- return syscall(SYS_renameat, oldfd, old, newfd, new);
- }
-diff --git a/src/unistd/renameat.c b/src/unistd/renameat.c
-index d0f31c21..e2f03d39 100644
---- a/src/unistd/renameat.c
-+++ b/src/unistd/renameat.c
-@@ -9,12 +9,31 @@
- #include <unistd.h>
- #include "syscall.h"
-
-+static inline int test_symlink_dirness(int fd, const char *pathname)
-+{
-+ struct stat statbuf;
-+ if (fstatat(fd, pathname, &statbuf, AT_SYMLINK_NOFOLLOW) == -1) {
-+ return 1;
-+ }
-+ if (S_ISLNK(statbuf.st_mode)) {
-+ if (fstatat(fd, pathname, &statbuf, 0) == -1) return 1;
-+
-+ if (S_ISDIR(statbuf.st_mode)) return 0;
-+ else {
-+ errno = ENOTDIR;
-+ return -1;
-+ }
-+ }
-+ return 1;
-+}
-+
- int renameat(int oldfd, const char *old, int newfd, const char *new)
- {
- char old_copy[PATH_MAX+1], new_copy[PATH_MAX+1];
- char *base;
- size_t old_size, new_size;
-- struct stat statbuf;
-+ struct stat oldstat, newstat;
-+ int r;
-
- if ((old_size = strlen(old)) > PATH_MAX || \
- (new_size = strlen(new)) > PATH_MAX) {
-@@ -22,11 +41,18 @@ int renameat(int oldfd, const char *old, int newfd, const char *new)
- return -1;
- }
-
-- if (strlen(old) == 0 || strlen(new) == 0) {
-+ if (old_size == 0 || new_size == 0) {
- errno = ENOENT;
- return -1;
- }
-
-+ /* Test equality of old and new.
-+ If they both resolve to the same dentry, we do nothing. */
-+ if (fstatat(oldfd, old, &oldstat, 0) == 0 && \
-+ fstatat(newfd, new, &newstat, 0) == 0 && \
-+ oldstat.st_dev == newstat.st_dev && \
-+ oldstat.st_ino == newstat.st_ino) return 0;
-+
- strcpy(old_copy, old);
- strcpy(new_copy, new);
-
-@@ -50,21 +76,17 @@ int renameat(int oldfd, const char *old, int newfd, const char *new)
- of the symlink itself. */
- strcpy(old_copy, old);
- old_copy[old_size - 1] = '\0';
-- if (fstatat(oldfd, old_copy, &statbuf, AT_SYMLINK_NOFOLLOW) == -1) {
-- return -1;
-- }
-- if (S_ISLNK(statbuf.st_mode)) {
-- if (fstatat(oldfd, old, &statbuf, 0) == -1) {
-- return -1;
-- }
-- if (S_ISDIR(statbuf.st_mode)) {
-- old = old_copy;
-- } else {
-- /* may as well not waste the syscall */
-- errno = ENOTDIR;
-- return -1;
-- }
-- }
-+ r = test_symlink_dirness(oldfd, old_copy);
-+ if (r == 0) old = old_copy;
-+ else if (r == -1) return -1;
-+ }
-+
-+ if (new[new_size - 1] == '/') {
-+ strcpy(new_copy, new);
-+ new_copy[new_size - 1] = '\0';
-+ r = test_symlink_dirness(newfd, new_copy);
-+ if (r == 0) new = new_copy;
-+ else if (r == -1) return -1;
- }
-
- return syscall(SYS_renameat, oldfd, old, newfd, new);