/*
* Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-#include "busybox.h"
#include "libbb.h"
-#ifdef L_full_version
- const char * const bb_msg_full_version = BB_BANNER " multi-call binary";
-#endif
-#ifdef L_memory_exhausted
- const char * const bb_msg_memory_exhausted = "memory exhausted";
-#endif
-#ifdef L_invalid_date
- const char * const bb_msg_invalid_date = "invalid date `%s'";
-#endif
-#ifdef L_io_error
- const char * const bb_msg_io_error = "%s: input/output error -- %m";
-#endif
-#ifdef L_write_error
- const char * const bb_msg_write_error = "Write Error";
-#endif
-#ifdef L_read_error
- const char * const bb_msg_read_error = "Read Error";
-#endif
-#ifdef L_name_longer_than_foo
- const char * const bb_msg_name_longer_than_foo = "Names longer than %d chars not supported.";
-#endif
-#ifdef L_unknown
- const char * const bb_msg_unknown = "(unknown)";
-#endif
-#ifdef L_can_not_create_raw_socket
- const char * const bb_msg_can_not_create_raw_socket = "can`t create raw socket";
-#endif
-#ifdef L_perm_denied_are_you_root
- const char * const bb_msg_perm_denied_are_you_root = "permission denied. (are you root?)";
-#endif
-#ifdef L_msg_standard_input
- const char * const bb_msg_standard_input = "standard input";
-#endif
-#ifdef L_msg_standard_output
- const char * const bb_msg_standard_output = "standard output";
+/* allow default system PATH to be extended via CFLAGS */
+#ifndef BB_ADDITIONAL_PATH
+#define BB_ADDITIONAL_PATH ""
#endif
-#ifdef L_passwd_file
-#define PASSWD_FILE "/etc/passwd"
-const char * const bb_path_passwd_file = PASSWD_FILE;
+/* allow version to be extended, via CFLAGS */
+#ifndef BB_EXTRA_VERSION
+#define BB_EXTRA_VERSION BB_BT
#endif
-#ifdef L_shadow_file
-#define SHADOW_FILE "/etc/shadow"
-const char * const bb_path_shadow_file = SHADOW_FILE;
-#endif
+#define BANNER "BusyBox v" BB_VER " (" BB_EXTRA_VERSION ")"
-#ifdef L_group_file
-#define GROUP_FILE "/etc/group"
-const char * const bb_path_group_file = GROUP_FILE;
-#endif
+const char bb_banner[] ALIGN1 = BANNER;
-#ifdef L_gshadow_file
-#define GSHADOW_FILE "/etc/gshadow"
-const char * const bb_path_gshadow_file = GSHADOW_FILE;
-#endif
-#ifdef L_nologin_file
-#define NOLOGIN_FILE "/etc/nologin"
-const char * const bb_path_nologin_file = NOLOGIN_FILE;
-#endif
+const char bb_msg_memory_exhausted[] ALIGN1 = "out of memory";
+const char bb_msg_invalid_date[] ALIGN1 = "invalid date '%s'";
+const char bb_msg_unknown[] ALIGN1 = "(unknown)";
+const char bb_msg_can_not_create_raw_socket[] ALIGN1 = "can't create raw socket";
+const char bb_msg_perm_denied_are_you_root[] ALIGN1 = "permission denied (are you root?)";
+const char bb_msg_you_must_be_root[] ALIGN1 = "you must be root";
+const char bb_msg_requires_arg[] ALIGN1 = "%s requires an argument";
+const char bb_msg_invalid_arg[] ALIGN1 = "invalid argument '%s' to '%s'";
+const char bb_msg_standard_input[] ALIGN1 = "standard input";
+const char bb_msg_standard_output[] ALIGN1 = "standard output";
-#ifdef L_securetty_file
-#define SECURETTY_FILE "/etc/securetty"
-const char * const bb_path_securetty_file = SECURETTY_FILE;
-#endif
+const char bb_hexdigits_upcase[] ALIGN1 = "0123456789ABCDEF";
-#ifdef L_motd_file
-#define MOTD_FILE "/etc/motd"
-const char * const bb_path_motd_file = MOTD_FILE;
-#endif
+const char bb_busybox_exec_path[] ALIGN1 = CONFIG_BUSYBOX_EXEC_PATH;
+const char bb_default_login_shell[] ALIGN1 = LIBBB_DEFAULT_LOGIN_SHELL;
+/* util-linux manpage says /sbin:/bin:/usr/sbin:/usr/bin,
+ * but I want to save a few bytes here. Check libbb.h before changing! */
+const char bb_PATH_root_path[] ALIGN1 =
+ "PATH=/sbin:/usr/sbin:/bin:/usr/bin" BB_ADDITIONAL_PATH;
-#ifdef L_shell_file
-const char * const bb_default_login_shell = LIBBB_DEFAULT_LOGIN_SHELL;
-#endif
-#ifdef L_bb_dev_null
-const char * const bb_dev_null = "/dev/null";
-#endif
+const int const_int_1 = 1;
+/* explicitly = 0, otherwise gcc may make it a common variable
+ * and it will end up in bss */
+const int const_int_0 = 0;
-#ifdef L_bb_common_bufsiz1
-char bb_common_bufsiz1[BUFSIZ+1];
+#if ENABLE_FEATURE_WTMP
+/* This is usually something like "/var/adm/wtmp" or "/var/log/wtmp" */
+const char bb_path_wtmp_file[] ALIGN1 =
+# if defined _PATH_WTMP
+ _PATH_WTMP;
+# elif defined WTMP_FILE
+ WTMP_FILE;
+# else
+# error unknown path to wtmp file
+# endif
#endif
+
+/* We use it for "global" data via *(struct global*)&bb_common_bufsiz1.
+ * Since gcc insists on aligning struct global's members, it would be a pity
+ * (and an alignment fault on some CPUs) to mess it up. */
+char bb_common_bufsiz1[COMMON_BUFSIZE] ALIGNED(sizeof(long long));