1 | /* vi: set sw=4 ts=4: */
|
---|
2 | /*
|
---|
3 | * Busybox main internal header file
|
---|
4 | *
|
---|
5 | * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
|
---|
6 | *
|
---|
7 | * Based in part on code from sash, Copyright (c) 1999 by David I. Bell
|
---|
8 | * Permission has been granted to redistribute this code under the GPL.
|
---|
9 | *
|
---|
10 | */
|
---|
11 | #ifndef __LIBBUSYBOX_H__
|
---|
12 | #define __LIBBUSYBOX_H__ 1
|
---|
13 |
|
---|
14 | #include "bb_config.h"
|
---|
15 | #include "platform.h"
|
---|
16 |
|
---|
17 | #include <ctype.h>
|
---|
18 | #include <dirent.h>
|
---|
19 | #include <fcntl.h>
|
---|
20 | #include <inttypes.h>
|
---|
21 | #include <netdb.h>
|
---|
22 | #include <stdio.h>
|
---|
23 | #include <stdlib.h>
|
---|
24 | #include <stdarg.h>
|
---|
25 | #include <string.h>
|
---|
26 | #include <strings.h>
|
---|
27 | #include <sys/socket.h>
|
---|
28 | #include <sys/stat.h>
|
---|
29 | #include <sys/time.h>
|
---|
30 | #include <sys/types.h>
|
---|
31 | #include <termios.h>
|
---|
32 | #include <unistd.h>
|
---|
33 |
|
---|
34 | #ifdef CONFIG_SELINUX
|
---|
35 | #include <selinux/selinux.h>
|
---|
36 | #endif
|
---|
37 |
|
---|
38 | #include "pwd_.h"
|
---|
39 | #include "grp_.h"
|
---|
40 | #ifdef CONFIG_FEATURE_SHADOWPASSWDS
|
---|
41 | #include "shadow_.h"
|
---|
42 | #endif
|
---|
43 | #ifdef CONFIG_FEATURE_SHA1_PASSWORDS
|
---|
44 | # include "sha1.h"
|
---|
45 | #endif
|
---|
46 |
|
---|
47 | /* Try to pull in PATH_MAX */
|
---|
48 | #include <limits.h>
|
---|
49 | #include <sys/param.h>
|
---|
50 | #ifndef PATH_MAX
|
---|
51 | #define PATH_MAX 256
|
---|
52 | #endif
|
---|
53 |
|
---|
54 | #ifdef DMALLOC
|
---|
55 | #include <dmalloc.h>
|
---|
56 | #endif
|
---|
57 |
|
---|
58 | /* Some useful definitions */
|
---|
59 | #undef FALSE
|
---|
60 | #define FALSE ((int) 0)
|
---|
61 | #undef TRUE
|
---|
62 | #define TRUE ((int) 1)
|
---|
63 | #undef SKIP
|
---|
64 | #define SKIP ((int) 2)
|
---|
65 |
|
---|
66 | /* for mtab.c */
|
---|
67 | #define MTAB_GETMOUNTPT '1'
|
---|
68 | #define MTAB_GETDEVICE '2'
|
---|
69 |
|
---|
70 | #define BUF_SIZE 8192
|
---|
71 | #define EXPAND_ALLOC 1024
|
---|
72 |
|
---|
73 | /* Macros for min/max. */
|
---|
74 | #ifndef MIN
|
---|
75 | #define MIN(a,b) (((a)<(b))?(a):(b))
|
---|
76 | #endif
|
---|
77 |
|
---|
78 | #ifndef MAX
|
---|
79 | #define MAX(a,b) (((a)>(b))?(a):(b))
|
---|
80 | #endif
|
---|
81 |
|
---|
82 | /* buffer allocation schemes */
|
---|
83 | #ifdef CONFIG_FEATURE_BUFFERS_GO_ON_STACK
|
---|
84 | #define RESERVE_CONFIG_BUFFER(buffer,len) char buffer[len]
|
---|
85 | #define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char buffer[len]
|
---|
86 | #define RELEASE_CONFIG_BUFFER(buffer) ((void)0)
|
---|
87 | #else
|
---|
88 | #ifdef CONFIG_FEATURE_BUFFERS_GO_IN_BSS
|
---|
89 | #define RESERVE_CONFIG_BUFFER(buffer,len) static char buffer[len]
|
---|
90 | #define RESERVE_CONFIG_UBUFFER(buffer,len) static unsigned char buffer[len]
|
---|
91 | #define RELEASE_CONFIG_BUFFER(buffer) ((void)0)
|
---|
92 | #else
|
---|
93 | #define RESERVE_CONFIG_BUFFER(buffer,len) char *buffer=xmalloc(len)
|
---|
94 | #define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char *buffer=xmalloc(len)
|
---|
95 | #define RELEASE_CONFIG_BUFFER(buffer) free (buffer)
|
---|
96 | #endif
|
---|
97 | #endif
|
---|
98 |
|
---|
99 |
|
---|
100 | typedef struct llist_s {
|
---|
101 | char *data;
|
---|
102 | struct llist_s *link;
|
---|
103 | } llist_t;
|
---|
104 | extern void llist_add_to(llist_t **old_head, void *data);
|
---|
105 | extern void llist_add_to_end(llist_t **list_head, void *data);
|
---|
106 | extern void *llist_pop(llist_t **elm);
|
---|
107 | extern void llist_free(llist_t *elm, void (*freeit)(void *data));
|
---|
108 |
|
---|
109 |
|
---|
110 | extern void bb_show_usage(void) ATTRIBUTE_NORETURN ATTRIBUTE_EXTERNALLY_VISIBLE;
|
---|
111 | extern void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
---|
112 | extern void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
---|
113 | extern void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
---|
114 | extern void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
---|
115 | extern void bb_vherror_msg(const char *s, va_list p);
|
---|
116 | extern void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
---|
117 | extern void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
---|
118 |
|
---|
119 | extern void bb_perror_nomsg_and_die(void) ATTRIBUTE_NORETURN;
|
---|
120 | extern void bb_perror_nomsg(void);
|
---|
121 |
|
---|
122 | /* These two are used internally -- you shouldn't need to use them */
|
---|
123 | extern void bb_verror_msg(const char *s, va_list p) __attribute__ ((format (printf, 1, 0)));
|
---|
124 | extern void bb_vperror_msg(const char *s, va_list p) __attribute__ ((format (printf, 1, 0)));
|
---|
125 |
|
---|
126 | extern int bb_echo(int argc, char** argv);
|
---|
127 | extern int bb_test(int argc, char** argv);
|
---|
128 |
|
---|
129 | extern const char *bb_mode_string(int mode);
|
---|
130 | extern int is_directory(const char *name, int followLinks, struct stat *statBuf);
|
---|
131 | extern DIR *bb_opendir(const char *path);
|
---|
132 | extern DIR *bb_xopendir(const char *path);
|
---|
133 |
|
---|
134 | extern int remove_file(const char *path, int flags);
|
---|
135 | extern int copy_file(const char *source, const char *dest, int flags);
|
---|
136 | extern ssize_t safe_read(int fd, void *buf, size_t count);
|
---|
137 | extern ssize_t bb_full_read(int fd, void *buf, size_t len);
|
---|
138 | extern ssize_t safe_write(int fd, const void *buf, size_t count);
|
---|
139 | extern ssize_t bb_full_write(int fd, const void *buf, size_t len);
|
---|
140 | extern int recursive_action(const char *fileName, int recurse,
|
---|
141 | int followLinks, int depthFirst,
|
---|
142 | int (*fileAction) (const char *fileName, struct stat* statbuf, void* userData),
|
---|
143 | int (*dirAction) (const char *fileName, struct stat* statbuf, void* userData),
|
---|
144 | void* userData);
|
---|
145 |
|
---|
146 | extern int bb_parse_mode( const char* s, mode_t* theMode);
|
---|
147 | extern long bb_xgetlarg(const char *arg, int base, long lower, long upper);
|
---|
148 |
|
---|
149 | extern unsigned int tty_baud_to_value(speed_t speed);
|
---|
150 | extern speed_t tty_value_to_baud(unsigned int value);
|
---|
151 |
|
---|
152 | extern int get_linux_version_code(void);
|
---|
153 |
|
---|
154 | extern int get_console_fd(void);
|
---|
155 | extern struct mntent *find_mount_point(const char *name, const char *table);
|
---|
156 | extern void erase_mtab(const char * name);
|
---|
157 | extern long *find_pid_by_name( const char* pidName);
|
---|
158 | extern long *pidlist_reverse(long *pidList);
|
---|
159 | extern char *find_block_device(char *path);
|
---|
160 | extern char *bb_get_line_from_file(FILE *file);
|
---|
161 | extern char *bb_get_chomped_line_from_file(FILE *file);
|
---|
162 | extern char *bb_get_chunk_from_file(FILE *file, int *end);
|
---|
163 | extern int bb_copyfd_size(int fd1, int fd2, const off_t size);
|
---|
164 | extern int bb_copyfd_eof(int fd1, int fd2);
|
---|
165 | extern void bb_xprint_and_close_file(FILE *file);
|
---|
166 | extern int bb_xprint_file_by_name(const char *filename);
|
---|
167 | extern char bb_process_escape_sequence(const char **ptr);
|
---|
168 | extern char *bb_get_last_path_component(char *path);
|
---|
169 | extern FILE *bb_wfopen(const char *path, const char *mode);
|
---|
170 | extern FILE *bb_wfopen_input(const char *filename);
|
---|
171 | extern FILE *bb_xfopen(const char *path, const char *mode);
|
---|
172 |
|
---|
173 | extern int bb_fclose_nonstdin(FILE *f);
|
---|
174 | extern void bb_fflush_stdout_and_exit(int retval) ATTRIBUTE_NORETURN;
|
---|
175 |
|
---|
176 | extern void xstat(const char *filename, struct stat *buf);
|
---|
177 | extern int bb_xsocket(int domain, int type, int protocol);
|
---|
178 | extern pid_t bb_spawn(char **argv);
|
---|
179 | extern pid_t bb_xspawn(char **argv);
|
---|
180 | extern int wait4pid(int pid);
|
---|
181 | extern void bb_xdaemon(int nochdir, int noclose);
|
---|
182 | extern void bb_xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
|
---|
183 | extern void bb_xlisten(int s, int backlog);
|
---|
184 | extern void bb_xchdir(const char *path);
|
---|
185 | extern void xsetgid(gid_t gid);
|
---|
186 | extern void xsetuid(uid_t uid);
|
---|
187 |
|
---|
188 | #define BB_GETOPT_ERROR 0x80000000UL
|
---|
189 | extern const char *bb_opt_complementally;
|
---|
190 | extern const struct option *bb_applet_long_options;
|
---|
191 | extern unsigned long bb_getopt_ulflags(int argc, char **argv, const char *applet_opts, ...);
|
---|
192 |
|
---|
193 | extern int bb_vfprintf(FILE * __restrict stream, const char * __restrict format,
|
---|
194 | va_list arg) __attribute__ ((format (printf, 2, 0)));
|
---|
195 | extern int bb_vprintf(const char * __restrict format, va_list arg)
|
---|
196 | __attribute__ ((format (printf, 1, 0)));
|
---|
197 | extern int bb_fprintf(FILE * __restrict stream, const char * __restrict format, ...)
|
---|
198 | __attribute__ ((format (printf, 2, 3)));
|
---|
199 | extern int bb_printf(const char * __restrict format, ...)
|
---|
200 | __attribute__ ((format (printf, 1, 2)));
|
---|
201 |
|
---|
202 | //#warning rename to xferror_filename?
|
---|
203 | extern void bb_xferror(FILE *fp, const char *fn);
|
---|
204 | extern void bb_xferror_stdout(void);
|
---|
205 | extern void bb_xfflush_stdout(void);
|
---|
206 |
|
---|
207 | extern void bb_warn_ignoring_args(int n);
|
---|
208 |
|
---|
209 | extern void chomp(char *s);
|
---|
210 | extern void trim(char *s);
|
---|
211 | extern char *skip_whitespace(const char *);
|
---|
212 |
|
---|
213 | extern struct BB_applet *find_applet_by_name(const char *name);
|
---|
214 | void run_applet_by_name(const char *name, int argc, char **argv);
|
---|
215 |
|
---|
216 | /* dmalloc will redefine these to it's own implementation. It is safe
|
---|
217 | * to have the prototypes here unconditionally. */
|
---|
218 | extern void *xmalloc(size_t size);
|
---|
219 | extern void *xrealloc(void *old, size_t size);
|
---|
220 | extern void *xzalloc(size_t size);
|
---|
221 | extern void *xcalloc(size_t nmemb, size_t size);
|
---|
222 |
|
---|
223 | extern char *bb_xstrdup (const char *s);
|
---|
224 | extern char *bb_xstrndup (const char *s, int n);
|
---|
225 | extern char *safe_strncpy(char *dst, const char *src, size_t size);
|
---|
226 | extern int safe_strtoi(char *arg, int* value);
|
---|
227 | extern int safe_strtod(char *arg, double* value);
|
---|
228 | extern int safe_strtol(char *arg, long* value);
|
---|
229 | extern int safe_strtoul(char *arg, unsigned long* value);
|
---|
230 |
|
---|
231 | struct suffix_mult {
|
---|
232 | const char *suffix;
|
---|
233 | unsigned int mult;
|
---|
234 | };
|
---|
235 |
|
---|
236 | extern unsigned long bb_xgetularg_bnd_sfx(const char *arg, int base,
|
---|
237 | unsigned long lower,
|
---|
238 | unsigned long upper,
|
---|
239 | const struct suffix_mult *suffixes);
|
---|
240 | extern unsigned long bb_xgetularg_bnd(const char *arg, int base,
|
---|
241 | unsigned long lower,
|
---|
242 | unsigned long upper);
|
---|
243 | extern unsigned long bb_xgetularg10_bnd(const char *arg,
|
---|
244 | unsigned long lower,
|
---|
245 | unsigned long upper);
|
---|
246 | extern unsigned long bb_xgetularg10(const char *arg);
|
---|
247 |
|
---|
248 | extern long bb_xgetlarg_bnd_sfx(const char *arg, int base,
|
---|
249 | long lower,
|
---|
250 | long upper,
|
---|
251 | const struct suffix_mult *suffixes);
|
---|
252 | extern long bb_xgetlarg10_sfx(const char *arg, const struct suffix_mult *suffixes);
|
---|
253 |
|
---|
254 |
|
---|
255 | //#warning pitchable now?
|
---|
256 | extern unsigned long bb_xparse_number(const char *numstr,
|
---|
257 | const struct suffix_mult *suffixes);
|
---|
258 |
|
---|
259 |
|
---|
260 | /* These parse entries in /etc/passwd and /etc/group. This is desirable
|
---|
261 | * for BusyBox since we want to avoid using the glibc NSS stuff, which
|
---|
262 | * increases target size and is often not needed on embedded systems. */
|
---|
263 | extern long bb_xgetpwnam(const char *name);
|
---|
264 | extern long bb_xgetgrnam(const char *name);
|
---|
265 | extern char * bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);
|
---|
266 | extern char * bb_getpwuid(char *name, long uid, int bufsize);
|
---|
267 | extern char * bb_getgrgid(char *group, long gid, int bufsize);
|
---|
268 | extern char *bb_askpass(int timeout, const char * prompt);
|
---|
269 |
|
---|
270 | extern int device_open(const char *device, int mode);
|
---|
271 |
|
---|
272 | extern char *query_loop(const char *device);
|
---|
273 | extern int del_loop(const char *device);
|
---|
274 | extern int set_loop(char **device, const char *file, int offset);
|
---|
275 |
|
---|
276 | #if (__GLIBC__ < 2)
|
---|
277 | extern int vdprintf(int d, const char *format, va_list ap);
|
---|
278 | #endif
|
---|
279 |
|
---|
280 | int nfsmount(const char *spec, const char *node, int *flags,
|
---|
281 | char **mount_opts, int running_bg);
|
---|
282 |
|
---|
283 | /* Include our own copy of struct sysinfo to avoid binary compatibility
|
---|
284 | * problems with Linux 2.4, which changed things. Grumble, grumble. */
|
---|
285 | struct sysinfo {
|
---|
286 | long uptime; /* Seconds since boot */
|
---|
287 | unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
|
---|
288 | unsigned long totalram; /* Total usable main memory size */
|
---|
289 | unsigned long freeram; /* Available memory size */
|
---|
290 | unsigned long sharedram; /* Amount of shared memory */
|
---|
291 | unsigned long bufferram; /* Memory used by buffers */
|
---|
292 | unsigned long totalswap; /* Total swap space size */
|
---|
293 | unsigned long freeswap; /* swap space still available */
|
---|
294 | unsigned short procs; /* Number of current processes */
|
---|
295 | unsigned short pad; /* Padding needed for m68k */
|
---|
296 | unsigned long totalhigh; /* Total high memory size */
|
---|
297 | unsigned long freehigh; /* Available high memory size */
|
---|
298 | unsigned int mem_unit; /* Memory unit size in bytes */
|
---|
299 | char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
|
---|
300 | };
|
---|
301 | extern int sysinfo (struct sysinfo* info);
|
---|
302 |
|
---|
303 | enum {
|
---|
304 | KILOBYTE = 1024,
|
---|
305 | MEGABYTE = (KILOBYTE*1024),
|
---|
306 | GIGABYTE = (MEGABYTE*1024)
|
---|
307 | };
|
---|
308 | const char *make_human_readable_str(unsigned long long size,
|
---|
309 | unsigned long block_size, unsigned long display_unit);
|
---|
310 |
|
---|
311 | int bb_ask_confirmation(void);
|
---|
312 | int klogctl(int type, char * b, int len);
|
---|
313 |
|
---|
314 | char *xgetcwd(char *cwd);
|
---|
315 | char *xreadlink(const char *path);
|
---|
316 | char *concat_path_file(const char *path, const char *filename);
|
---|
317 | char *concat_subpath_file(const char *path, const char *filename);
|
---|
318 | char *last_char_is(const char *s, int c);
|
---|
319 |
|
---|
320 | int read_package_field(const char *package_buffer, char **field_name, char **field_value);
|
---|
321 | //#warning yuk!
|
---|
322 | char *fgets_str(FILE *file, const char *terminating_string);
|
---|
323 |
|
---|
324 | extern int uncompress(int fd_in, int fd_out);
|
---|
325 | extern int inflate(int in, int out);
|
---|
326 |
|
---|
327 | extern struct hostent *xgethostbyname(const char *name);
|
---|
328 | extern struct hostent *xgethostbyname2(const char *name, int af);
|
---|
329 | extern int create_icmp_socket(void);
|
---|
330 | extern int create_icmp6_socket(void);
|
---|
331 | extern int xconnect(struct sockaddr_in *s_addr);
|
---|
332 | extern unsigned short bb_lookup_port(const char *port, const char *protocol, unsigned short default_port);
|
---|
333 | extern void bb_lookup_host(struct sockaddr_in *s_in, const char *host);
|
---|
334 |
|
---|
335 | //#warning wrap this?
|
---|
336 | char *dirname (char *path);
|
---|
337 |
|
---|
338 | int bb_make_directory (char *path, long mode, int flags);
|
---|
339 |
|
---|
340 | const char *u_signal_names(const char *str_sig, int *signo, int startnum);
|
---|
341 | char *bb_simplify_path(const char *path);
|
---|
342 |
|
---|
343 | enum { /* DO NOT CHANGE THESE VALUES! cp.c depends on them. */
|
---|
344 | FILEUTILS_PRESERVE_STATUS = 1,
|
---|
345 | FILEUTILS_DEREFERENCE = 2,
|
---|
346 | FILEUTILS_RECUR = 4,
|
---|
347 | FILEUTILS_FORCE = 8,
|
---|
348 | FILEUTILS_INTERACTIVE = 16
|
---|
349 | };
|
---|
350 |
|
---|
351 | extern const char *bb_applet_name;
|
---|
352 |
|
---|
353 | extern const char * const bb_msg_full_version;
|
---|
354 | extern const char * const bb_msg_memory_exhausted;
|
---|
355 | extern const char * const bb_msg_invalid_date;
|
---|
356 | extern const char * const bb_msg_io_error;
|
---|
357 | extern const char * const bb_msg_read_error;
|
---|
358 | extern const char * const bb_msg_write_error;
|
---|
359 | extern const char * const bb_msg_name_longer_than_foo;
|
---|
360 | extern const char * const bb_msg_unknown;
|
---|
361 | extern const char * const bb_msg_can_not_create_raw_socket;
|
---|
362 | extern const char * const bb_msg_perm_denied_are_you_root;
|
---|
363 | extern const char * const bb_msg_requires_arg;
|
---|
364 | extern const char * const bb_msg_invalid_arg;
|
---|
365 | extern const char * const bb_msg_standard_input;
|
---|
366 | extern const char * const bb_msg_standard_output;
|
---|
367 |
|
---|
368 | extern const char * const bb_path_nologin_file;
|
---|
369 | extern const char * const bb_path_passwd_file;
|
---|
370 | extern const char * const bb_path_shadow_file;
|
---|
371 | extern const char * const bb_path_gshadow_file;
|
---|
372 | extern const char * const bb_path_group_file;
|
---|
373 | extern const char * const bb_path_securetty_file;
|
---|
374 | extern const char * const bb_path_motd_file;
|
---|
375 | extern const char * const bb_path_wtmp_file;
|
---|
376 | extern const char * const bb_dev_null;
|
---|
377 |
|
---|
378 | #ifndef BUFSIZ
|
---|
379 | #define BUFSIZ 4096
|
---|
380 | #endif
|
---|
381 | extern char bb_common_bufsiz1[BUFSIZ+1];
|
---|
382 |
|
---|
383 | /*
|
---|
384 | * You can change LIBBB_DEFAULT_LOGIN_SHELL, but don`t use,
|
---|
385 | * use bb_default_login_shell and next defines,
|
---|
386 | * if you LIBBB_DEFAULT_LOGIN_SHELL change,
|
---|
387 | * don`t lose change increment constant!
|
---|
388 | */
|
---|
389 | #define LIBBB_DEFAULT_LOGIN_SHELL "-/bin/sh"
|
---|
390 |
|
---|
391 | extern const char * const bb_default_login_shell;
|
---|
392 | /* "/bin/sh" */
|
---|
393 | #define DEFAULT_SHELL (bb_default_login_shell+1)
|
---|
394 | /* "sh" */
|
---|
395 | #define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6)
|
---|
396 |
|
---|
397 |
|
---|
398 | extern const char bb_path_mtab_file[];
|
---|
399 |
|
---|
400 | extern int bb_default_error_retval;
|
---|
401 |
|
---|
402 | #ifdef CONFIG_FEATURE_DEVFS
|
---|
403 | # define CURRENT_VC "/dev/vc/0"
|
---|
404 | # define VC_1 "/dev/vc/1"
|
---|
405 | # define VC_2 "/dev/vc/2"
|
---|
406 | # define VC_3 "/dev/vc/3"
|
---|
407 | # define VC_4 "/dev/vc/4"
|
---|
408 | # define VC_5 "/dev/vc/5"
|
---|
409 | #if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__)
|
---|
410 | /* Yes, this sucks, but both SH (including sh64) and H8 have a SCI(F) for their
|
---|
411 | respective serial ports .. as such, we can't use the common device paths for
|
---|
412 | these. -- PFM */
|
---|
413 | # define SC_0 "/dev/ttsc/0"
|
---|
414 | # define SC_1 "/dev/ttsc/1"
|
---|
415 | # define SC_FORMAT "/dev/ttsc/%d"
|
---|
416 | #else
|
---|
417 | # define SC_0 "/dev/tts/0"
|
---|
418 | # define SC_1 "/dev/tts/1"
|
---|
419 | # define SC_FORMAT "/dev/tts/%d"
|
---|
420 | #endif
|
---|
421 | # define VC_FORMAT "/dev/vc/%d"
|
---|
422 | # define LOOP_FORMAT "/dev/loop/%d"
|
---|
423 | # define FB_0 "/dev/fb/0"
|
---|
424 | #else
|
---|
425 | # define CURRENT_VC "/dev/tty0"
|
---|
426 | # define VC_1 "/dev/tty1"
|
---|
427 | # define VC_2 "/dev/tty2"
|
---|
428 | # define VC_3 "/dev/tty3"
|
---|
429 | # define VC_4 "/dev/tty4"
|
---|
430 | # define VC_5 "/dev/tty5"
|
---|
431 | #if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__)
|
---|
432 | # define SC_0 "/dev/ttySC0"
|
---|
433 | # define SC_1 "/dev/ttySC1"
|
---|
434 | # define SC_FORMAT "/dev/ttySC%d"
|
---|
435 | #else
|
---|
436 | # define SC_0 "/dev/ttyS0"
|
---|
437 | # define SC_1 "/dev/ttyS1"
|
---|
438 | # define SC_FORMAT "/dev/ttyS%d"
|
---|
439 | #endif
|
---|
440 | # define VC_FORMAT "/dev/tty%d"
|
---|
441 | # define LOOP_FORMAT "/dev/loop%d"
|
---|
442 | # define FB_0 "/dev/fb0"
|
---|
443 | #endif
|
---|
444 |
|
---|
445 | //#warning put these in .o files
|
---|
446 |
|
---|
447 | /* The following devices are the same on devfs and non-devfs systems. */
|
---|
448 | #define CURRENT_TTY "/dev/tty"
|
---|
449 | #define CONSOLE_DEV "/dev/console"
|
---|
450 |
|
---|
451 | int is_in_ino_dev_hashtable(const struct stat *statbuf, char **name);
|
---|
452 | void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name);
|
---|
453 | void reset_ino_dev_hashtable(void);
|
---|
454 |
|
---|
455 | char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
|
---|
456 |
|
---|
457 | #define FAIL_DELAY 3
|
---|
458 | extern void bb_do_delay(int seconds);
|
---|
459 | extern void change_identity ( const struct passwd *pw );
|
---|
460 | extern const char *change_identity_e2str ( const struct passwd *pw );
|
---|
461 | extern void run_shell ( const char *shell, int loginshell, const char *command, const char **additional_args);
|
---|
462 | #ifdef CONFIG_SELINUX
|
---|
463 | extern void renew_current_security_context(void);
|
---|
464 | extern void set_current_security_context(security_context_t sid);
|
---|
465 | #endif
|
---|
466 | extern int run_parts(char **args, const unsigned char test_mode, char **env);
|
---|
467 | extern int restricted_shell ( const char *shell );
|
---|
468 | extern void setup_environment ( const char *shell, int loginshell, int changeenv, const struct passwd *pw );
|
---|
469 | extern int correct_password ( const struct passwd *pw );
|
---|
470 | extern char *pw_encrypt(const char *clear, const char *salt);
|
---|
471 | extern struct spwd *pwd_to_spwd(const struct passwd *pw);
|
---|
472 | extern int obscure(const char *old, const char *newval, const struct passwd *pwdp);
|
---|
473 |
|
---|
474 | extern int bb_xopen(const char *pathname, int flags);
|
---|
475 | extern int bb_xopen3(const char *pathname, int flags, int mode);
|
---|
476 | extern ssize_t bb_xread(int fd, void *buf, size_t count);
|
---|
477 | extern void bb_xread_all(int fd, void *buf, size_t count);
|
---|
478 | extern unsigned char bb_xread_char(int fd);
|
---|
479 |
|
---|
480 | #ifndef COMM_LEN
|
---|
481 | #ifdef TASK_COMM_LEN
|
---|
482 | #define COMM_LEN TASK_COMM_LEN
|
---|
483 | #else
|
---|
484 | /* synchronize with sizeof(task_struct.comm) in /usr/include/linux/sched.h */
|
---|
485 | #define COMM_LEN 16
|
---|
486 | #endif
|
---|
487 | #endif
|
---|
488 | typedef struct {
|
---|
489 | int pid;
|
---|
490 | char user[9];
|
---|
491 | char state[4];
|
---|
492 | unsigned long rss;
|
---|
493 | int ppid;
|
---|
494 | #ifdef CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
|
---|
495 | unsigned pcpu;
|
---|
496 | unsigned pscpu;
|
---|
497 | unsigned long stime, utime;
|
---|
498 | #endif
|
---|
499 | char *cmd;
|
---|
500 |
|
---|
501 | /* basename of executable file in call to exec(2),
|
---|
502 | size from kernel headers */
|
---|
503 | char short_cmd[COMM_LEN];
|
---|
504 | } procps_status_t;
|
---|
505 |
|
---|
506 | extern procps_status_t * procps_scan(int save_user_arg0);
|
---|
507 | extern int compare_string_array(const char * const string_array[], const char *key);
|
---|
508 |
|
---|
509 | extern int my_query_module(const char *name, int which, void **buf, size_t *bufsize, size_t *ret);
|
---|
510 |
|
---|
511 | extern void print_login_issue(const char *issue_file, const char *tty);
|
---|
512 | extern void print_login_prompt(void);
|
---|
513 |
|
---|
514 | #ifdef BB_NOMMU
|
---|
515 | extern void vfork_daemon(int nochdir, int noclose);
|
---|
516 | extern void vfork_daemon_rexec(int nochdir, int noclose,
|
---|
517 | int argc, char **argv, char *foreground_opt);
|
---|
518 | #endif
|
---|
519 |
|
---|
520 | extern int get_terminal_width_height(int fd, int *width, int *height);
|
---|
521 | extern unsigned long get_ug_id(const char *s, long (*__bb_getxxnam)(const char *));
|
---|
522 |
|
---|
523 | typedef struct _sha1_ctx_t_ {
|
---|
524 | uint32_t count[2];
|
---|
525 | uint32_t hash[5];
|
---|
526 | uint32_t wbuf[16];
|
---|
527 | } sha1_ctx_t;
|
---|
528 |
|
---|
529 | void sha1_begin(sha1_ctx_t *ctx);
|
---|
530 | void sha1_hash(const void *data, size_t length, sha1_ctx_t *ctx);
|
---|
531 | void *sha1_end(void *resbuf, sha1_ctx_t *ctx);
|
---|
532 |
|
---|
533 | typedef struct _md5_ctx_t_ {
|
---|
534 | uint32_t A;
|
---|
535 | uint32_t B;
|
---|
536 | uint32_t C;
|
---|
537 | uint32_t D;
|
---|
538 | uint64_t total;
|
---|
539 | uint32_t buflen;
|
---|
540 | char buffer[128];
|
---|
541 | } md5_ctx_t;
|
---|
542 |
|
---|
543 | void md5_begin(md5_ctx_t *ctx);
|
---|
544 | void md5_hash(const void *data, size_t length, md5_ctx_t *ctx);
|
---|
545 | void *md5_end(void *resbuf, md5_ctx_t *ctx);
|
---|
546 |
|
---|
547 | extern uint32_t *bb_crc32_filltable (int endian);
|
---|
548 |
|
---|
549 | #ifndef RB_POWER_OFF
|
---|
550 | /* Stop system and switch power off if possible. */
|
---|
551 | #define RB_POWER_OFF 0x4321fedc
|
---|
552 | #endif
|
---|
553 |
|
---|
554 | extern const char BB_BANNER[];
|
---|
555 |
|
---|
556 | #endif /* __LIBBUSYBOX_H__ */
|
---|