* stty
* cut
* expr
-
+* wget (or whatever I call it)
+* tftp
+* ftp
-----------------------
Compile with debugging on, run 'nm --size-sort ./busybox'
and then start with the biggest things and make them smaller...
-
-----------------------
-
busybox.defs.h is too big and hard to follow.
Perhaps I need to add a better build system (like the Linux kernel?)
-----------------------
-
Feature request:
/bin/busybox --install -s which makes all links to commands that it
can support (an optionnal -s should be used for symbolic links instead
of hard links).
-
-----------------------
chksum = getOctal(rawHeader->chksum, sizeof(rawHeader->chksum));
header->type = rawHeader->typeflag;
header->linkname = rawHeader->linkname;
- /* Check for and relativify any absolute paths */
- if ( *(header->linkname) == '/' ) {
- static int alreadyWarned=FALSE;
-
- while (*(header->linkname) == '/')
- ++*(header->linkname);
-
- if (alreadyWarned == FALSE) {
- errorMsg("tar: Removing leading '/' from link names\n");
- alreadyWarned = TRUE;
- }
- }
header->devmajor = getOctal(rawHeader->devmajor, sizeof(rawHeader->devmajor));
header->devminor = getOctal(rawHeader->devminor, sizeof(rawHeader->devminor));
if (! *header.uname)
strcpy(header.uname, "root");
- // FIXME (or most likely not): I break Hard Links
+ /* WARNING/NOTICE: I break Hard Links */
if (S_ISLNK(statbuf->st_mode)) {
char buffer[BUFSIZ];
header.typeflag = SYMTYPE;
errorMsg("Error reading symlink '%s': %s\n", header.name, strerror(errno));
return ( FALSE);
}
- if (*buffer=='/') {
- static int alreadyWarned=FALSE;
- if (alreadyWarned==FALSE) {
- errorMsg("tar: Removing leading '/' from link names\n");
- alreadyWarned=TRUE;
- }
- strncpy(header.linkname, buffer+1, sizeof(header.linkname));
- }
- else {
- strncpy(header.linkname, buffer, sizeof(header.linkname));
- }
+ strncpy(header.linkname, buffer, sizeof(header.linkname));
} else if (S_ISDIR(statbuf->st_mode)) {
header.typeflag = DIRTYPE;
strncat(header.name, "/", sizeof(header.name));
@rm pod2html-*
pod2man --center=BusyBox --release="version $(VERSION)" busybox.pod > ../BusyBox.1
pod2text busybox.pod > ../BusyBox.txt
+ @rm -f pod2html*
clean::
@rm -f ../BusyBox.html ../BusyBox.1 ../BusyBox.txt pod2html*
int fd;
va_list arguments;
- if (
- (fd =
- device_open(logFilePath,
- O_WRONLY | O_CREAT | O_NOCTTY | O_APPEND |
- O_NONBLOCK)) >= 0) {
+ if ( (fd = device_open(logFilePath,
+ O_WRONLY | O_CREAT | O_NOCTTY | O_APPEND |
+ O_NONBLOCK)) >= 0) {
va_start(arguments, fmt);
vdprintf(fd, fmt, arguments);
va_end(arguments);
close(fd);
} else {
/* Always send console messages to /dev/console so people will see them. */
- if (
- (fd =
- device_open(_PATH_CONSOLE,
- O_WRONLY | O_NOCTTY | O_NONBLOCK)) >= 0) {
+ if ( (fd = device_open(_PATH_CONSOLE,
+ O_WRONLY | O_NOCTTY | O_NONBLOCK)) >= 0) {
va_start(arguments, fmt);
vdprintf(fd, fmt, arguments);
va_end(arguments);
signal (SIGALRM, domark);
alarm (MarkInterval);
- /* create the syslog file so realpath() can work
- * (the ugle close(open()) stuff is just a cheap
- * touch command that avoids using system (system
- * is always a bad thing to use) */
- close(open("touch " _PATH_LOG, O_RDWR | O_CREAT, 0644));
+ /* create the syslog file so realpath() can work */
+ close(open(_PATH_LOG, O_RDWR | O_CREAT, 0644));
if (realpath(_PATH_LOG, lfile) == NULL) {
- perror("Could not resolv path to " _PATH_LOG);
- exit (FALSE);
+ fatalError("Could not resolv path to " _PATH_LOG);
}
unlink (lfile);
sunx.sun_family = AF_UNIX;
strncpy (sunx.sun_path, lfile, sizeof(sunx.sun_path));
if ((sock_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
- perror ("Couldn't obtain descriptor for socket " _PATH_LOG);
- exit (FALSE);
+ fatalError ("Couldn't obtain descriptor for socket " _PATH_LOG);
}
addrLength = sizeof (sunx.sun_family) + strlen (sunx.sun_path);
if ((bind (sock_fd, (struct sockaddr *) &sunx, addrLength)) ||
(listen (sock_fd, 5))) {
- perror ("Could not connect to socket " _PATH_LOG);
- exit (FALSE);
+ fatalError ("Could not connect to socket " _PATH_LOG);
}
if (chmod (lfile, 0666) < 0) {
- perror ("Could not set permission on " _PATH_LOG);
- exit (FALSE);
+ fatalError ("Could not set permission on " _PATH_LOG);
}
FD_ZERO (&readfds);
if ((n_ready = select (FD_SETSIZE, &readfds, NULL, NULL, NULL)) < 0) {
if (errno == EINTR) continue; /* alarm may have happened. */
- perror ("select");
- exit (FALSE);
+ fatalError( "select error: %s\n", strerror(errno));
}
/* Skip stdin, stdout, stderr */
- for (fd = 3; fd <= FD_SETSIZE; fd++) {
+ for (fd = 3; fd < FD_SETSIZE; fd++) {
if (FD_ISSET (fd, &readfds)) {
if (fd == sock_fd) {
int conn;
if ((conn = accept(sock_fd, (struct sockaddr *) &sunx,
&addrLength)) < 0) {
- perror ("accept");
- exit (FALSE); /* #### ??? */
+ fatalError( "accept error: %s\n", strerror(errno));
}
FD_SET (conn, &readfds);
}
char buf[BUFSIZE];
char *q, *p;
int n_read;
+ char line[BUFSIZE];
+ unsigned char c;
- n_read = read (fd, buf, BUFSIZE);
-
- if (n_read < 0) {
- // FIXME .. fd isn't set
- perror ("read error");
- goto close_fd;
- }
- else if (n_read > 0) {
- char line[BUFSIZE];
- unsigned char c;
+ /* Keep reading stuff till there is nothing else to read */
+ while( (n_read = read (fd, buf, BUFSIZE)) > 0 && errno != EOF) {
int pri = (LOG_USER | LOG_NOTICE);
memset (line, 0, sizeof(line));
/* Now log it */
logMessage(pri, line);
-
- close_fd:
- close (fd);
- FD_CLR (fd, &readfds);
- }
- else { /* EOF */
- goto close_fd;
}
+ close (fd);
+ FD_CLR (fd, &readfds);
}
}
}
int fd;
va_list arguments;
- if (
- (fd =
- device_open(logFilePath,
- O_WRONLY | O_CREAT | O_NOCTTY | O_APPEND |
- O_NONBLOCK)) >= 0) {
+ if ( (fd = device_open(logFilePath,
+ O_WRONLY | O_CREAT | O_NOCTTY | O_APPEND |
+ O_NONBLOCK)) >= 0) {
va_start(arguments, fmt);
vdprintf(fd, fmt, arguments);
va_end(arguments);
close(fd);
} else {
/* Always send console messages to /dev/console so people will see them. */
- if (
- (fd =
- device_open(_PATH_CONSOLE,
- O_WRONLY | O_NOCTTY | O_NONBLOCK)) >= 0) {
+ if ( (fd = device_open(_PATH_CONSOLE,
+ O_WRONLY | O_NOCTTY | O_NONBLOCK)) >= 0) {
va_start(arguments, fmt);
vdprintf(fd, fmt, arguments);
va_end(arguments);
signal (SIGALRM, domark);
alarm (MarkInterval);
- /* create the syslog file so realpath() can work
- * (the ugle close(open()) stuff is just a cheap
- * touch command that avoids using system (system
- * is always a bad thing to use) */
- close(open("touch " _PATH_LOG, O_RDWR | O_CREAT, 0644));
+ /* create the syslog file so realpath() can work */
+ close(open(_PATH_LOG, O_RDWR | O_CREAT, 0644));
if (realpath(_PATH_LOG, lfile) == NULL) {
- perror("Could not resolv path to " _PATH_LOG);
- exit (FALSE);
+ fatalError("Could not resolv path to " _PATH_LOG);
}
unlink (lfile);
sunx.sun_family = AF_UNIX;
strncpy (sunx.sun_path, lfile, sizeof(sunx.sun_path));
if ((sock_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
- perror ("Couldn't obtain descriptor for socket " _PATH_LOG);
- exit (FALSE);
+ fatalError ("Couldn't obtain descriptor for socket " _PATH_LOG);
}
addrLength = sizeof (sunx.sun_family) + strlen (sunx.sun_path);
if ((bind (sock_fd, (struct sockaddr *) &sunx, addrLength)) ||
(listen (sock_fd, 5))) {
- perror ("Could not connect to socket " _PATH_LOG);
- exit (FALSE);
+ fatalError ("Could not connect to socket " _PATH_LOG);
}
if (chmod (lfile, 0666) < 0) {
- perror ("Could not set permission on " _PATH_LOG);
- exit (FALSE);
+ fatalError ("Could not set permission on " _PATH_LOG);
}
FD_ZERO (&readfds);
if ((n_ready = select (FD_SETSIZE, &readfds, NULL, NULL, NULL)) < 0) {
if (errno == EINTR) continue; /* alarm may have happened. */
- perror ("select");
- exit (FALSE);
+ fatalError( "select error: %s\n", strerror(errno));
}
/* Skip stdin, stdout, stderr */
- for (fd = 3; fd <= FD_SETSIZE; fd++) {
+ for (fd = 3; fd < FD_SETSIZE; fd++) {
if (FD_ISSET (fd, &readfds)) {
if (fd == sock_fd) {
int conn;
if ((conn = accept(sock_fd, (struct sockaddr *) &sunx,
&addrLength)) < 0) {
- perror ("accept");
- exit (FALSE); /* #### ??? */
+ fatalError( "accept error: %s\n", strerror(errno));
}
FD_SET (conn, &readfds);
}
char buf[BUFSIZE];
char *q, *p;
int n_read;
+ char line[BUFSIZE];
+ unsigned char c;
- n_read = read (fd, buf, BUFSIZE);
-
- if (n_read < 0) {
- // FIXME .. fd isn't set
- perror ("read error");
- goto close_fd;
- }
- else if (n_read > 0) {
- char line[BUFSIZE];
- unsigned char c;
+ /* Keep reading stuff till there is nothing else to read */
+ while( (n_read = read (fd, buf, BUFSIZE)) > 0 && errno != EOF) {
int pri = (LOG_USER | LOG_NOTICE);
memset (line, 0, sizeof(line));
/* Now log it */
logMessage(pri, line);
-
- close_fd:
- close (fd);
- FD_CLR (fd, &readfds);
- }
- else { /* EOF */
- goto close_fd;
}
+ close (fd);
+ FD_CLR (fd, &readfds);
}
}
}
chksum = getOctal(rawHeader->chksum, sizeof(rawHeader->chksum));
header->type = rawHeader->typeflag;
header->linkname = rawHeader->linkname;
- /* Check for and relativify any absolute paths */
- if ( *(header->linkname) == '/' ) {
- static int alreadyWarned=FALSE;
-
- while (*(header->linkname) == '/')
- ++*(header->linkname);
-
- if (alreadyWarned == FALSE) {
- errorMsg("tar: Removing leading '/' from link names\n");
- alreadyWarned = TRUE;
- }
- }
header->devmajor = getOctal(rawHeader->devmajor, sizeof(rawHeader->devmajor));
header->devminor = getOctal(rawHeader->devminor, sizeof(rawHeader->devminor));
if (! *header.uname)
strcpy(header.uname, "root");
- // FIXME (or most likely not): I break Hard Links
+ /* WARNING/NOTICE: I break Hard Links */
if (S_ISLNK(statbuf->st_mode)) {
char buffer[BUFSIZ];
header.typeflag = SYMTYPE;
errorMsg("Error reading symlink '%s': %s\n", header.name, strerror(errno));
return ( FALSE);
}
- if (*buffer=='/') {
- static int alreadyWarned=FALSE;
- if (alreadyWarned==FALSE) {
- errorMsg("tar: Removing leading '/' from link names\n");
- alreadyWarned=TRUE;
- }
- strncpy(header.linkname, buffer+1, sizeof(header.linkname));
- }
- else {
- strncpy(header.linkname, buffer, sizeof(header.linkname));
- }
+ strncpy(header.linkname, buffer, sizeof(header.linkname));
} else if (S_ISDIR(statbuf->st_mode)) {
header.typeflag = DIRTYPE;
strncat(header.name, "/", sizeof(header.name));