#include <errno.h>
#include <stdlib.h>
#include "busybox.h"
+#ifdef BB_LOCALE_SUPPORT
+#include <locale.h>
+#endif
-#define bb_need_full_version
-#define BB_DECLARE_EXTERN
-#include "messages.c"
-
-static int been_there_done_that = 0;
+int been_there_done_that = 0; /* Also used in applets.c */
const char *applet_name;
#ifdef BB_FEATURE_INSTALLER
*/
static char *busybox_fullpath()
{
- pid_t pid;
- char path[256];
- char proc[256];
- int len;
-
- pid = getpid();
- sprintf(proc, "/proc/%d/exe", pid);
- len = readlink(proc, path, 256);
- if (len != -1) {
- path[len] = 0;
- } else {
- perror_msg("%s", proc);
- return NULL;
- }
- return strdup(path);
+ return xreadlink("/proc/self/exe");
}
/* create (sym)links for each applet */
{
__link_f Link = link;
- char command[256];
+ char *fpc;
int i;
int rc;
Link = symlink;
for (i = 0; applets[i].name != NULL; i++) {
- sprintf ( command, "%s/%s",
- install_dir[applets[i].location], applets[i].name);
- rc = Link(busybox, command);
-
- if (rc) {
- perror_msg("%s", command);
+ fpc = concat_path_file(
+ install_dir[applets[i].location], applets[i].name);
+ rc = Link(busybox, fpc);
+ if (rc!=0 && errno!=EEXIST) {
+ perror_msg("%s", fpc);
}
+ free(fpc);
}
}
#ifdef BB_SH
/* Add in a special case hack -- whenever **argv == '-'
- * (i.e. '-su' or '-sh') always invoke the shell */
+ * (i.e., '-su' or '-sh') always invoke the shell */
if (**argv == '-' && *(*argv+1)!= '-') {
- exit(((*(shell_main)) (argc, argv)));
+ applet_name = "sh";
+ }
+#endif
+
+#ifdef BB_LOCALE_SUPPORT
+#ifdef BB_INIT
+ if(getpid()!=1) /* Do not set locale for `init' */
+#endif
+ {
+ setlocale(LC_ALL, "");
}
#endif