+ busybox --install [-s]
is almost good to go. Here is my work in progress. + Look at the FIXME in busybox.c to see what I need. The actual (sym)linking is disabled for now, although I'm sure it works ;) (Am I going to have to dig through /proc to find out where the currently running busybox is sitting?) + I put an #ifdef BB_FEATURE_INSTALLER around the new bits of code in busybox.c, and I have a #define BB_FEATURE_INSTALLER in busybox.def.h towards the bottom.
This commit is contained in:
parent
83a949cb22
commit
8f425dbf9a
@ -358,6 +358,60 @@ const struct BB_applet applets[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_INSTALLER
|
||||||
|
/*
|
||||||
|
* directory table
|
||||||
|
* this should be consistent w/ the enum, internal.h::Location,
|
||||||
|
* or else...
|
||||||
|
*/
|
||||||
|
static char* install_dir[] = {
|
||||||
|
"/",
|
||||||
|
"/bin",
|
||||||
|
"/sbin",
|
||||||
|
"/usr/bin",
|
||||||
|
"/usr/sbin",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* abstract link() */
|
||||||
|
typedef int (*__link_f)(const char *, const char *);
|
||||||
|
|
||||||
|
/* create (sym)links for each applet */
|
||||||
|
int install_links(const char *busybox, int use_symbolic_links)
|
||||||
|
{
|
||||||
|
__link_f Link = link;
|
||||||
|
|
||||||
|
char command[256];
|
||||||
|
int i;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (use_symbolic_links) Link = symlink;
|
||||||
|
|
||||||
|
for (i = 0; applets[i].name != NULL; i++) {
|
||||||
|
sprintf (
|
||||||
|
command,
|
||||||
|
"%s/%s",
|
||||||
|
install_dir[applets[i].location],
|
||||||
|
applets[i].name
|
||||||
|
);
|
||||||
|
#if 0
|
||||||
|
rc |= Link(busybox, command);
|
||||||
|
#else
|
||||||
|
puts(command);
|
||||||
|
#endif
|
||||||
|
if (rc) {
|
||||||
|
fprintf(stderr,"busybox : %s : %s\n", command, strerror(errno));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
int uninstall_links() ?
|
||||||
|
#endif
|
||||||
|
#endif /* BB_FEATURE_INSTALLER */
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -365,6 +419,26 @@ int main(int argc, char **argv)
|
|||||||
char *name;
|
char *name;
|
||||||
const struct BB_applet *a = applets;
|
const struct BB_applet *a = applets;
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_INSTALLER
|
||||||
|
if (argc > 1 && (strcmp(argv[1], "--install") == 0)) {
|
||||||
|
int use_symbolic_links = 0;
|
||||||
|
|
||||||
|
/* to use symlinks, or to not use symlinks... */
|
||||||
|
if (argc > 2) {
|
||||||
|
if ((strcmp(argv[2], "-s") == 0)) {
|
||||||
|
use_symbolic_links = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* FIXME :
|
||||||
|
* I need a clever unix trick that'll tell
|
||||||
|
* me where to find the currently running
|
||||||
|
* busybox binary
|
||||||
|
*/
|
||||||
|
return install_links("/bin/busybox", use_symbolic_links);
|
||||||
|
}
|
||||||
|
#endif /* BB_FEATURE_INSTALLER */
|
||||||
|
|
||||||
for (s = name = argv[0]; *s != '\0';) {
|
for (s = name = argv[0]; *s != '\0';) {
|
||||||
if (*s++ == '/')
|
if (*s++ == '/')
|
||||||
name = s;
|
name = s;
|
||||||
|
74
busybox.c
74
busybox.c
@ -358,6 +358,60 @@ const struct BB_applet applets[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_INSTALLER
|
||||||
|
/*
|
||||||
|
* directory table
|
||||||
|
* this should be consistent w/ the enum, internal.h::Location,
|
||||||
|
* or else...
|
||||||
|
*/
|
||||||
|
static char* install_dir[] = {
|
||||||
|
"/",
|
||||||
|
"/bin",
|
||||||
|
"/sbin",
|
||||||
|
"/usr/bin",
|
||||||
|
"/usr/sbin",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* abstract link() */
|
||||||
|
typedef int (*__link_f)(const char *, const char *);
|
||||||
|
|
||||||
|
/* create (sym)links for each applet */
|
||||||
|
int install_links(const char *busybox, int use_symbolic_links)
|
||||||
|
{
|
||||||
|
__link_f Link = link;
|
||||||
|
|
||||||
|
char command[256];
|
||||||
|
int i;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (use_symbolic_links) Link = symlink;
|
||||||
|
|
||||||
|
for (i = 0; applets[i].name != NULL; i++) {
|
||||||
|
sprintf (
|
||||||
|
command,
|
||||||
|
"%s/%s",
|
||||||
|
install_dir[applets[i].location],
|
||||||
|
applets[i].name
|
||||||
|
);
|
||||||
|
#if 0
|
||||||
|
rc |= Link(busybox, command);
|
||||||
|
#else
|
||||||
|
puts(command);
|
||||||
|
#endif
|
||||||
|
if (rc) {
|
||||||
|
fprintf(stderr,"busybox : %s : %s\n", command, strerror(errno));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
int uninstall_links() ?
|
||||||
|
#endif
|
||||||
|
#endif /* BB_FEATURE_INSTALLER */
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -365,6 +419,26 @@ int main(int argc, char **argv)
|
|||||||
char *name;
|
char *name;
|
||||||
const struct BB_applet *a = applets;
|
const struct BB_applet *a = applets;
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_INSTALLER
|
||||||
|
if (argc > 1 && (strcmp(argv[1], "--install") == 0)) {
|
||||||
|
int use_symbolic_links = 0;
|
||||||
|
|
||||||
|
/* to use symlinks, or to not use symlinks... */
|
||||||
|
if (argc > 2) {
|
||||||
|
if ((strcmp(argv[2], "-s") == 0)) {
|
||||||
|
use_symbolic_links = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* FIXME :
|
||||||
|
* I need a clever unix trick that'll tell
|
||||||
|
* me where to find the currently running
|
||||||
|
* busybox binary
|
||||||
|
*/
|
||||||
|
return install_links("/bin/busybox", use_symbolic_links);
|
||||||
|
}
|
||||||
|
#endif /* BB_FEATURE_INSTALLER */
|
||||||
|
|
||||||
for (s = name = argv[0]; *s != '\0';) {
|
for (s = name = argv[0]; *s != '\0';) {
|
||||||
if (*s++ == '/')
|
if (*s++ == '/')
|
||||||
name = s;
|
name = s;
|
||||||
|
@ -230,6 +230,11 @@
|
|||||||
//#define BB_FEATURE_INSMOD_VERSION_CHECKING
|
//#define BB_FEATURE_INSMOD_VERSION_CHECKING
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
// Enable busybox --install [-s]
|
||||||
|
// to create links (or symlinks) for all the commands that are
|
||||||
|
// compiled into the binary.
|
||||||
|
#define BB_FEATURE_INSTALLER
|
||||||
|
//
|
||||||
// End of Features List
|
// End of Features List
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user