diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/busybox.h | 193 | ||||
-rw-r--r-- | include/libbb.h | 209 |
2 files changed, 222 insertions, 180 deletions
diff --git a/include/busybox.h b/include/busybox.h index 194fd8220..9414234c7 100644 --- a/include/busybox.h +++ b/include/busybox.h | |||
@@ -44,31 +44,6 @@ typedef unsigned int socklen_t; | |||
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | 46 | ||
47 | /* Some useful definitions */ | ||
48 | #define FALSE ((int) 0) | ||
49 | #define TRUE ((int) 1) | ||
50 | #define SKIP ((int) 2) | ||
51 | |||
52 | /* for mtab.c */ | ||
53 | #define MTAB_GETMOUNTPT '1' | ||
54 | #define MTAB_GETDEVICE '2' | ||
55 | |||
56 | #define BUF_SIZE 8192 | ||
57 | #define EXPAND_ALLOC 1024 | ||
58 | |||
59 | static inline int is_decimal(ch) { return ((ch >= '0') && (ch <= '9')); } | ||
60 | static inline int is_octal(ch) { return ((ch >= '0') && (ch <= '7')); } | ||
61 | |||
62 | /* Macros for min/max. */ | ||
63 | #ifndef MIN | ||
64 | #define MIN(a,b) (((a)<(b))?(a):(b)) | ||
65 | #endif | ||
66 | |||
67 | #ifndef MAX | ||
68 | #define MAX(a,b) (((a)>(b))?(a):(b)) | ||
69 | #endif | ||
70 | |||
71 | |||
72 | enum Location { | 47 | enum Location { |
73 | _BB_DIR_ROOT = 0, | 48 | _BB_DIR_ROOT = 0, |
74 | _BB_DIR_BIN, | 49 | _BB_DIR_BIN, |
@@ -97,146 +72,14 @@ extern const struct BB_applet applets[]; | |||
97 | 72 | ||
98 | extern const char *applet_name; | 73 | extern const char *applet_name; |
99 | 74 | ||
100 | extern void show_usage(void) __attribute__ ((noreturn)); | 75 | #ifdef BB_FEATURE_BUFFERS_GO_ON_STACK |
101 | extern void error_msg(const char *s, ...); | 76 | #define RESERVE_BB_BUFFER(buffer,len) char buffer[len] |
102 | extern void error_msg_and_die(const char *s, ...) __attribute__ ((noreturn)); | 77 | #define RESERVE_BB_UBUFFER(buffer,len) unsigned char buffer[len] |
103 | extern void perror_msg(const char *s, ...); | 78 | #else |
104 | extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn)); | 79 | #define RESERVE_BB_BUFFER(buffer,len) char *buffer=xmalloc(len) |
105 | 80 | #define RESERVE_BB_UBUFFER(buffer,len) unsigned char *buffer=xmalloc(len) | |
106 | const char *mode_string(int mode); | ||
107 | const char *time_string(time_t timeVal); | ||
108 | int is_directory(const char *name, const int followLinks, struct stat *statBuf); | ||
109 | int isDevice(const char *name); | ||
110 | |||
111 | typedef struct ino_dev_hash_bucket_struct { | ||
112 | struct ino_dev_hash_bucket_struct *next; | ||
113 | ino_t ino; | ||
114 | dev_t dev; | ||
115 | char name[1]; | ||
116 | } ino_dev_hashtable_bucket_t; | ||
117 | int is_in_ino_dev_hashtable(const struct stat *statbuf, char **name); | ||
118 | void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); | ||
119 | void reset_ino_dev_hashtable(void); | ||
120 | |||
121 | int copy_file(const char *srcName, const char *destName, | ||
122 | int setModes, int followLinks, int forceFlag); | ||
123 | int copy_file_chunk(int srcFd, int dstFd, size_t remaining); | ||
124 | char *buildName(const char *dirName, const char *fileName); | ||
125 | int makeString(int argc, const char **argv, char *buf, int bufLen); | ||
126 | char *getChunk(int size); | ||
127 | char *chunkstrdup(const char *str); | ||
128 | void freeChunks(void); | ||
129 | ssize_t safe_read(int fd, void *buf, size_t count); | ||
130 | int full_write(int fd, const char *buf, int len); | ||
131 | int full_read(int fd, char *buf, int len); | ||
132 | int recursive_action(const char *fileName, int recurse, int followLinks, int depthFirst, | ||
133 | int (*fileAction) (const char *fileName, struct stat* statbuf, void* userData), | ||
134 | int (*dirAction) (const char *fileName, struct stat* statbuf, void* userData), | ||
135 | void* userData); | ||
136 | |||
137 | extern int create_path (const char *name, int mode); | ||
138 | extern int parse_mode( const char* s, mode_t* theMode); | ||
139 | |||
140 | extern int get_kernel_revision(void); | ||
141 | |||
142 | extern int get_console_fd(char* tty_name); | ||
143 | extern struct mntent *find_mount_point(const char *name, const char *table); | ||
144 | extern void write_mtab(char* blockDevice, char* directory, | ||
145 | char* filesystemType, long flags, char* string_flags); | ||
146 | extern void erase_mtab(const char * name); | ||
147 | extern void mtab_read(void); | ||
148 | extern char *mtab_first(void **iter); | ||
149 | extern char *mtab_next(void **iter); | ||
150 | extern char *mtab_getinfo(const char *match, const char which); | ||
151 | extern int check_wildcard_match(const char* text, const char* pattern); | ||
152 | extern long atoi_w_units (const char *cp); | ||
153 | extern pid_t* find_pid_by_name( char* pidName); | ||
154 | extern int find_real_root_device_name(char* name); | ||
155 | extern char *get_line_from_file(FILE *file); | ||
156 | extern void print_file(FILE *file); | ||
157 | extern int print_file_by_name(char *filename); | ||
158 | extern char process_escape_sequence(char **ptr); | ||
159 | extern char *get_last_path_component(char *path); | ||
160 | extern FILE *wfopen(const char *path, const char *mode); | ||
161 | extern FILE *xfopen(const char *path, const char *mode); | ||
162 | extern void chomp(char *s); | ||
163 | extern void trim(char *s); | ||
164 | extern struct BB_applet *find_applet_by_name(const char *name); | ||
165 | void run_applet_by_name(const char *name, int argc, char **argv); | ||
166 | |||
167 | #ifndef DMALLOC | ||
168 | extern void *xmalloc (size_t size); | ||
169 | extern void *xrealloc(void *old, size_t size); | ||
170 | extern void *xcalloc(size_t nmemb, size_t size); | ||
171 | extern char *xstrdup (const char *s); | ||
172 | #endif | ||
173 | extern char *xstrndup (const char *s, int n); | ||
174 | extern char * safe_strncpy(char *dst, const char *src, size_t size); | ||
175 | |||
176 | struct suffix_mult { | ||
177 | char *suffix; | ||
178 | int mult; | ||
179 | }; | ||
180 | |||
181 | extern unsigned long parse_number(const char *numstr, | ||
182 | const struct suffix_mult *suffixes); | ||
183 | |||
184 | |||
185 | /* These parse entries in /etc/passwd and /etc/group. This is desirable | ||
186 | * for BusyBox since we want to avoid using the glibc NSS stuff, which | ||
187 | * increases target size and is often not needed embedded systems. */ | ||
188 | extern long my_getpwnam(const char *name); | ||
189 | extern long my_getgrnam(const char *name); | ||
190 | extern void my_getpwuid(char *name, long uid); | ||
191 | extern void my_getgrgid(char *group, long gid); | ||
192 | extern long my_getpwnamegid(const char *name); | ||
193 | |||
194 | extern int device_open(char *device, int mode); | ||
195 | |||
196 | #if defined BB_FEATURE_MOUNT_LOOP | ||
197 | extern int del_loop(const char *device); | ||
198 | extern int set_loop(const char *device, const char *file, int offset, int *loopro); | ||
199 | extern char *find_unused_loop_device (void); | ||
200 | #endif | ||
201 | |||
202 | |||
203 | #if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT) | ||
204 | extern int vdprintf(int d, const char *format, va_list ap); | ||
205 | #endif | ||
206 | |||
207 | #if defined BB_NFSMOUNT | ||
208 | int nfsmount(const char *spec, const char *node, int *flags, | ||
209 | char **extra_opts, char **mount_opts, int running_bg); | ||
210 | #endif | ||
211 | |||
212 | #ifndef RB_POWER_OFF | ||
213 | /* Stop system and switch power off if possible. */ | ||
214 | #define RB_POWER_OFF 0x4321fedc | ||
215 | #endif | ||
216 | |||
217 | #if defined(BB_KLOGD) || defined(BB_LOGGER) | ||
218 | void syslog_msg_with_name(const char *name, int facility, int pri, const char *msg); | ||
219 | void syslog_msg(int facility, int pri, const char *msg); | ||
220 | #endif | 81 | #endif |
221 | 82 | ||
222 | /* Include our own copy of struct sysinfo to avoid binary compatability | ||
223 | * problems with Linux 2.4, which changed things. Grumble, grumble. */ | ||
224 | struct sysinfo { | ||
225 | long uptime; /* Seconds since boot */ | ||
226 | unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ | ||
227 | unsigned long totalram; /* Total usable main memory size */ | ||
228 | unsigned long freeram; /* Available memory size */ | ||
229 | unsigned long sharedram; /* Amount of shared memory */ | ||
230 | unsigned long bufferram; /* Memory used by buffers */ | ||
231 | unsigned long totalswap; /* Total swap space size */ | ||
232 | unsigned long freeswap; /* swap space still available */ | ||
233 | unsigned short procs; /* Number of current processes */ | ||
234 | unsigned long totalhigh; /* Total high memory size */ | ||
235 | unsigned long freehigh; /* Available high memory size */ | ||
236 | unsigned int mem_unit; /* Memory unit size in bytes */ | ||
237 | char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */ | ||
238 | }; | ||
239 | extern int sysinfo (struct sysinfo* info); | ||
240 | 83 | ||
241 | /* Bit map related macros -- libc5 doens't provide these... sigh. */ | 84 | /* Bit map related macros -- libc5 doens't provide these... sigh. */ |
242 | #ifndef setbit | 85 | #ifndef setbit |
@@ -247,25 +90,15 @@ extern int sysinfo (struct sysinfo* info); | |||
247 | #define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) | 90 | #define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) |
248 | #endif | 91 | #endif |
249 | 92 | ||
250 | #ifdef BB_FEATURE_HUMAN_READABLE | 93 | #ifndef RB_POWER_OFF |
251 | const char *make_human_readable_str(unsigned long val, unsigned long hr); | 94 | /* Stop system and switch power off if possible. */ |
95 | #define RB_POWER_OFF 0x4321fedc | ||
252 | #endif | 96 | #endif |
253 | enum { | ||
254 | KILOBYTE = 1024, | ||
255 | MEGABYTE = (KILOBYTE*1024), | ||
256 | GIGABYTE = (MEGABYTE*1024) | ||
257 | }; | ||
258 | 97 | ||
259 | #ifdef BB_FEATURE_BUFFERS_GO_ON_STACK | ||
260 | #define RESERVE_BB_BUFFER(buffer,len) char buffer[len] | ||
261 | #define RESERVE_BB_UBUFFER(buffer,len) unsigned char buffer[len] | ||
262 | #else | ||
263 | #define RESERVE_BB_BUFFER(buffer,len) char *buffer=xmalloc(len) | ||
264 | #define RESERVE_BB_UBUFFER(buffer,len) unsigned char *buffer=xmalloc(len) | ||
265 | #endif | ||
266 | 98 | ||
267 | #if defined(BB_FEATURE_RM_INTERACTIVE) && defined(BB_RM) | 99 | /* Pull in the utility routines from libbb */ |
268 | int ask_confirmation(void); | 100 | #include "libbb/libbb.h" |
269 | #endif | 101 | |
102 | |||
270 | 103 | ||
271 | #endif /* _BB_INTERNAL_H_ */ | 104 | #endif /* _BB_INTERNAL_H_ */ |
diff --git a/include/libbb.h b/include/libbb.h new file mode 100644 index 000000000..a85987d9e --- /dev/null +++ b/include/libbb.h | |||
@@ -0,0 +1,209 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
2 | /* | ||
3 | * Busybox main internal header file | ||
4 | * | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | * | ||
20 | * Based in part on code from sash, Copyright (c) 1999 by David I. Bell | ||
21 | * Permission has been granted to redistribute this code under the GPL. | ||
22 | * | ||
23 | */ | ||
24 | #ifndef __LIBBB_H__ | ||
25 | #define __LIBBB_H__ 1 | ||
26 | |||
27 | #include <stdio.h> | ||
28 | #include <stdarg.h> | ||
29 | #include <sys/stat.h> | ||
30 | #include <sys/types.h> | ||
31 | |||
32 | #ifdef DMALLOC | ||
33 | #include "dmalloc.h" | ||
34 | #endif | ||
35 | |||
36 | #include <features.h> | ||
37 | /* Stupid libc doesn't have a reliable way for use to know | ||
38 | * that libc5 is being used. Assume this is good enough */ | ||
39 | #if ! defined __GLIBC__ && ! defined __UCLIBC__ | ||
40 | /* libc5 doesn't define socklen_t */ | ||
41 | typedef unsigned int socklen_t; | ||
42 | #endif | ||
43 | |||
44 | /* Some useful definitions */ | ||
45 | #define FALSE ((int) 0) | ||
46 | #define TRUE ((int) 1) | ||
47 | #define SKIP ((int) 2) | ||
48 | |||
49 | /* for mtab.c */ | ||
50 | #define MTAB_GETMOUNTPT '1' | ||
51 | #define MTAB_GETDEVICE '2' | ||
52 | |||
53 | #define BUF_SIZE 8192 | ||
54 | #define EXPAND_ALLOC 1024 | ||
55 | |||
56 | static inline int is_decimal(ch) { return ((ch >= '0') && (ch <= '9')); } | ||
57 | static inline int is_octal(ch) { return ((ch >= '0') && (ch <= '7')); } | ||
58 | |||
59 | /* Macros for min/max. */ | ||
60 | #ifndef MIN | ||
61 | #define MIN(a,b) (((a)<(b))?(a):(b)) | ||
62 | #endif | ||
63 | |||
64 | #ifndef MAX | ||
65 | #define MAX(a,b) (((a)>(b))?(a):(b)) | ||
66 | #endif | ||
67 | |||
68 | |||
69 | |||
70 | extern void show_usage(void) __attribute__ ((noreturn)); | ||
71 | extern void error_msg(const char *s, ...); | ||
72 | extern void error_msg_and_die(const char *s, ...) __attribute__ ((noreturn)); | ||
73 | extern void perror_msg(const char *s, ...); | ||
74 | extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn)); | ||
75 | |||
76 | const char *mode_string(int mode); | ||
77 | const char *time_string(time_t timeVal); | ||
78 | int is_directory(const char *name, const int followLinks, struct stat *statBuf); | ||
79 | int isDevice(const char *name); | ||
80 | |||
81 | typedef struct ino_dev_hash_bucket_struct { | ||
82 | struct ino_dev_hash_bucket_struct *next; | ||
83 | ino_t ino; | ||
84 | dev_t dev; | ||
85 | char name[1]; | ||
86 | } ino_dev_hashtable_bucket_t; | ||
87 | int is_in_ino_dev_hashtable(const struct stat *statbuf, char **name); | ||
88 | void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); | ||
89 | void reset_ino_dev_hashtable(void); | ||
90 | |||
91 | int copy_file(const char *srcName, const char *destName, | ||
92 | int setModes, int followLinks, int forceFlag); | ||
93 | int copy_file_chunk(int srcFd, int dstFd, size_t remaining); | ||
94 | char *buildName(const char *dirName, const char *fileName); | ||
95 | int makeString(int argc, const char **argv, char *buf, int bufLen); | ||
96 | char *getChunk(int size); | ||
97 | char *chunkstrdup(const char *str); | ||
98 | void freeChunks(void); | ||
99 | ssize_t safe_read(int fd, void *buf, size_t count); | ||
100 | int full_write(int fd, const char *buf, int len); | ||
101 | int full_read(int fd, char *buf, int len); | ||
102 | int recursive_action(const char *fileName, int recurse, int followLinks, int depthFirst, | ||
103 | int (*fileAction) (const char *fileName, struct stat* statbuf, void* userData), | ||
104 | int (*dirAction) (const char *fileName, struct stat* statbuf, void* userData), | ||
105 | void* userData); | ||
106 | |||
107 | extern int create_path (const char *name, int mode); | ||
108 | extern int parse_mode( const char* s, mode_t* theMode); | ||
109 | |||
110 | extern int get_kernel_revision(void); | ||
111 | |||
112 | extern int get_console_fd(char* tty_name); | ||
113 | extern struct mntent *find_mount_point(const char *name, const char *table); | ||
114 | extern void write_mtab(char* blockDevice, char* directory, | ||
115 | char* filesystemType, long flags, char* string_flags); | ||
116 | extern void erase_mtab(const char * name); | ||
117 | extern void mtab_read(void); | ||
118 | extern char *mtab_first(void **iter); | ||
119 | extern char *mtab_next(void **iter); | ||
120 | extern char *mtab_getinfo(const char *match, const char which); | ||
121 | extern int check_wildcard_match(const char* text, const char* pattern); | ||
122 | extern long atoi_w_units (const char *cp); | ||
123 | extern pid_t* find_pid_by_name( char* pidName); | ||
124 | extern int find_real_root_device_name(char* name); | ||
125 | extern char *get_line_from_file(FILE *file); | ||
126 | extern void print_file(FILE *file); | ||
127 | extern int print_file_by_name(char *filename); | ||
128 | extern char process_escape_sequence(char **ptr); | ||
129 | extern char *get_last_path_component(char *path); | ||
130 | extern FILE *wfopen(const char *path, const char *mode); | ||
131 | extern FILE *xfopen(const char *path, const char *mode); | ||
132 | extern void chomp(char *s); | ||
133 | extern void trim(char *s); | ||
134 | extern struct BB_applet *find_applet_by_name(const char *name); | ||
135 | void run_applet_by_name(const char *name, int argc, char **argv); | ||
136 | |||
137 | #ifndef DMALLOC | ||
138 | extern void *xmalloc (size_t size); | ||
139 | extern void *xrealloc(void *old, size_t size); | ||
140 | extern void *xcalloc(size_t nmemb, size_t size); | ||
141 | extern char *xstrdup (const char *s); | ||
142 | #endif | ||
143 | extern char *xstrndup (const char *s, int n); | ||
144 | extern char * safe_strncpy(char *dst, const char *src, size_t size); | ||
145 | |||
146 | struct suffix_mult { | ||
147 | char *suffix; | ||
148 | int mult; | ||
149 | }; | ||
150 | |||
151 | extern unsigned long parse_number(const char *numstr, | ||
152 | const struct suffix_mult *suffixes); | ||
153 | |||
154 | |||
155 | /* These parse entries in /etc/passwd and /etc/group. This is desirable | ||
156 | * for BusyBox since we want to avoid using the glibc NSS stuff, which | ||
157 | * increases target size and is often not needed embedded systems. */ | ||
158 | extern long my_getpwnam(const char *name); | ||
159 | extern long my_getgrnam(const char *name); | ||
160 | extern void my_getpwuid(char *name, long uid); | ||
161 | extern void my_getgrgid(char *group, long gid); | ||
162 | extern long my_getpwnamegid(const char *name); | ||
163 | |||
164 | extern int device_open(char *device, int mode); | ||
165 | |||
166 | extern int del_loop(const char *device); | ||
167 | extern int set_loop(const char *device, const char *file, int offset, int *loopro); | ||
168 | extern char *find_unused_loop_device (void); | ||
169 | |||
170 | |||
171 | #if (__GLIBC__ < 2) | ||
172 | extern int vdprintf(int d, const char *format, va_list ap); | ||
173 | #endif | ||
174 | |||
175 | int nfsmount(const char *spec, const char *node, int *flags, | ||
176 | char **extra_opts, char **mount_opts, int running_bg); | ||
177 | |||
178 | void syslog_msg_with_name(const char *name, int facility, int pri, const char *msg); | ||
179 | void syslog_msg(int facility, int pri, const char *msg); | ||
180 | |||
181 | /* Include our own copy of struct sysinfo to avoid binary compatability | ||
182 | * problems with Linux 2.4, which changed things. Grumble, grumble. */ | ||
183 | struct sysinfo { | ||
184 | long uptime; /* Seconds since boot */ | ||
185 | unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ | ||
186 | unsigned long totalram; /* Total usable main memory size */ | ||
187 | unsigned long freeram; /* Available memory size */ | ||
188 | unsigned long sharedram; /* Amount of shared memory */ | ||
189 | unsigned long bufferram; /* Memory used by buffers */ | ||
190 | unsigned long totalswap; /* Total swap space size */ | ||
191 | unsigned long freeswap; /* swap space still available */ | ||
192 | unsigned short procs; /* Number of current processes */ | ||
193 | unsigned long totalhigh; /* Total high memory size */ | ||
194 | unsigned long freehigh; /* Available high memory size */ | ||
195 | unsigned int mem_unit; /* Memory unit size in bytes */ | ||
196 | char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */ | ||
197 | }; | ||
198 | extern int sysinfo (struct sysinfo* info); | ||
199 | |||
200 | const char *make_human_readable_str(unsigned long val, unsigned long hr); | ||
201 | enum { | ||
202 | KILOBYTE = 1024, | ||
203 | MEGABYTE = (KILOBYTE*1024), | ||
204 | GIGABYTE = (MEGABYTE*1024) | ||
205 | }; | ||
206 | |||
207 | int ask_confirmation(void); | ||
208 | |||
209 | #endif /* __LIBBB_H__ */ | ||