- Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtoys.h
139 lines (115 loc) · 3.66 KB
/
toys.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* Toybox infrastructure.
*
* Copyright 2006 Rob Landley <rob@landley.net>
*/
// Stuff that needs to go before the standard headers
#include"generated/config.h"
#include"lib/portability.h"
// General posix-2008 headers
#include<ctype.h>
#include<dirent.h>
#include<errno.h>
#include<fcntl.h>
#include<fnmatch.h>
#include<grp.h>
#include<inttypes.h>
#include<limits.h>
#include<math.h>
#include<paths.h>
#include<pwd.h>
#include<regex.h>
#include<sched.h>
#include<setjmp.h>
#include<signal.h>
#include<stdarg.h>
#include<stddef.h>
#include<stdint.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<strings.h>
#include<sys/mman.h>
#include<sys/resource.h>
#include<sys/stat.h>
#include<sys/statvfs.h>
#include<sys/time.h>
#include<sys/times.h>
#include<sys/utsname.h>
#include<sys/wait.h>
#include<syslog.h>
#include<termios.h>
#include<time.h>
#include<unistd.h>
#include<utime.h>
// Posix networking
#include<arpa/inet.h>
#include<netdb.h>
#include<net/if.h>
#include<netinet/in.h>
#include<netinet/tcp.h>
#include<poll.h>
#include<sys/socket.h>
#include<sys/un.h>
// Internationalization support (also in POSIX and LSB)
#include<locale.h>
#include<wchar.h>
#include<wctype.h>
// LSB 4.1 headers
#include<sys/ioctl.h>
#include"lib/lib.h"
#include"lib/lsm.h"
#include"lib/toyflags.h"
// Get list of function prototypes for all enabled command_main() functions.
#defineNEWTOY(name, opts, flags) void name##_main(void);
#defineOLDTOY(name, oldname, flags) void oldname##_main(void);
#include"generated/newtoys.h"
#include"generated/flags.h"
#include"generated/globals.h"
#include"generated/tags.h"
// These live in main.c
structtoy_list*toy_find(char*name);
voidtoy_init(structtoy_list*which, char*argv[]);
voidtoy_exec(char*argv[]);
// Array of available commands
externstructtoy_list {
char*name;
void (*toy_main)(void);
char*options;
unsignedflags;
} toy_list[];
// Global context shared by all commands.
externstructtoy_context {
structtoy_list*which; // Which entry in toy_list is this one?
char**argv; // Original command line arguments
char**optargs; // Arguments left over from get_optflags()
unsigned long longoptflags; // Command line option flags from get_optflags()
intoptc; // Count of optargs
intenvc; // Count of original environ entries
intold_umask; // Old umask preserved by TOYFLAG_UMASK
shorttoycount; // Total number of commands in this build
shortsignal; // generic_signal() records what signal it saw here
intsignalfd; // and writes signal to this fd, if set
charexitval; // Value error_exit feeds to exit()
charwasroot; // dropped setuid
// This is at the end so toy_init() doesn't zero it.
sigjmp_buf*rebound; // siglongjmp here instead of exit when do_rebound
structarg_list*xexit; // atexit() functions for xexit(), set by sigatexit()
void*stacktop; // nested toy_exec() call count, or 0 if vforked
} toys;
// Two big temporary buffers: one for use by commands, one for library functions
externchartoybuf[4096], libbuf[4096];
externchar**environ;
#defineFLAG(x) (!!(toys.optflags&FLAG_##x)) // Return 1 if flag set, 0 if not
#ifdefTOYBOX_OH_ADAPT
/* fix "ps -eo pid,cmd,%cpu --sort=-%CPU"sort not correct problem */
#defineEXP 1e-6 // for double comparison
#endif
#defineGLOBALS(...)
#defineARRAY_LEN(array) (sizeof(array)/sizeof(*array))
#defineTAGGED_ARRAY(X, ...) {__VA_ARGS__}
#ifndefTOYBOX_VERSION
#ifndefTOYBOX_VENDOR
#defineTOYBOX_VENDOR ""
#endif
#defineTOYBOX_VERSION "0.8.10"TOYBOX_VENDOR
#endif