refactor stdio open file list handling, move it out of global libc struct
[musl] / src / internal / libc.h
1 #ifndef LIBC_H
2 #define LIBC_H
3
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <limits.h>
7
8 struct __locale_map;
9
10 struct __locale_struct {
11         const struct __locale_map *volatile cat[6];
12 };
13
14 struct __libc {
15         int can_do_threads;
16         int threaded;
17         int secure;
18         volatile int threads_minus_1;
19         size_t *auxv;
20         size_t tls_size;
21         size_t page_size;
22         struct __locale_struct global_locale;
23 };
24
25 #ifndef PAGE_SIZE
26 #define PAGE_SIZE libc.page_size
27 #endif
28
29 #ifdef __PIC__
30 #define ATTR_LIBC_VISIBILITY __attribute__((visibility("hidden")))
31 #else
32 #define ATTR_LIBC_VISIBILITY
33 #endif
34
35 extern struct __libc __libc ATTR_LIBC_VISIBILITY;
36 #define libc __libc
37
38 extern size_t __hwcap ATTR_LIBC_VISIBILITY;
39 extern size_t __sysinfo ATTR_LIBC_VISIBILITY;
40 extern char *__progname, *__progname_full;
41
42 /* Designed to avoid any overhead in non-threaded processes */
43 void __lock(volatile int *) ATTR_LIBC_VISIBILITY;
44 void __unlock(volatile int *) ATTR_LIBC_VISIBILITY;
45 int __lockfile(FILE *) ATTR_LIBC_VISIBILITY;
46 void __unlockfile(FILE *) ATTR_LIBC_VISIBILITY;
47 #define LOCK(x) __lock(x)
48 #define UNLOCK(x) __unlock(x)
49
50 void __synccall(void (*)(void *), void *);
51 int __setxid(int, int, int, int);
52
53 extern char **__environ;
54
55 #undef weak_alias
56 #define weak_alias(old, new) \
57         extern __typeof(old) new __attribute__((weak, alias(#old)))
58
59 #undef LFS64_2
60 #define LFS64_2(x, y) weak_alias(x, y)
61
62 #undef LFS64
63 #define LFS64(x) LFS64_2(x, x##64)
64
65 #endif