Commit | Line | Data |
---|---|---|
29bf3001 FF |
1 | diff -u -r /home/fornwall/lib/android-ndk/sysroot/usr/include/stdio.h ./usr/include/stdio.h |
2 | --- /home/fornwall/lib/android-ndk/sysroot/usr/include/stdio.h 2017-06-07 01:07:52.000000000 +0200 | |
3 | +++ ./usr/include/stdio.h 2017-06-18 01:59:17.835984565 +0200 | |
4 | @@ -44,6 +44,9 @@ | |
5 | #include <stdarg.h> | |
6 | #include <stddef.h> | |
7 | ||
8 | +#include <string.h> /* For strcpy(3) used by ctermid() */ | |
9 | +#include <asm/fcntl.h> /* For O_RDWR and other O_* constants */ | |
10 | + | |
11 | #define __need_NULL | |
12 | #include <stddef.h> | |
13 | ||
14 | @@ -174,7 +178,7 @@ | |
15 | __warnattr_strict("vsprintf is often misused; please use vsnprintf"); | |
16 | char* tmpnam(char*) | |
17 | __warnattr("tempnam is unsafe, use mkstemp or tmpfile instead"); | |
18 | -#define P_tmpdir "/tmp/" /* deprecated */ | |
19 | +#define P_tmpdir "@TERMUX_PREFIX@/tmp/" /* deprecated */ | |
20 | char* tempnam(const char*, const char*) | |
21 | __warnattr("tempnam is unsafe, use mkstemp or tmpfile instead"); | |
22 | ||
23 | @@ -239,8 +243,6 @@ | |
24 | __INTRODUCED_IN(24); | |
25 | #endif /* __ANDROID_API__ >= 24 */ | |
26 | ||
27 | -FILE* tmpfile(void); | |
28 | - | |
29 | #if __ANDROID_API__ >= 24 | |
30 | FILE* tmpfile64(void) __INTRODUCED_IN(24); | |
31 | #endif /* __ANDROID_API__ >= 24 */ | |
32 | @@ -256,10 +258,15 @@ | |
33 | ||
34 | #define L_ctermid 1024 /* size for ctermid() */ | |
35 | ||
36 | -#if __ANDROID_API__ >= 26 | |
37 | -char* ctermid(char*) __INTRODUCED_IN(26); | |
38 | -#endif /* __ANDROID_API__ >= 26 */ | |
39 | +/* Needed by gnulibs freading() */ | |
40 | +#define __sferror(p) (((p)->_flags & __SERR) != 0) | |
41 | ||
42 | +/* Used by perl, fish, and others */ | |
43 | +static __inline__ char* ctermid(char* s) { | |
44 | + if (s == 0) return (char*) "/dev/tty"; | |
45 | + strcpy(s, "/dev/tty"); | |
46 | + return s; | |
47 | +} | |
48 | ||
49 | FILE* fdopen(int, const char*); | |
50 | int fileno(FILE*); | |
51 | @@ -577,4 +584,31 @@ | |
52 | ||
53 | __END_DECLS | |
54 | ||
55 | +__BEGIN_DECLS | |
56 | + | |
57 | +int open(const char*, int, ...) __overloadable __RENAME_CLANG(open); | |
58 | +extern pid_t getpid(); | |
59 | +extern int unlink(const char*); | |
60 | +void free(void* p); | |
61 | +uint32_t arc4random(void); | |
62 | +static __inline__ FILE* tmpfile() { | |
63 | + int p = getpid(); | |
64 | + char* path; | |
65 | + int i; | |
66 | + for (i = 0; i < 100; i++) { | |
67 | + unsigned int r = arc4random(); | |
fd11c5fb | 68 | + if (asprintf(&path, "@TERMUX_PREFIX@/tmp/tmpfile.%d-%u", p, r) == -1) return NULL; |
29bf3001 FF |
69 | + int fd = open(path, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE, 0600); |
70 | + free(path); | |
71 | + if (fd >= 0) { | |
72 | + FILE* result = fdopen(fd, "w+"); | |
73 | + unlink(path); | |
74 | + return result; | |
75 | + } | |
76 | + } | |
77 | + return NULL; | |
78 | +} | |
79 | + | |
80 | +__END_DECLS | |
81 | + | |
82 | #endif /* _STDIO_H_ */ |