mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-26 09:47:48 +00:00
Move readlinkat fix into xwrap
This commit is contained in:
parent
0ecfb63cd6
commit
84e4bd3d41
@ -217,14 +217,7 @@ static void recreate_sbin(const char *mirror, bool use_bind_mount) {
|
|||||||
struct stat st;
|
struct stat st;
|
||||||
fstatat(src, entry->d_name, &st, AT_SYMLINK_NOFOLLOW);
|
fstatat(src, entry->d_name, &st, AT_SYMLINK_NOFOLLOW);
|
||||||
if (S_ISLNK(st.st_mode)) {
|
if (S_ISLNK(st.st_mode)) {
|
||||||
#if defined(__i386__)
|
|
||||||
// readlinkat() may failed on x86 platform, returning random value
|
|
||||||
// instead of number of bytes placed in buf (length of link)
|
|
||||||
memset(buf, 0, sizeof(buf));
|
|
||||||
readlinkat(src, entry->d_name, buf, sizeof(buf));
|
|
||||||
#else
|
|
||||||
xreadlinkat(src, entry->d_name, buf, sizeof(buf));
|
xreadlinkat(src, entry->d_name, buf, sizeof(buf));
|
||||||
#endif
|
|
||||||
xsymlink(buf, sbin_path.data());
|
xsymlink(buf, sbin_path.data());
|
||||||
} else {
|
} else {
|
||||||
sprintf(buf, "%s/%s", mirror, entry->d_name);
|
sprintf(buf, "%s/%s", mirror, entry->d_name);
|
||||||
|
@ -285,13 +285,24 @@ ssize_t xreadlink(const char *pathname, char *buf, size_t bufsiz) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ssize_t xreadlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz) {
|
ssize_t xreadlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz) {
|
||||||
|
// readlinkat() may fail on x86 platform, returning random value
|
||||||
|
// instead of number of bytes placed in buf (length of link)
|
||||||
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
|
memset(buf, 0, bufsiz);
|
||||||
ssize_t ret = readlinkat(dirfd, pathname, buf, bufsiz);
|
ssize_t ret = readlinkat(dirfd, pathname, buf, bufsiz);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
PLOGE("readlinkat %s", pathname);
|
PLOGE("readlinkat %s", pathname);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
|
ssize_t ret = readlinkat(dirfd, pathname, buf, bufsiz);
|
||||||
|
if (ret < 0) {
|
||||||
|
PLOGE("readlinkat %s", pathname);
|
||||||
} else {
|
} else {
|
||||||
buf[ret] = '\0';
|
buf[ret] = '\0';
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int xsymlink(const char *target, const char *linkpath) {
|
int xsymlink(const char *target, const char *linkpath) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user