/*
* Busybox main internal header file
*
- * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
- *
* Based in part on code from sash, Copyright (c) 1999 by David I. Bell
* Permission has been granted to redistribute this code under the GPL.
- *
+ *
+ * Licensed under the GPL version 2, see the file LICENSE in this tarball.
*/
#ifndef __LIBBUSYBOX_H__
#define __LIBBUSYBOX_H__ 1
#ifdef CONFIG_LOCALE_SUPPORT
#include <locale.h>
+#else
+#define setlocale(x,y)
#endif
#include "pwd_.h"
extern void llist_free(llist_t *elm, void (*freeit)(void *data));
+enum {
+ LOGMODE_NONE = 0,
+ LOGMODE_STDIO = 1<<0,
+ LOGMODE_SYSLOG = 1<<1,
+ LOGMODE_BOTH = LOGMODE_SYSLOG + LOGMODE_STDIO,
+};
+extern const char *msg_eol;
+extern int logmode;
+extern int die_sleep;
+
extern void bb_show_usage(void) ATTRIBUTE_NORETURN ATTRIBUTE_EXTERNALLY_VISIBLE;
extern void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
extern void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
extern void bb_perror_nomsg_and_die(void) ATTRIBUTE_NORETURN;
extern void bb_perror_nomsg(void);
+extern void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
+
/* These two are used internally -- you shouldn't need to use them */
-extern void bb_verror_msg(const char *s, va_list p) __attribute__ ((format (printf, 1, 0)));
+extern void bb_verror_msg(const char *s, va_list p, const char *strerr) __attribute__ ((format (printf, 1, 0)));
extern void bb_vperror_msg(const char *s, va_list p) __attribute__ ((format (printf, 1, 0)));
+extern void bb_vinfo_msg(const char *s, va_list p) __attribute__ ((format (printf, 1, 0)));
extern int bb_echo(int argc, char** argv);
extern int bb_test(int argc, char** argv);
extern int bb_fclose_nonstdin(FILE *f);
extern void bb_fflush_stdout_and_exit(int retval) ATTRIBUTE_NORETURN;
-extern void xstat(const char *filename, struct stat *buf);
+extern void xstat(char *filename, struct stat *buf);
extern int xsocket(int domain, int type, int protocol);
extern pid_t spawn(char **argv);
extern pid_t xspawn(char **argv);
extern int bb_printf(const char * __restrict format, ...)
__attribute__ ((format (printf, 1, 2)));
-#if ENABLE_NITPICK
-#warning rename to xferror_filename?
-#endif
extern void xferror(FILE *fp, const char *fn);
extern void xferror_stdout(void);
extern void xfflush_stdout(void);
extern long bb_xgetlarg10_sfx(const char *arg, const struct suffix_mult *suffixes);
-#if ENABLE_NITPICK
-#warning pitchable now?
-#endif
extern unsigned long bb_xparse_number(const char *numstr,
const struct suffix_mult *suffixes);
extern int vdprintf(int d, const char *format, va_list ap);
#endif
-int nfsmount(const char *spec, const char *node, int *flags,
- char **mount_opts, int running_bg);
-
/* Include our own copy of struct sysinfo to avoid binary compatibility
* problems with Linux 2.4, which changed things. Grumble, grumble. */
struct sysinfo {
char *concat_subpath_file(const char *path, const char *filename);
char *last_char_is(const char *s, int c);
-#if ENABLE_NITPICK
-#warning yuk!
-#endif
char *fgets_str(FILE *file, const char *terminating_string);
extern int uncompress(int fd_in, int fd_out);
extern unsigned short bb_lookup_port(const char *port, const char *protocol, unsigned short default_port);
extern void bb_lookup_host(struct sockaddr_in *s_in, const char *host);
-#if ENABLE_NITPICK
-#warning wrap this?
-#endif
+// This is declared here rather than #including <libgen.h> in order to avoid
+// confusing the two versions of basename. See the dirname/basename man page
+// for details.
char *dirname (char *path);
int bb_make_directory (char *path, long mode, int flags);
extern const char *bb_applet_name;
-extern const char * const bb_msg_full_version;
-extern const char * const bb_msg_memory_exhausted;
-extern const char * const bb_msg_invalid_date;
-extern const char * const bb_msg_io_error;
-extern const char * const bb_msg_read_error;
-extern const char * const bb_msg_write_error;
-extern const char * const bb_msg_name_longer_than_foo;
-extern const char * const bb_msg_unknown;
-extern const char * const bb_msg_can_not_create_raw_socket;
-extern const char * const bb_msg_perm_denied_are_you_root;
-extern const char * const bb_msg_requires_arg;
-extern const char * const bb_msg_invalid_arg;
-extern const char * const bb_msg_standard_input;
-extern const char * const bb_msg_standard_output;
-
-extern const char * const bb_path_nologin_file;
-extern const char * const bb_path_passwd_file;
-extern const char * const bb_path_shadow_file;
-extern const char * const bb_path_gshadow_file;
-extern const char * const bb_path_group_file;
-extern const char * const bb_path_securetty_file;
-extern const char * const bb_path_motd_file;
-extern const char * const bb_path_wtmp_file;
-extern const char * const bb_dev_null;
+extern const char bb_msg_full_version[];
+extern const char bb_msg_memory_exhausted[];
+extern const char bb_msg_invalid_date[];
+extern const char bb_msg_io_error[];
+extern const char bb_msg_read_error[];
+extern const char bb_msg_write_error[];
+extern const char bb_msg_name_longer_than_foo[];
+extern const char bb_msg_unknown[];
+extern const char bb_msg_can_not_create_raw_socket[];
+extern const char bb_msg_perm_denied_are_you_root[];
+extern const char bb_msg_requires_arg[];
+extern const char bb_msg_invalid_arg[];
+extern const char bb_msg_standard_input[];
+extern const char bb_msg_standard_output[];
+
+extern const char bb_path_nologin_file[];
+extern const char bb_path_passwd_file[];
+extern const char bb_path_shadow_file[];
+extern const char bb_path_gshadow_file[];
+extern const char bb_path_group_file[];
+extern const char bb_path_securetty_file[];
+extern const char bb_path_motd_file[];
+extern const char bb_path_wtmp_file[];
+extern const char bb_dev_null[];
#ifndef BUFSIZ
#define BUFSIZ 4096
*/
#define LIBBB_DEFAULT_LOGIN_SHELL "-/bin/sh"
-extern const char * const bb_default_login_shell;
+extern const char bb_default_login_shell[];
/* "/bin/sh" */
#define DEFAULT_SHELL (bb_default_login_shell+1)
/* "sh" */
#define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6)
-extern char bb_path_mtab_file[];
+extern const char bb_path_mtab_file[];
extern int bb_default_error_retval;
#endif
-#if ENABLE_NITPICK
-#warning put these in .o files
-#endif
/* The following devices are the same on devfs and non-devfs systems. */
#define CURRENT_TTY "/dev/tty"
#define CONSOLE_DEV "/dev/console"
#define FAIL_DELAY 3
extern void bb_do_delay(int seconds);
-extern void change_identity ( const struct passwd *pw );
-extern const char *change_identity_e2str ( const struct passwd *pw );
-extern void run_shell ( const char *shell, int loginshell, const char *command, const char **additional_args);
+extern void change_identity(const struct passwd *pw);
+extern const char *change_identity_e2str(const struct passwd *pw);
+extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args);
#ifdef CONFIG_SELINUX
extern void renew_current_security_context(void);
extern void set_current_security_context(security_context_t sid);
extern void xlseek(int fd, off_t offset, int whence);
extern void xwrite(int fd, void *buf, size_t count);
+extern const char bb_uuenc_tbl_base64[];
+extern const char bb_uuenc_tbl_std[];
+extern void bb_uuencode(const unsigned char *s, char *store, const int length, const char *tbl);
+
#ifndef COMM_LEN
#ifdef TASK_COMM_LEN
#define COMM_LEN TASK_COMM_LEN