From 6e4505aa03ea1461bf6e3c8b4da1031309cfb653 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 26 Jun 2017 14:15:01 +0200 Subject: [PATCH] Updates on unified headers --- ndk_patches_unified/bits-struct_file.h.patch | 81 ++++++++++++++ ndk_patches_unified/langinfo.h.patch | 108 +++++++++++++++++++ ndk_patches_unified/pwd.h.patch | 29 +++-- 3 files changed, 208 insertions(+), 10 deletions(-) create mode 100644 ndk_patches_unified/bits-struct_file.h.patch create mode 100644 ndk_patches_unified/langinfo.h.patch diff --git a/ndk_patches_unified/bits-struct_file.h.patch b/ndk_patches_unified/bits-struct_file.h.patch new file mode 100644 index 000000000..87c7109b4 --- /dev/null +++ b/ndk_patches_unified/bits-struct_file.h.patch @@ -0,0 +1,81 @@ +diff -u -r /home/fornwall/lib/android-ndk/sysroot/usr/include/bits/struct_file.h ./usr/include/bits/struct_file.h +--- /home/fornwall/lib/android-ndk/sysroot/usr/include/bits/struct_file.h 2017-06-20 17:41:56.000000000 +0200 ++++ ./usr/include/bits/struct_file.h 2017-06-26 13:35:19.040117023 +0200 +@@ -33,13 +33,74 @@ + + __BEGIN_DECLS + ++#if defined(__LP64__) ++struct __sbuf { ++ unsigned char* _base; ++ size_t _size; ++}; ++#else ++struct __sbuf { ++ unsigned char *_base; ++ int _size; ++}; ++#endif ++ + struct __sFILE { ++ unsigned char *_p; /* current position in (some) buffer */ ++ int _r; /* read space left for getc() */ ++ int _w; /* write space left for putc() */ + #if defined(__LP64__) +- char __private[152]; ++ int _flags; /* flags, below; this FILE is free if 0 */ ++ int _file; /* fileno, if Unix descriptor, else -1 */ + #else +- char __private[84]; ++ short _flags; /* flags, below; this FILE is free if 0 */ ++ short _file; /* fileno, if Unix descriptor, else -1 */ + #endif +-} __attribute__((aligned(sizeof(void*)))); ++ struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ ++ int _lbfsize; /* 0 or -_bf._size, for inline putc */ ++ ++ /* operations */ ++ void *_cookie; /* cookie passed to io functions */ ++ int (*_close)(void *); ++ int (*_read)(void *, char *, int); ++ off_t (*_seek)(void *, off_t, int); ++ int (*_write)(void *, const char *, int); ++ ++ /* extension data, to avoid further ABI breakage */ ++ struct __sbuf _ext; ++ /* data for long sequences of ungetc() */ ++ unsigned char *_up; /* saved _p when _p is doing ungetc data */ ++ int _ur; /* saved _r when _r is counting ungetc data */ ++ ++ /* tricks to meet minimum requirements even when malloc() fails */ ++ unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ ++ unsigned char _nbuf[1]; /* guarantee a getc() buffer */ ++ ++ /* separate buffer for fgetln() when line crosses buffer boundary */ ++ struct __sbuf _lb; /* buffer for fgetln() */ ++ ++ /* Unix stdio files get aligned to block boundaries on fseek() */ ++ int _blksize; /* stat.st_blksize (may be != _bf._size) */ ++ off_t _offset; /* current lseek offset */ ++}; ++ ++#define __SLBF 0x0001 /* line buffered */ ++#define __SNBF 0x0002 /* unbuffered */ ++#define __SRD 0x0004 /* OK to read */ ++#define __SWR 0x0008 /* OK to write */ ++ /* RD and WR are never simultaneously asserted */ ++#define __SRW 0x0010 /* open for reading & writing */ ++#define __SEOF 0x0020 /* found EOF */ ++#define __SERR 0x0040 /* found error */ ++#define __SMBF 0x0080 /* _buf is from malloc */ ++#define __SAPP 0x0100 /* fdopen()ed in append mode */ ++#define __SSTR 0x0200 /* this is an sprintf/snprintf string */ ++#define __SOPT 0x0400 /* do fseek() optimization */ ++#define __SNPT 0x0800 /* do not do fseek() optimization */ ++#define __SOFF 0x1000 /* set iff _offset is in fact correct */ ++#define __SMOD 0x2000 /* true => fgetln modified _p text */ ++#define __SALC 0x4000 /* allocate string space dynamically */ ++#define __SIGN 0x8000 /* ignore this file in _fwalk */ + + __END_DECLS + diff --git a/ndk_patches_unified/langinfo.h.patch b/ndk_patches_unified/langinfo.h.patch new file mode 100644 index 000000000..f7eace444 --- /dev/null +++ b/ndk_patches_unified/langinfo.h.patch @@ -0,0 +1,108 @@ +diff -N -a -u -r /home/fornwall/lib/android-ndk/sysroot/usr/include/langinfo.h ./usr/include/langinfo.h +--- /home/fornwall/lib/android-ndk/sysroot/usr/include/langinfo.h 2017-06-20 17:41:56.000000000 +0200 ++++ ./usr/include/langinfo.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,104 +0,0 @@ +-/* +- * Copyright (C) 2016 The Android Open Source Project +- * All rights reserved. +- * +- * Redistribution and use in source and binary forms, with or without +- * modification, are permitted provided that the following conditions +- * are met: +- * * Redistributions of source code must retain the above copyright +- * notice, this list of conditions and the following disclaimer. +- * * Redistributions in binary form must reproduce the above copyright +- * notice, this list of conditions and the following disclaimer in +- * the documentation and/or other materials provided with the +- * distribution. +- * +- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +- * SUCH DAMAGE. +- */ +- +-#ifndef _LANGINFO_H_ +-#define _LANGINFO_H_ +- +-#include +- +-#include +-#include +- +-__BEGIN_DECLS +- +-#define CODESET 1 +-#define D_T_FMT 2 +-#define D_FMT 3 +-#define T_FMT 4 +-#define T_FMT_AMPM 5 +-#define AM_STR 6 +-#define PM_STR 7 +-#define DAY_1 8 +-#define DAY_2 9 +-#define DAY_3 10 +-#define DAY_4 11 +-#define DAY_5 12 +-#define DAY_6 13 +-#define DAY_7 14 +-#define ABDAY_1 15 +-#define ABDAY_2 16 +-#define ABDAY_3 17 +-#define ABDAY_4 18 +-#define ABDAY_5 19 +-#define ABDAY_6 20 +-#define ABDAY_7 21 +-#define MON_1 22 +-#define MON_2 23 +-#define MON_3 24 +-#define MON_4 25 +-#define MON_5 26 +-#define MON_6 27 +-#define MON_7 28 +-#define MON_8 29 +-#define MON_9 30 +-#define MON_10 31 +-#define MON_11 32 +-#define MON_12 33 +-#define ABMON_1 34 +-#define ABMON_2 35 +-#define ABMON_3 36 +-#define ABMON_4 37 +-#define ABMON_5 38 +-#define ABMON_6 39 +-#define ABMON_7 40 +-#define ABMON_8 41 +-#define ABMON_9 42 +-#define ABMON_10 43 +-#define ABMON_11 44 +-#define ABMON_12 45 +-#define ERA 46 +-#define ERA_D_FMT 47 +-#define ERA_D_T_FMT 48 +-#define ERA_T_FMT 49 +-#define ALT_DIGITS 50 +-#define RADIXCHAR 51 +-#define THOUSEP 52 +-#define YESEXPR 53 +-#define NOEXPR 54 +-#define CRNCYSTR 55 +- +- +-#if __ANDROID_API__ >= 26 +-char* nl_langinfo(nl_item) __INTRODUCED_IN(26); +-char* nl_langinfo_l(nl_item, locale_t) __INTRODUCED_IN(26); +-#endif /* __ANDROID_API__ >= 26 */ +- +- +-__END_DECLS +- +-#endif diff --git a/ndk_patches_unified/pwd.h.patch b/ndk_patches_unified/pwd.h.patch index 7263a583b..1ac8ec3f2 100644 --- a/ndk_patches_unified/pwd.h.patch +++ b/ndk_patches_unified/pwd.h.patch @@ -1,7 +1,16 @@ diff -u -r /home/fornwall/lib/android-ndk/sysroot/usr/include/pwd.h ./usr/include/pwd.h ---- /home/fornwall/lib/android-ndk/sysroot/usr/include/pwd.h 2017-06-07 01:07:52.000000000 +0200 -+++ ./usr/include/pwd.h 2017-06-18 01:54:51.654897945 +0200 -@@ -89,7 +89,6 @@ +--- /home/fornwall/lib/android-ndk/sysroot/usr/include/pwd.h 2017-06-20 17:41:56.000000000 +0200 ++++ ./usr/include/pwd.h 2017-06-26 11:45:26.036064547 +0200 +@@ -63,6 +63,8 @@ + #include + #include + ++#include /* For realpath() */ ++ + __BEGIN_DECLS + + struct passwd { +@@ -89,7 +91,6 @@ struct passwd* getpwent(void) __INTRODUCED_IN(26); void setpwent(void) __INTRODUCED_IN(26); @@ -9,21 +18,21 @@ diff -u -r /home/fornwall/lib/android-ndk/sysroot/usr/include/pwd.h ./usr/includ #endif /* __ANDROID_API__ >= 26 */ -@@ -99,6 +98,52 @@ +@@ -99,6 +100,52 @@ int getpwuid_r(uid_t, struct passwd*, char*, size_t, struct passwd**) __INTRODUCED_IN(12); #endif /* __ANDROID_API__ >= 12 */ +static void android_setup_pwd(struct passwd* pw) { + static char realpath_buffer[4096/*PATH_MAX*/]; -+ char* result = realpath("@TERMUX_HOME@/.termux/shell", realpath_buffer); -+ if (result == NULL || access(realpath_buffer, X_OK) == -1) { -+ char const* bash_path = "@TERMUX_PREFIX@/bin/bash"; -+ if (access(bash_path, X_OK) != -1) pw->pw_shell = (char*) bash_path; -+ else pw->pw_shell = "@TERMUX_PREFIX@/bin/sh"; ++ char* result = realpath("/data/data/com.termux/files/home/.termux/shell", realpath_buffer); ++ if (result == NULL || access(realpath_buffer, /*X_OK*/1) == -1) { ++ char const* bash_path = "/data/data/com.termux/files/usr/bin/bash"; ++ if (access(bash_path, /*X_OK*/1) != -1) pw->pw_shell = (char*) bash_path; ++ else pw->pw_shell = "/data/data/com.termux/files/usr/bin/sh"; + } else { + pw->pw_shell = realpath_buffer; + } -+ pw->pw_dir = "@TERMUX_HOME@"; ++ pw->pw_dir = "/data/data/com.termux/files/home"; + pw->pw_passwd = "*"; +#ifdef __LP64__ + pw->pw_gecos = ""; /* Avoid NULL field. */