Added sfdisk. Ststic-ified a bunch of stuff.

This commit is contained in:
Eric Andersen 1999-10-19 20:03:34 +00:00
parent a3f09076ef
commit e77ae3a2c0
61 changed files with 4029 additions and 504 deletions

View File

@ -22,3 +22,7 @@ Please see the top of the source files for more precise indivigual
copyright and license info.
This program suite may be distributed under the GNU General Public License.
Please send patches, suggestions, insults, and bribes to <andersee@debian.org>.

6
README
View File

@ -17,11 +17,15 @@ using C++ comments (//)
After the build is complete a busybox.links file is generated to allow
you to easily make the sym/hard links to the busybox binary.
Note the modular system is Makefile based, and purposly very
Note the modular system is Makefile based, and purposely very
simplistic. It does no dependency checking. That is left for you
to figure out by trial and error.
Please feed patches back to:
Erik Andersen <andersee@deban.org>
and
Bruce Perens <bruce@perens.com>
and
Dave Cinege <dcinege@psychosis.com>
and:
Enrique Zanardi <ezanardi@ull.es>

View File

@ -14,7 +14,7 @@ static const struct Applet applets[] = {
{"block_device", block_device_main},
#endif
#ifdef BB_CAT //bin
{"cat", cat_more_main},
{"cat", cat_main},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chmod", chmod_chown_chgrp_main},
@ -43,7 +43,7 @@ static const struct Applet applets[] = {
{"dmesg", dmesg_main},
#endif
#ifdef BB_DUTMP //usr/sbin
{"dutmp", cat_more_main},
{"dutmp", dutmp_main},
#endif
#ifdef BB_FDFLUSH //bin
{"fdflush", fdflush_main},
@ -123,6 +123,10 @@ static const struct Applet applets[] = {
#ifdef BB_RMDIR //bin
{"rmdir", rmdir_main},
#endif
#ifdef BB_SFDISK //sbin
{"fdisk", sfdisk_main},
{"sfdisk", sfdisk_main},
#endif
#ifdef BB_SLEEP //bin
{"sleep", sleep_main},
#endif

View File

@ -11,7 +11,7 @@
#error you need zcat to have gzip support!
#endif
const char gzip_usage[] = "gzip\nignores all command line arguments\ncompress stdin to stdout with -9 compression\n";
static const char gzip_usage[] = "gzip\nignores all command line arguments\ncompress stdin to stdout with -9 compression\n";
/* gzip.h -- common declarations for all gzip modules
* Copyright (C) 1992-1993 Jean-loup Gailly.
@ -380,7 +380,7 @@ extern int block_mode; /* block compress mode -C compatible with 2.0 */
# undef LZW
#endif
/* $Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $ */
/* $Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $ */
/* tailor.h -- target dependent definitions
* Copyright (C) 1992-1993 Jean-loup Gailly.
* This is free software; you can redistribute it and/or modify it under the
@ -391,7 +391,7 @@ extern int block_mode; /* block compress mode -C compatible with 2.0 */
* The target dependent functions should be defined in tailor.c.
*/
/* $Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $ */
/* $Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $ */
#if defined(__MSDOS__) && !defined(MSDOS)
# define MSDOS
@ -767,7 +767,7 @@ extern int block_mode; /* block compress mode -C compatible with 2.0 */
#endif
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
/* ===========================================================================
@ -976,7 +976,7 @@ void copy_block(buf, len, header)
#include <stdio.h>
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
/* ===========================================================================
@ -1592,7 +1592,7 @@ ulg deflate()
*/
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>
@ -1925,7 +1925,7 @@ local void do_exit(int exitcode)
#include <ctype.h>
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
/* ===========================================================================
@ -2943,7 +2943,7 @@ local void set_file_type()
*/
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>
@ -3142,7 +3142,7 @@ void display_ratio(num, den, file)
*/
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>

View File

@ -12,17 +12,6 @@
#include "internal.h"
#ifdef BB_TAR
const char tar_usage[] =
"Create, extract, or list files from a TAR file\n\n"
"usage: tar -[cxtvOf] [tarFileName] [FILE] ...\n"
"\tc=create, x=extract, t=list contents, v=verbose,\n"
"\tO=extract to stdout, f=tarfile or \"-\" for stdin\n";
#include <stdio.h>
#include <dirent.h>
#include <errno.h>
@ -30,6 +19,15 @@ const char tar_usage[] =
#include <signal.h>
#include <time.h>
static const char tar_usage[] =
"Create, extract, or list files from a TAR file\n\n"
"usage: tar -[cxtvOf] [tarFileName] [FILE] ...\n"
"\tc=create, x=extract, t=list contents, v=verbose,\n"
"\tO=extract to stdout, f=tarfile or \"-\" for stdin\n";
/*
* Tar file constants.
*/
@ -1151,5 +1149,4 @@ wantFileName (const char *fileName, int fileCount, char **fileTable)
#endif
/* END CODE */

View File

@ -14,7 +14,7 @@ static const struct Applet applets[] = {
{"block_device", block_device_main},
#endif
#ifdef BB_CAT //bin
{"cat", cat_more_main},
{"cat", cat_main},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chmod", chmod_chown_chgrp_main},
@ -43,7 +43,7 @@ static const struct Applet applets[] = {
{"dmesg", dmesg_main},
#endif
#ifdef BB_DUTMP //usr/sbin
{"dutmp", cat_more_main},
{"dutmp", dutmp_main},
#endif
#ifdef BB_FDFLUSH //bin
{"fdflush", fdflush_main},
@ -123,6 +123,10 @@ static const struct Applet applets[] = {
#ifdef BB_RMDIR //bin
{"rmdir", rmdir_main},
#endif
#ifdef BB_SFDISK //sbin
{"fdisk", sfdisk_main},
{"sfdisk", sfdisk_main},
#endif
#ifdef BB_SLEEP //bin
{"sleep", sleep_main},
#endif

View File

@ -40,6 +40,7 @@
#define BB_REBOOT
#define BB_RM
#define BB_RMDIR
#define BB_SFDISK
#define BB_SLEEP
#define BB_SWAPONOFF
#define BB_SYNC

2
cat.c
View File

@ -32,7 +32,7 @@ static void print_file( FILE *file)
fflush(stdout);
}
extern int cat_more_main(int argc, char **argv)
extern int cat_main(int argc, char **argv)
{
FILE *file;

View File

@ -144,3 +144,171 @@ int chmod_chown_chgrp_main(int argc, char **argv)
exit(TRUE);
}
#ifdef fooo
#include "internal.h"
#include <pwd.h>
#include <grp.h>
#include <string.h>
#include <stdio.h>
int my_getid(const char *filename, const char *name, uid_t *id)
{
FILE *stream;
uid_t rid;
char *rname, *start, *end, buf[128];
stream=fopen(filename,"r");
while (fgets (buf, 128, stream) != NULL) {
if (buf[0] == '#')
continue;
start = buf;
end = strchr (start, ':');
if (end == NULL)
continue;
*end = '\0';
rname = start;
start = end + 1;
end = strchr (start, ':');
if (end == NULL)
continue;
start = end + 1;
rid = (uid_t) strtol (start, &end, 10);
if (end == start)
continue;
if (name) {
if (0 == strcmp(rname, name)) {
*id=rid;
return 0;
}
} else {
if ( *id == rid )
return 0;
}
}
fclose(stream);
return -1;
}
int
my_getpwuid(uid_t *uid)
{
return my_getid("/etc/passwd", NULL, uid);
}
int
my_getpwnam(char *name, uid_t *uid)
{
return my_getid("/etc/passwd", name, uid);
}
int
my_getgrgid(gid_t *gid)
{
return my_getid("/etc/group", NULL, gid);
}
int
my_getgrnam(char *name, gid_t *gid)
{
return my_getid("/etc/group", name, gid);
}
const char chown_usage[] = "chown [-R] user-name file [file ...]\n"
"\n\tThe group list is kept in the file /etc/groups.\n\n"
"\t-R:\tRecursively change the mode of all files and directories\n"
"\t\tunder the argument directory.";
int
parse_user_name(const char * s, struct FileInfo * i)
{
char * dot = strchr(s, '.');
char * end = NULL;
uid_t id = 0;
if (! dot )
dot = strchr(s, ':');
if ( dot )
*dot = '\0';
if ( my_getpwnam(s,&id) == -1 ) {
id = strtol(s,&end,10);
if ((*end != '\0') || ( my_getpwuid(&id) == -1 )) {
fprintf(stderr, "%s: no such user.\n", s);
return 1;
}
}
i->userID = id;
if ( dot ) {
if ( my_getgrnam(++dot,&id) == -1 ) {
id = strtol(dot,&end,10);
if ((*end != '\0') || ( my_getgrgid(&id) == -1 )) {
fprintf(stderr, "%s: no such group.\n", dot);
return 1;
}
}
i->groupID = id;
i->changeGroupID = 1;
}
return 0;
}
extern int
chown_main(struct FileInfo * i, int argc, char * * argv)
{
int status;
while ( argc >= 3 && strcmp("-R", argv[1]) == 0 ) {
i->recursive = 1;
argc--;
argv++;
}
if ( (status = parse_user_name(argv[1], i)) != 0 )
return status;
argv++;
argc--;
i->changeUserID = 1;
i->complainInPostProcess = 1;
return monadic_main(i, argc, argv);
}
#endif

View File

@ -75,7 +75,7 @@ do_loadfont(int fd, char *inbuf, int unit, int fontsize) {
for (i = 0; i < fontsize; i++)
memcpy(buf+(32*i), inbuf+(unit*i), unit);
#if defined( PIO_FONTX ) && !defined( sparc )
#if defined( PIO_FONTX ) && !defined( __sparc__ )
{
struct consolefontdesc cfd;
@ -196,7 +196,7 @@ loadnewfont(int fd) {
exit(1);
}
fontsize = ((psfhdr.mode & PSF_MODE512) ? 512 : 256);
#if !defined( PIO_FONTX ) || defined( sparc )
#if !defined( PIO_FONTX ) || defined( __sparc__ )
if (fontsize != 256) {
fprintf(stderr, "Only fontsize 256 supported\n");
exit(1);

View File

@ -7,7 +7,7 @@
#include <sys/ioctl.h>
const char loadkmap_usage[] = "loadkmap\n"
static const char loadkmap_usage[] = "loadkmap\n"
"\n"
"\tLoad a binary keyboard translation table from standard input.\n"
"\n";
@ -48,7 +48,7 @@ loadkmap_main(int argc, char * * argv)
if (flags[i]==1){
pos=0;
while (pos < ibuffsz) {
if ( (readsz = read(0,ibuff+pos,ibuffsz-pos)) < 0 ) {
if ( (readsz = read(0,(char *)ibuff+pos,ibuffsz-pos)) < 0 ) {
fprintf(stderr, "Error reading keymap: %s\n",
strerror(errno));
return 1;

View File

@ -32,7 +32,7 @@ static void print_file( FILE *file)
fflush(stdout);
}
extern int cat_more_main(int argc, char **argv)
extern int cat_main(int argc, char **argv)
{
FILE *file;

View File

@ -25,7 +25,7 @@
#include <utime.h>
#include <dirent.h>
const char cp_usage[] = "cp [OPTION]... SOURCE DEST\n"
static const char cp_usage[] = "cp [OPTION]... SOURCE DEST\n"
" or: cp [OPTION]... SOURCE... DIRECTORY\n"
"Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n"
"\n"

View File

@ -34,7 +34,7 @@
an RFC 822 complient date output for shell scripting
mail commands */
const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
static const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
" or: date [OPTION] [MMDDhhmm[[CC]YY][.ss]]\n"
"Display the current time in the given FORMAT, or set the system date.\n"
"\nOptions:\n\t-R\t\toutput RFC-822 compliant date string\n"

View File

@ -14,7 +14,7 @@
#include <fcntl.h>
#include <errno.h>
const char dd_usage[] =
static const char dd_usage[] =
"Copy a file, converting and formatting according to options\n\
\n\
usage: [if=name] [of=name] [bs=n] [count=n]\n\

View File

@ -5,7 +5,7 @@
#include <sys/vfs.h>
#include <fstab.h>
const char df_usage[] = "df [filesystem ...]\n"
static const char df_usage[] = "df [filesystem ...]\n"
"\n"
"\tPrint the filesystem space used and space available.\n";

View File

@ -132,7 +132,6 @@ int ls_main(int argc, char **argv)
#else
#include "internal.h"
/*
* tiny-ls.c version 0.1.0: A minimalist 'ls'
* Copyright (C) 1996 Brian Candler <B.Candler@pobox.com>
@ -175,7 +174,7 @@ int ls_main(int argc, char **argv)
* 1. requires lstat (BSD) - how do you do it without?
*/
#define FEATURE_USERNAME /* show username/groupnames (libc6 uses NSS) */
//#define FEATURE_USERNAME /* show username/groupnames (libc6 uses NSS) */
#define FEATURE_TIMESTAMPS /* show file timestamps */
#define FEATURE_AUTOWIDTH /* calculate terminal & column widths */
#define FEATURE_FILETYPECHAR /* enable -p and -F */
@ -187,8 +186,8 @@ int ls_main(int argc, char **argv)
/************************************************************************/
#if 1 /* FIXME libc 6 */
#include "internal.h"
#if !defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)
# include <linux/types.h>
#else
# include <sys/types.h>
@ -225,7 +224,7 @@ int ls_main(int argc, char **argv)
/* The 9 mode bits to test */
static const umode_t MBIT[] = {
static const mode_t MBIT[] = {
S_IRUSR, S_IWUSR, S_IXUSR,
S_IRGRP, S_IWGRP, S_IXGRP,
S_IROTH, S_IWOTH, S_IXOTH
@ -233,7 +232,7 @@ static const umode_t MBIT[] = {
/* The special bits. If set, display SMODE0/1 instead of MODE0/1 */
static const umode_t SBIT[] = {
static const mode_t SBIT[] = {
0, 0, S_ISUID,
0, 0, S_ISGID,
0, 0, S_ISVTX
@ -278,7 +277,7 @@ static unsigned char time_fmt = TIME_MOD;
static void writenum(long val, short minwidth)
{
char scratch[20];
char scratch[128];
char *p = scratch + sizeof(scratch);
short len = 0;
@ -324,7 +323,7 @@ static void tab(short col)
}
#ifdef FEATURE_FILETYPECHAR
static char append_char(umode_t mode)
static char append_char(mode_t mode)
{
if (!(opts & DISP_FTYPE))
return '\0';
@ -343,14 +342,14 @@ static char append_char(umode_t mode)
static void list_single(const char *name, struct stat *info)
{
char scratch[20];
char scratch[PATH_MAX];
short len = strlen(name);
#ifdef FEATURE_FILETYPECHAR
char append = append_char(info->st_mode);
#endif
if (display_fmt == FMT_LONG) {
umode_t mode = info->st_mode;
mode_t mode = info->st_mode;
int i;
scratch[0] = TYPECHAR(mode);

View File

@ -24,7 +24,7 @@
#include <errno.h>
#include <sys/param.h>
const char mkdir_usage[] = "Usage: mkdir [OPTION] DIRECTORY...\n"
static const char mkdir_usage[] = "Usage: mkdir [OPTION] DIRECTORY...\n"
"Create the DIRECTORY(ies), if they do not already exist\n\n"
"-m\tset permission mode (as in chmod), not rwxrwxrwx - umask\n"
"-p\tno error if existing, make parent directories as needed\n";

View File

@ -6,7 +6,7 @@
#include <fcntl.h>
#include <unistd.h>
const char mknod_usage[] = "mknod file b|c|u|p major minor\n"
static const char mknod_usage[] = "mknod file b|c|u|p major minor\n"
"\tMake special files.\n"
"\n"
"\tb:\tMake a block (buffered) device.\n"

View File

@ -136,7 +136,7 @@ static void verify __P ((char *s, char *end));
/* The value to return to the calling program. */
static int exit_status;
const char printf_usage[] = "printf format [argument...]\n";
static const char printf_usage[] = "printf format [argument...]\n";
int
printf_main(int argc, char** argv)

View File

@ -28,7 +28,7 @@
#include <errno.h>
const char touch_usage[] = "touch [-c] file [file ...]\n\n"
static const char touch_usage[] = "touch [-c] file [file ...]\n\n"
"\tUpdate the last-modified date on the given file[s].\n";

2
cp.c
View File

@ -25,7 +25,7 @@
#include <utime.h>
#include <dirent.h>
const char cp_usage[] = "cp [OPTION]... SOURCE DEST\n"
static const char cp_usage[] = "cp [OPTION]... SOURCE DEST\n"
" or: cp [OPTION]... SOURCE... DIRECTORY\n"
"Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n"
"\n"

2
date.c
View File

@ -34,7 +34,7 @@
an RFC 822 complient date output for shell scripting
mail commands */
const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
static const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
" or: date [OPTION] [MMDDhhmm[[CC]YY][.ss]]\n"
"Display the current time in the given FORMAT, or set the system date.\n"
"\nOptions:\n\t-R\t\toutput RFC-822 compliant date string\n"

2
dd.c
View File

@ -14,7 +14,7 @@
#include <fcntl.h>
#include <errno.h>
const char dd_usage[] =
static const char dd_usage[] =
"Copy a file, converting and formatting according to options\n\
\n\
usage: [if=name] [of=name] [bs=n] [count=n]\n\

2
df.c
View File

@ -5,7 +5,7 @@
#include <sys/vfs.h>
#include <fstab.h>
const char df_usage[] = "df [filesystem ...]\n"
static const char df_usage[] = "df [filesystem ...]\n"
"\n"
"\tPrint the filesystem space used and space available.\n";

128
dmesg.c
View File

@ -1,45 +1,49 @@
#include "internal.h"
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
/* dmesg.c -- Print out the contents of the kernel ring buffer
* Created: Sat Oct 9 16:19:47 1993
* Revised: Thu Oct 28 21:52:17 1993 by faith@cs.unc.edu
* Copyright 1993 Theodore Ts'o (tytso@athena.mit.edu)
* This program comes with ABSOLUTELY NO WARRANTY.
* Modifications by Rick Sladkey (jrs@world.std.com)
* from util-linux; adapted for busybox
* Larger buffersize 3 June 1998 by Nicolai Langfeldt, based on a patch
* by Peeter Joot. This was also suggested by John Hudson.
* 1999-02-22 Arkadiusz Mikiewicz <misiek@misiek.eu.org>
* - added Native Language Support
*
* from util-linux -- adapted for busybox by
* Erik Andersen <andersee@debian.org>. I ripped out Native Language
* Support, replaced getopt, added some gotos for redundant stuff.
*/
#include "internal.h"
#include <linux/unistd.h>
#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>
#define __NR_klog __NR_syslog
#if __GNU_LIBRARY__ < 5
#ifndef __alpha__
# define __NR_klogctl __NR_syslog
static inline _syscall3(int, klogctl, int, type, char *, b, int, len);
#else /* __alpha__ */
#define klogctl syslog
#endif
#if defined(__GLIBC__)
#include <sys/klog.h>
#define klog klogctl
#else
static inline _syscall3 (int, klog, int, type, char *, b, int, len)
#endif /* __GLIBC__ */
# include <sys/klog.h>
#endif
static const char dmesg_usage[] = "dmesg [-c] [-n level] [-s bufsize]\n";
static const char dmesg_usage[] = "dmesg [-c] [-n level]\n";
int dmesg_main (int argc, char **argv)
int dmesg_main( int argc, char** argv )
{
char buf[4096];
int i;
int n;
int level = 0;
int lastc;
int cmd = 3;
argc--;
argv++;
char *buf;
int bufsize=8196;
int i;
int n;
int level = 0;
int lastc;
int cmd = 3;
/* Parse any options */
while (argc && **argv == '-') {
@ -56,43 +60,57 @@ int dmesg_main (int argc, char **argv)
--argc;
++argv;
break;
case 's':
if (--argc == 0)
goto end;
bufsize = atoi (*(++argv));
--argc;
++argv;
break;
default:
goto end;
}
}
if (argc > 1) {
goto end;
}
if (cmd == 8) {
n = klog (cmd, NULL, level);
if (n < 0) {
perror ("klog");
exit (FALSE);
}
exit (TRUE);
}
if (cmd == 8) {
n = klogctl( cmd, NULL, level );
if (n < 0) {
goto klogctl_error;
}
exit( TRUE );
}
n = klog (cmd, buf, sizeof (buf));
if (n < 0) {
perror ("klog");
exit (FALSE);
}
if (bufsize < 4096) bufsize = 4096;
buf = (char*)malloc(bufsize);
n = klogctl( cmd, buf, bufsize );
if (n < 0) {
goto klogctl_error;
}
lastc = '\n';
for (i = 0; i < n; i++) {
if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') {
lastc = '\n';
for (i = 0; i < n; i++) {
if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') {
i++;
while (buf[i] >= '0' && buf[i] <= '9')
i++;
while (buf[i] >= '0' && buf[i] <= '9')
i++;
if (buf[i] == '>')
i++;
}
lastc = buf[i];
putchar (lastc);
}
if (lastc != '\n')
putchar ('\n');
exit (TRUE);
end:
if (buf[i] == '>')
i++;
}
lastc = buf[i];
putchar( lastc );
}
if (lastc != '\n')
putchar( '\n' );
exit( TRUE);
end:
usage( dmesg_usage);
exit (FALSE);
klogctl_error:
perror( "klogctl" );
exit( FALSE );
}

View File

@ -14,12 +14,12 @@
#include <stdio.h>
#include <utmp.h>
const char dutmp_usage[] = "dutmp\n"
static const char dutmp_usage[] = "dutmp\n"
"\n"
"\tDump file or stdin utmp file format to stdout, pipe delimited.\n"
"\tdutmp /var/run/utmp\n";
extern int dutmp_fn (int argc, char **argv)
static int dutmp_main (int argc, char **argv)
{
FILE *f = stdin;

View File

@ -29,7 +29,7 @@
#include <ctype.h>
const char grep_usage[] =
static const char grep_usage[] =
"grep [-ihn]... PATTERN [FILE]...\n"
"Search for PATTERN in each FILE or standard input.\n\n"
"\t-h\tsuppress the prefixing filename on output\n"

2
grep.c
View File

@ -29,7 +29,7 @@
#include <ctype.h>
const char grep_usage[] =
static const char grep_usage[] =
"grep [-ihn]... PATTERN [FILE]...\n"
"Search for PATTERN in each FILE or standard input.\n\n"
"\t-h\tsuppress the prefixing filename on output\n"

18
gzip.c
View File

@ -11,7 +11,7 @@
#error you need zcat to have gzip support!
#endif
const char gzip_usage[] = "gzip\nignores all command line arguments\ncompress stdin to stdout with -9 compression\n";
static const char gzip_usage[] = "gzip\nignores all command line arguments\ncompress stdin to stdout with -9 compression\n";
/* gzip.h -- common declarations for all gzip modules
* Copyright (C) 1992-1993 Jean-loup Gailly.
@ -380,7 +380,7 @@ extern int block_mode; /* block compress mode -C compatible with 2.0 */
# undef LZW
#endif
/* $Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $ */
/* $Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $ */
/* tailor.h -- target dependent definitions
* Copyright (C) 1992-1993 Jean-loup Gailly.
* This is free software; you can redistribute it and/or modify it under the
@ -391,7 +391,7 @@ extern int block_mode; /* block compress mode -C compatible with 2.0 */
* The target dependent functions should be defined in tailor.c.
*/
/* $Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $ */
/* $Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $ */
#if defined(__MSDOS__) && !defined(MSDOS)
# define MSDOS
@ -767,7 +767,7 @@ extern int block_mode; /* block compress mode -C compatible with 2.0 */
#endif
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
/* ===========================================================================
@ -976,7 +976,7 @@ void copy_block(buf, len, header)
#include <stdio.h>
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
/* ===========================================================================
@ -1592,7 +1592,7 @@ ulg deflate()
*/
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>
@ -1925,7 +1925,7 @@ local void do_exit(int exitcode)
#include <ctype.h>
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
/* ===========================================================================
@ -2943,7 +2943,7 @@ local void set_file_type()
*/
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>
@ -3142,7 +3142,7 @@ void display_ratio(num, den, file)
*/
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.3 1999/10/16 15:48:40 andersen Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>

2
init.c
View File

@ -300,7 +300,7 @@ configure_terminals( int serial_cons, int single_user_mode )
}
if (!first_terminal)
first_terminal = console;
#if #cpu (sparc)
#if defined (__sparc__)
if (serial_cons > 0 && !strncmp(term_ptr,"TERM=linux",10))
term_ptr = "TERM=vt100";
#endif

View File

@ -300,7 +300,7 @@ configure_terminals( int serial_cons, int single_user_mode )
}
if (!first_terminal)
first_terminal = console;
#if #cpu (sparc)
#if defined (__sparc__)
if (serial_cons > 0 && !strncmp(term_ptr,"TERM=linux",10))
term_ptr = "TERM=vt100";
#endif

View File

@ -56,7 +56,7 @@ struct Applet {
extern int busybox_main(int argc, char** argv);
extern int block_device_main(int argc, char** argv);
extern int cat_more_main(int argc, char** argv);
extern int cat_main(int argc, char** argv);
extern int more_main(int argc, char** argv);
extern int cp_main(int argc, char** argv);
extern int chmod_chown_chgrp_main(int argc, char** argv);
@ -66,6 +66,7 @@ extern int date_main(int argc, char** argv);
extern int dd_main(int argc, char** argv);
extern int df_main(int argc, char** argv);
extern int dmesg_main(int argc, char** argv);
extern int dutmp_main(int argc, char** argv);
extern int false_main(int argc, char** argv);
extern int fdisk_main(int argc, char** argv);
extern int fdflush_main(int argc, char **argv);
@ -96,11 +97,12 @@ extern int rmdir_main(int argc, char **argv);
extern int rm_main(int argc, char** argv);
extern int scan_partitions_main(int argc, char** argv);
extern int sh_main(int argc, char** argv);
extern int sfdisk_main(int argc, char** argv);
extern int sleep_main(int argc, char** argv);
extern int swap_on_off_main(int argc, char** argv);
extern int sync_main(int argc, char** argv);
extern int tar_main(int argc, char** argv);
extern int touch_main(int argc, char** argv);
extern int sync_main(int argc, char** argv);
extern int tput_main(int argc, char** argv);
extern int true_main(int argc, char** argv);
extern int tryopen_main(int argc, char** argv);

8
kill.c
View File

@ -21,20 +21,20 @@ const struct signal_name signames[] = {
#ifndef __alpha__
{"IOT", SIGIOT},
#endif
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"EMT", SIGEMT},
#else
{"BUS", SIGBUS},
#endif
{"FPE", SIGFPE},
{"KILL", SIGKILL},
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"BUS", SIGBUS},
#else
{"USR1", SIGUSR1},
#endif
{"SEGV", SIGSEGV},
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"SYS", SIGSYS},
#else
{"USR2", SIGUSR2},
@ -42,7 +42,7 @@ const struct signal_name signames[] = {
{"PIPE", SIGPIPE},
{"ALRM", SIGALRM},
{"TERM", SIGTERM},
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"URG", SIGURG},
{"STOP", SIGSTOP},
{"TSTP", SIGTSTP},

View File

@ -75,7 +75,7 @@ do_loadfont(int fd, char *inbuf, int unit, int fontsize) {
for (i = 0; i < fontsize; i++)
memcpy(buf+(32*i), inbuf+(unit*i), unit);
#if defined( PIO_FONTX ) && !defined( sparc )
#if defined( PIO_FONTX ) && !defined( __sparc__ )
{
struct consolefontdesc cfd;
@ -196,7 +196,7 @@ loadnewfont(int fd) {
exit(1);
}
fontsize = ((psfhdr.mode & PSF_MODE512) ? 512 : 256);
#if !defined( PIO_FONTX ) || defined( sparc )
#if !defined( PIO_FONTX ) || defined( __sparc__ )
if (fontsize != 256) {
fprintf(stderr, "Only fontsize 256 supported\n");
exit(1);

View File

@ -7,7 +7,7 @@
#include <sys/ioctl.h>
const char loadkmap_usage[] = "loadkmap\n"
static const char loadkmap_usage[] = "loadkmap\n"
"\n"
"\tLoad a binary keyboard translation table from standard input.\n"
"\n";
@ -48,7 +48,7 @@ loadkmap_main(int argc, char * * argv)
if (flags[i]==1){
pos=0;
while (pos < ibuffsz) {
if ( (readsz = read(0,ibuff+pos,ibuffsz-pos)) < 0 ) {
if ( (readsz = read(0,(char *)ibuff+pos,ibuffsz-pos)) < 0 ) {
fprintf(stderr, "Error reading keymap: %s\n",
strerror(errno));
return 1;

19
ls.c
View File

@ -132,7 +132,6 @@ int ls_main(int argc, char **argv)
#else
#include "internal.h"
/*
* tiny-ls.c version 0.1.0: A minimalist 'ls'
* Copyright (C) 1996 Brian Candler <B.Candler@pobox.com>
@ -175,7 +174,7 @@ int ls_main(int argc, char **argv)
* 1. requires lstat (BSD) - how do you do it without?
*/
#define FEATURE_USERNAME /* show username/groupnames (libc6 uses NSS) */
//#define FEATURE_USERNAME /* show username/groupnames (libc6 uses NSS) */
#define FEATURE_TIMESTAMPS /* show file timestamps */
#define FEATURE_AUTOWIDTH /* calculate terminal & column widths */
#define FEATURE_FILETYPECHAR /* enable -p and -F */
@ -187,8 +186,8 @@ int ls_main(int argc, char **argv)
/************************************************************************/
#if 1 /* FIXME libc 6 */
#include "internal.h"
#if !defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)
# include <linux/types.h>
#else
# include <sys/types.h>
@ -225,7 +224,7 @@ int ls_main(int argc, char **argv)
/* The 9 mode bits to test */
static const umode_t MBIT[] = {
static const mode_t MBIT[] = {
S_IRUSR, S_IWUSR, S_IXUSR,
S_IRGRP, S_IWGRP, S_IXGRP,
S_IROTH, S_IWOTH, S_IXOTH
@ -233,7 +232,7 @@ static const umode_t MBIT[] = {
/* The special bits. If set, display SMODE0/1 instead of MODE0/1 */
static const umode_t SBIT[] = {
static const mode_t SBIT[] = {
0, 0, S_ISUID,
0, 0, S_ISGID,
0, 0, S_ISVTX
@ -278,7 +277,7 @@ static unsigned char time_fmt = TIME_MOD;
static void writenum(long val, short minwidth)
{
char scratch[20];
char scratch[128];
char *p = scratch + sizeof(scratch);
short len = 0;
@ -324,7 +323,7 @@ static void tab(short col)
}
#ifdef FEATURE_FILETYPECHAR
static char append_char(umode_t mode)
static char append_char(mode_t mode)
{
if (!(opts & DISP_FTYPE))
return '\0';
@ -343,14 +342,14 @@ static char append_char(umode_t mode)
static void list_single(const char *name, struct stat *info)
{
char scratch[20];
char scratch[PATH_MAX];
short len = strlen(name);
#ifdef FEATURE_FILETYPECHAR
char append = append_char(info->st_mode);
#endif
if (display_fmt == FMT_LONG) {
umode_t mode = info->st_mode;
mode_t mode = info->st_mode;
int i;
scratch[0] = TYPECHAR(mode);

View File

@ -15,7 +15,7 @@
#include <sys/types.h>
#include <sys/stat.h>
const char makedevs_usage[] =
static const char makedevs_usage[] =
"makedevs 0.01 -- Create an entire range of device files\n\n"
"\tmakedevs /dev/ttyS c 4 64 0 63 (ttyS0-ttyS63)\n"
"\tmakedevs /dev/hda b 3 0 0 8 s (hda,hda1-hda8)\n";
@ -45,8 +45,7 @@ char buf[255];
case 'f':
mode = S_IFIFO; break;
default:
fprintf(stderr, "Usage: %s\n", makedevs_usage);
return 2;
usage( makedevs_usage);
}
mode |= 0660;

2
math.c
View File

@ -6,7 +6,7 @@
/* Tiny RPN calculator, because "expr" didn't give me bitwise operations. */
const char math_usage[] = "math expression ...";
static const char math_usage[] = "math expression ...";
static double stack[100];
static unsigned int pointer;

View File

@ -14,12 +14,12 @@
#include <stdio.h>
#include <utmp.h>
const char dutmp_usage[] = "dutmp\n"
static const char dutmp_usage[] = "dutmp\n"
"\n"
"\tDump file or stdin utmp file format to stdout, pipe delimited.\n"
"\tdutmp /var/run/utmp\n";
extern int dutmp_fn (int argc, char **argv)
static int dutmp_main (int argc, char **argv)
{
FILE *f = stdin;

View File

@ -15,7 +15,7 @@
#include <sys/types.h>
#include <sys/stat.h>
const char makedevs_usage[] =
static const char makedevs_usage[] =
"makedevs 0.01 -- Create an entire range of device files\n\n"
"\tmakedevs /dev/ttyS c 4 64 0 63 (ttyS0-ttyS63)\n"
"\tmakedevs /dev/hda b 3 0 0 8 s (hda,hda1-hda8)\n";
@ -45,8 +45,7 @@ char buf[255];
case 'f':
mode = S_IFIFO; break;
default:
fprintf(stderr, "Usage: %s\n", makedevs_usage);
return 2;
usage( makedevs_usage);
}
mode |= 0660;

View File

@ -3,7 +3,7 @@
#include <sys/mtio.h>
#include <sys/fcntl.h>
const char mt_usage[] = "mt [-f device] opcode value\n";
static const char mt_usage[] = "mt [-f device] opcode value\n";
struct mt_opcodes {
char * name;

View File

@ -24,7 +24,7 @@
#include <errno.h>
#include <sys/param.h>
const char mkdir_usage[] = "Usage: mkdir [OPTION] DIRECTORY...\n"
static const char mkdir_usage[] = "Usage: mkdir [OPTION] DIRECTORY...\n"
"Create the DIRECTORY(ies), if they do not already exist\n\n"
"-m\tset permission mode (as in chmod), not rwxrwxrwx - umask\n"
"-p\tno error if existing, make parent directories as needed\n";

View File

@ -6,7 +6,7 @@
#include <fcntl.h>
#include <unistd.h>
const char mknod_usage[] = "mknod file b|c|u|p major minor\n"
static const char mknod_usage[] = "mknod file b|c|u|p major minor\n"
"\tMake special files.\n"
"\n"
"\tb:\tMake a block (buffered) device.\n"

476
mkswap.c
View File

@ -1,4 +1,3 @@
#include "internal.h"
/*
* mkswap.c - set up a linux swap device
*
@ -9,51 +8,170 @@
/*
* 20.12.91 - time began. Got VM working yesterday by doing this by hand.
*
* Usage: mkswap [-c] device [size-in-blocks]
* Usage: mkswap [-c] [-vN] [-f] device [size-in-blocks]
*
* -c for readablility checking (use it unless you are SURE!)
* -c for readability checking. (Use it unless you are SURE!)
* -vN for swap areas version N. (Only N=0,1 known today.)
* -f for forcing swap creation even if it would smash partition table.
*
* The device may be a block device or a image of one, but this isn't
* The device may be a block device or an image of one, but this isn't
* enforced (but it's not much fun on a character device :-).
*
* Patches from jaggy@purplet.demon.co.uk (Mike Jagdis) to make the
* size-in-blocks parameter optional added Wed Feb 8 10:33:43 1995.
*
* Version 1 swap area code (for kernel 2.1.117), aeb, 981010.
*
* Sparc fixes, jj@ultra.linux.cz (Jakub Jelinek), 981201 - mangled by aeb.
* V1_MAX_PAGES fixes, jj, 990325.
*
* 1999-02-22 Arkadiusz Mikiewicz <misiek@misiek.eu.org>
* - added Native Language Support
*
* from util-linux -- adapted for busybox by
* Erik Andersen <andersee@debian.org>. I ripped out Native Language
* Support, made some stuff smaller, and fitted for life in busybox.
*
*/
#include "internal.h"
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/ioctl.h> /* for _IO */
#include <sys/utsname.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <asm/page.h> /* for PAGE_SIZE and PAGE_SHIFT */
/* we also get PAGE_SIZE via getpagesize() */
#include <asm/page.h>
#include <linux/fs.h>
#ifndef __linux__
# define volatile
static const char mkswap_usage[] = "mkswap [-c] [-v0|-v1] device [block-count]\n"
"Prepare a disk partition to be used as a swap partition.\n\n"
"\t-c\tCheck for read-ability.\n"
"\t-v0\tMake version 0 swap [max 128 Megs].\n"
"\t-v1\tMake version 1 swap [big!] (default for kernels > 2.1.117).\n"
"\tblock-count\tNumber of block to use (default is entire partition).\n";
#ifndef _IO
/* pre-1.3.45 */
#define BLKGETSIZE 0x1260
#else
/* same on i386, m68k, arm; different on alpha, mips, sparc, ppc */
#define BLKGETSIZE _IO(0x12,96)
#endif
#define TEST_BUFFER_PAGES 8
const char mkswap_usage[] = "mkswap [-c] partition [block-count]\n"
"\n"
"\tPrepare a disk partition to be used as a swap partition.\n"
"\tThe default block count is the size of the entire partition.\n"
"\n"
"\t-c:\tCheck for read-ability.\n"
"\tblock-count\tUse only this many blocks.\n";
static const char * program_name = "mkswap";
static const char * device_name = NULL;
static char * program_name = "mkswap";
static char * device_name = NULL;
static int DEV = -1;
static long PAGES = 0;
static int do_check = 0;
static int check = 0;
static int badpages = 0;
static int version = -1;
#define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r))
static long bit_test_and_set (unsigned int *addr, unsigned int nr)
static int
linux_version_code(void) {
struct utsname my_utsname;
int p, q, r;
if (uname(&my_utsname) == 0) {
p = atoi(strtok(my_utsname.release, "."));
q = atoi(strtok(NULL, "."));
r = atoi(strtok(NULL, "."));
return MAKE_VERSION(p,q,r);
}
return 0;
}
/*
* The definition of the union swap_header uses the constant PAGE_SIZE.
* Unfortunately, on some architectures this depends on the hardware model,
* and can only be found at run time -- we use getpagesize().
*/
static int pagesize;
static int *signature_page;
struct swap_header_v1 {
char bootbits[1024]; /* Space for disklabel etc. */
unsigned int version;
unsigned int last_page;
unsigned int nr_badpages;
unsigned int padding[125];
unsigned int badpages[1];
} *p;
static void
init_signature_page() {
pagesize = getpagesize();
#ifdef PAGE_SIZE
if (pagesize != PAGE_SIZE)
fprintf(stderr, "Assuming pages of size %d\n", pagesize);
#endif
signature_page = (int *) malloc(pagesize);
memset(signature_page,0,pagesize);
p = (struct swap_header_v1 *) signature_page;
}
static void
write_signature(char *sig) {
char *sp = (char *) signature_page;
strncpy(sp+pagesize-10, sig, 10);
}
#define V0_MAX_PAGES (8 * (pagesize - 10))
/* Before 2.2.0pre9 */
#define V1_OLD_MAX_PAGES ((0x7fffffff / pagesize) - 1)
/* Since 2.2.0pre9:
error if nr of pages >= SWP_OFFSET(SWP_ENTRY(0,~0UL))
with variations on
#define SWP_ENTRY(type,offset) (((type) << 1) | ((offset) << 8))
#define SWP_OFFSET(entry) ((entry) >> 8)
on the various architectures. Below the result - yuk.
Machine pagesize SWP_ENTRY SWP_OFFSET bound+1 oldbound+2
i386 2^12 o<<8 e>>8 1<<24 1<<19
mips 2^12 o<<15 e>>15 1<<17 1<<19
alpha 2^13 o<<40 e>>40 1<<24 1<<18
m68k 2^12 o<<12 e>>12 1<<20 1<<19
sparc 2^{12,13} (o&0x3ffff)<<9 (e>>9)&0x3ffff 1<<18 1<<{19,18}
sparc64 2^13 o<<13 e>>13 1<<51 1<<18
ppc 2^12 o<<8 e>>8 1<<24 1<<19
armo 2^{13,14,15} o<<8 e>>8 1<<24 1<<{18,17,16}
armv 2^12 o<<9 e>>9 1<<23 1<<19
assuming that longs have 64 bits on alpha and sparc64 and 32 bits elsewhere.
The bad part is that we need to know this since the kernel will
refuse a swap space if it is too large.
*/
/* patch from jj - why does this differ from the above? */
#if defined(__alpha__)
#define V1_MAX_PAGES ((1 << 24) - 1)
#elif defined(__mips__)
#define V1_MAX_PAGES ((1 << 17) - 1)
#elif defined(__sparc_v9__)
#define V1_MAX_PAGES ((3 << 29) - 1)
#elif defined(__sparc__)
#define V1_MAX_PAGES (pagesize == 8192 ? ((3 << 29) - 1) : ((1 << 18) - 1))
#else
#define V1_MAX_PAGES V1_OLD_MAX_PAGES
#endif
/* man page now says:
The maximum useful size of a swap area now depends on the architecture.
It is roughly 2GB on i386, PPC, m68k, ARM, 1GB on sparc, 512MB on mips,
128GB on alpha and 3TB on sparc64.
*/
#define MAX_BADPAGES ((pagesize-1024-128*sizeof(int)-10)/sizeof(int))
static void bit_set (unsigned int *addr, unsigned int nr)
{
unsigned int r, m;
@ -61,7 +179,6 @@ static long bit_test_and_set (unsigned int *addr, unsigned int nr)
r = *addr;
m = 1 << (nr & (8 * sizeof(int) - 1));
*addr = r | m;
return (r & m) != 0;
}
static int bit_test_and_clear (unsigned int *addr, unsigned int nr)
@ -75,47 +192,59 @@ static int bit_test_and_clear (unsigned int *addr, unsigned int nr)
return (r & m) != 0;
}
/*
* Volatile to let gcc know that this doesn't return. When trying
* to compile this under minix, volatile gives a warning, as
* exit() isn't defined as volatile under minix.
*/
volatile void fatal_error(const char * fmt_string)
{
fprintf(stderr,fmt_string,program_name,device_name);
exit(FALSE);
void
die(const char *str) {
fprintf(stderr, "%s: %s\n", program_name, str);
exit( FALSE);
}
#define die(str) fatal_error("%s: " str "\n")
void
page_ok(int page) {
if (version==0)
bit_set(signature_page, page);
}
static void check_blocks(int * signature_page)
{
void
page_bad(int page) {
if (version == 0)
bit_test_and_clear(signature_page, page);
else {
if (badpages == MAX_BADPAGES)
die("too many bad pages");
p->badpages[badpages] = page;
}
badpages++;
}
void
check_blocks(void) {
unsigned int current_page;
int do_seek = 1;
char buffer[PAGE_SIZE];
char *buffer;
buffer = malloc(pagesize);
if (!buffer)
die("Out of memory");
current_page = 0;
while (current_page < PAGES) {
if (!do_check) {
bit_test_and_set(signature_page,current_page++);
if (!check) {
page_ok(current_page++);
continue;
} else {
printf("\r%d", current_page);
}
if (do_seek && lseek(DEV,current_page*PAGE_SIZE,SEEK_SET) !=
current_page*PAGE_SIZE)
if (do_seek && lseek(DEV,current_page*pagesize,SEEK_SET) !=
current_page*pagesize)
die("seek failed in check_blocks");
if ( (do_seek = (PAGE_SIZE != read(DEV, buffer, PAGE_SIZE))) ) {
bit_test_and_clear(signature_page,current_page++);
badpages++;
if ((do_seek = (pagesize != read(DEV, buffer, pagesize)))) {
page_bad(current_page++);
continue;
}
bit_test_and_set(signature_page,current_page++);
page_ok(current_page++);
}
if (do_check)
printf("\n");
if (badpages)
printf("%d bad page%s\n",badpages,(badpages>1)?"s":"");
if (badpages == 1)
printf("one bad page\n");
else if (badpages > 1)
printf("%d bad pages\n", badpages);
}
static long valid_offset (int fd, int offset)
@ -129,12 +258,13 @@ static long valid_offset (int fd, int offset)
return 1;
}
static int count_blocks (int fd)
static int
find_size (int fd)
{
int high, low;
unsigned int high, low;
low = 0;
for (high = 1; valid_offset (fd, high); high *= 2)
for (high = 1; high > 0 && valid_offset (fd, high); high *= 2)
low = high;
while (low < high - 1)
{
@ -145,108 +275,194 @@ static int count_blocks (int fd)
else
high = mid;
}
valid_offset (fd, 0);
return (low + 1);
}
static int get_size(const char *file)
/* return size in pages, to avoid integer overflow */
static long
get_size(const char *file)
{
int fd;
int size;
long size;
fd = open(file, O_RDWR);
fd = open(file, O_RDONLY);
if (fd < 0) {
perror(file);
exit(1);
}
if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
close(fd);
return (size * 512);
int sectors_per_page = pagesize/512;
size /= sectors_per_page;
} else {
size = find_size(fd) / pagesize;
}
size = count_blocks(fd);
close(fd);
return size;
}
int
mkswap(const char *device_name, int pages, int check)
{
struct stat statbuf;
int goodpages;
int signature_page[PAGE_SIZE/sizeof(int)];
PAGES = pages;
do_check = check;
memset(signature_page,0,PAGE_SIZE);
if (device_name && !PAGES) {
PAGES = get_size(device_name) / PAGE_SIZE;
}
if (!device_name || PAGES<10) {
fprintf(stderr,
"%s: error: swap area needs to be at least %ldkB\n",
program_name, 10 * PAGE_SIZE / 1024);
/* usage(mkswap_usage); */
exit(1);
}
if (PAGES > 8 * (PAGE_SIZE - 10)) {
PAGES = 8 * (PAGE_SIZE - 10);
fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n",
program_name, PAGES * PAGE_SIZE / 1024);
}
DEV = open(device_name,O_RDWR);
if (DEV < 0 || fstat(DEV, &statbuf) < 0) {
perror(device_name);
exit(1);
}
if (!S_ISBLK(statbuf.st_mode))
do_check=0;
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
die("Will not try to make swapdevice on '%s'");
check_blocks(signature_page);
if (!bit_test_and_clear(signature_page,0))
die("fatal: first page unreadable");
goodpages = PAGES - badpages - 1;
if (goodpages <= 0)
die("Unable to set up swap-space: unreadable");
printf("Setting up swapspace, size = %ld bytes\n",goodpages*PAGE_SIZE);
strncpy((char*)signature_page+PAGE_SIZE-10,"SWAP-SPACE",10);
if (lseek(DEV, 0, SEEK_SET))
die("unable to rewind swap-device");
if (PAGE_SIZE != write(DEV, signature_page, PAGE_SIZE))
die("unable to write signature page");
close(DEV);
return (TRUE);
}
int mkswap_main(int argc, char ** argv)
{
char * tmp;
long int pages=0;
int check=0;
struct stat statbuf;
int sz;
int maxpages;
int goodpages;
int offset;
int force = 0;
if (argc && *argv)
program_name = *argv;
while (argc > 1) {
init_signature_page(); /* get pagesize */
while (argc-- > 1) {
argv++;
argc--;
if (argv[0][0] != '-')
if (argv[0][0] != '-') {
if (device_name) {
pages = strtol(argv[0],&tmp,0)>>(PAGE_SHIFT-10);
if (*tmp) {
usage (mkswap_usage);
}
int blocks_per_page = pagesize/1024;
PAGES = strtol(argv[0],&tmp,0)/blocks_per_page;
if (*tmp)
usage( mkswap_usage);
} else
device_name = argv[0];
else while (*++argv[0])
switch (argv[0][0]) {
case 'c': check=1; break;
default: usage (mkswap_usage);
exit( TRUE);
} else {
switch (argv[0][1]) {
case 'c':
check=1;
break;
case 'f':
force=1;
break;
case 'v':
version=atoi(argv[0]+2);
break;
default:
usage( mkswap_usage);
}
}
}
exit( mkswap(device_name, pages, check));
if (!device_name) {
fprintf(stderr,
"%s: error: Nowhere to set up swap on?\n",
program_name);
usage( mkswap_usage);
}
sz = get_size(device_name);
if (!PAGES) {
PAGES = sz;
} else if (PAGES > sz && !force) {
fprintf(stderr,
"%s: error: "
"size %ld is larger than device size %d\n",
program_name,
PAGES*(pagesize/1024), sz*(pagesize/1024));
exit( FALSE);
}
if (version == -1) {
if (PAGES <= V0_MAX_PAGES)
version = 0;
else if (linux_version_code() < MAKE_VERSION(2,1,117))
version = 0;
else if (pagesize < 2048)
version = 0;
else
version = 1;
}
if (version != 0 && version != 1) {
fprintf(stderr, "%s: error: unknown version %d\n",
program_name, version);
usage( mkswap_usage);
}
if (PAGES < 10) {
fprintf(stderr,
"%s: error: swap area needs to be at least %ldkB\n",
program_name, (long)(10 * pagesize / 1024));
usage( mkswap_usage);
}
#if 0
maxpages = ((version == 0) ? V0_MAX_PAGES : V1_MAX_PAGES);
#else
if (!version)
maxpages = V0_MAX_PAGES;
else if (linux_version_code() >= MAKE_VERSION(2,2,1))
maxpages = V1_MAX_PAGES;
else {
maxpages = V1_OLD_MAX_PAGES;
if (maxpages > V1_MAX_PAGES)
maxpages = V1_MAX_PAGES;
}
#endif
if (PAGES > maxpages) {
PAGES = maxpages;
fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n",
program_name, PAGES * pagesize / 1024);
}
DEV = open(device_name,O_RDWR);
if (DEV < 0 || fstat(DEV, &statbuf) < 0) {
perror(device_name);
exit( FALSE);
}
if (!S_ISBLK(statbuf.st_mode))
check=0;
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
die("Will not try to make swapdevice on '%s'");
#ifdef __sparc__
if (!force && version == 0) {
/* Don't overwrite partition table unless forced */
unsigned char *buffer = (unsigned char *)signature_page;
unsigned short *q, sum;
if (read(DEV, buffer, 512) != 512)
die("fatal: first page unreadable");
if (buffer[508] == 0xDA && buffer[509] == 0xBE) {
q = (unsigned short *)(buffer + 510);
for (sum = 0; q >= (unsigned short *) buffer;)
sum ^= *q--;
if (!sum) {
fprintf(stderr, "\
%s: Device '%s' contains a valid Sun disklabel.\n\
This probably means creating v0 swap would destroy your partition table\n\
No swap created. If you really want to create swap v0 on that device, use\n\
the -f option to force it.\n",
program_name, device_name);
exit( FALSE);
}
}
}
#endif
if (version == 0 || check)
check_blocks();
if (version == 0 && !bit_test_and_clear(signature_page,0))
die("fatal: first page unreadable");
if (version == 1) {
p->version = version;
p->last_page = PAGES-1;
p->nr_badpages = badpages;
}
goodpages = PAGES - badpages - 1;
if (goodpages <= 0)
die("Unable to set up swap-space: unreadable");
printf("Setting up swapspace version %d, size = %ld bytes\n",
version, (long)(goodpages*pagesize));
write_signature((version == 0) ? "SWAP-SPACE" : "SWAPSPACE2");
offset = ((version == 0) ? 0 : 1024);
if (lseek(DEV, offset, SEEK_SET) != offset)
die("unable to rewind swap-device");
if (write(DEV,(char*)signature_page+offset, pagesize-offset)
!= pagesize-offset)
die("unable to write signature page");
/*
* A subsequent swapon() will fail if the signature
* is not actually on disk. (This is a kernel bug.)
*/
if (fsync(DEV))
die("fsync failed");
exit ( TRUE);
}

2
mnc.c
View File

@ -39,7 +39,7 @@
#define BUFSIZE 100
const char mnc_usage[] =
static const char mnc_usage[] =
"mini-netcat 0.0.3 -- Open pipe to IP:port\n"
"\tmnc [IP] [port]\n";

2
more.c
View File

@ -30,7 +30,7 @@
#include <signal.h>
const char more_usage[] = "[file ...]";
static const char more_usage[] = "[file ...]";
#ifdef BB_MORE_TERM

View File

@ -37,7 +37,7 @@
#include <ctype.h>
#include <fstab.h>
const char mount_usage[] = "Usage:\tmount [flags]\n"
static const char mount_usage[] = "Usage:\tmount [flags]\n"
"\tmount [flags] device directory [-o options,more-options]\n"
"\n"
"Flags:\n"

2
mt.c
View File

@ -3,7 +3,7 @@
#include <sys/mtio.h>
#include <sys/fcntl.h>
const char mt_usage[] = "mt [-f device] opcode value\n";
static const char mt_usage[] = "mt [-f device] opcode value\n";
struct mt_opcodes {
char * name;

View File

@ -136,7 +136,7 @@ static void verify __P ((char *s, char *end));
/* The value to return to the calling program. */
static int exit_status;
const char printf_usage[] = "printf format [argument...]\n";
static const char printf_usage[] = "printf format [argument...]\n";
int
printf_main(int argc, char** argv)

View File

@ -21,20 +21,20 @@ const struct signal_name signames[] = {
#ifndef __alpha__
{"IOT", SIGIOT},
#endif
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"EMT", SIGEMT},
#else
{"BUS", SIGBUS},
#endif
{"FPE", SIGFPE},
{"KILL", SIGKILL},
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"BUS", SIGBUS},
#else
{"USR1", SIGUSR1},
#endif
{"SEGV", SIGSEGV},
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"SYS", SIGSYS},
#else
{"USR2", SIGUSR2},
@ -42,7 +42,7 @@ const struct signal_name signames[] = {
{"PIPE", SIGPIPE},
{"ALRM", SIGALRM},
{"TERM", SIGTERM},
#if defined(sparc) || defined(__alpha__)
#if defined(__sparc__) || defined(__alpha__)
{"URG", SIGURG},
{"STOP", SIGSTOP},
{"TSTP", SIGTSTP},

2880
sfdisk.c Normal file

File diff suppressed because it is too large Load Diff

21
tar.c
View File

@ -12,17 +12,6 @@
#include "internal.h"
#ifdef BB_TAR
const char tar_usage[] =
"Create, extract, or list files from a TAR file\n\n"
"usage: tar -[cxtvOf] [tarFileName] [FILE] ...\n"
"\tc=create, x=extract, t=list contents, v=verbose,\n"
"\tO=extract to stdout, f=tarfile or \"-\" for stdin\n";
#include <stdio.h>
#include <dirent.h>
#include <errno.h>
@ -30,6 +19,15 @@ const char tar_usage[] =
#include <signal.h>
#include <time.h>
static const char tar_usage[] =
"Create, extract, or list files from a TAR file\n\n"
"usage: tar -[cxtvOf] [tarFileName] [FILE] ...\n"
"\tc=create, x=extract, t=list contents, v=verbose,\n"
"\tO=extract to stdout, f=tarfile or \"-\" for stdin\n";
/*
* Tar file constants.
*/
@ -1151,5 +1149,4 @@ wantFileName (const char *fileName, int fileCount, char **fileTable)
#endif
/* END CODE */

View File

@ -28,7 +28,7 @@
#include <errno.h>
const char touch_usage[] = "touch [-c] file [file ...]\n\n"
static const char touch_usage[] = "touch [-c] file [file ...]\n\n"
"\tUpdate the last-modified date on the given file[s].\n";

View File

@ -26,7 +26,7 @@
#include <fstab.h>
#include <errno.h>
const char umount_usage[] =
static const char umount_usage[] =
"Usage: umount filesystem\n"
" or: umount directory\n"
" or: umount -a"

View File

@ -1,45 +1,49 @@
#include "internal.h"
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
/* dmesg.c -- Print out the contents of the kernel ring buffer
* Created: Sat Oct 9 16:19:47 1993
* Revised: Thu Oct 28 21:52:17 1993 by faith@cs.unc.edu
* Copyright 1993 Theodore Ts'o (tytso@athena.mit.edu)
* This program comes with ABSOLUTELY NO WARRANTY.
* Modifications by Rick Sladkey (jrs@world.std.com)
* from util-linux; adapted for busybox
* Larger buffersize 3 June 1998 by Nicolai Langfeldt, based on a patch
* by Peeter Joot. This was also suggested by John Hudson.
* 1999-02-22 Arkadiusz Mikiewicz <misiek@misiek.eu.org>
* - added Native Language Support
*
* from util-linux -- adapted for busybox by
* Erik Andersen <andersee@debian.org>. I ripped out Native Language
* Support, replaced getopt, added some gotos for redundant stuff.
*/
#include "internal.h"
#include <linux/unistd.h>
#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>
#define __NR_klog __NR_syslog
#if __GNU_LIBRARY__ < 5
#ifndef __alpha__
# define __NR_klogctl __NR_syslog
static inline _syscall3(int, klogctl, int, type, char *, b, int, len);
#else /* __alpha__ */
#define klogctl syslog
#endif
#if defined(__GLIBC__)
#include <sys/klog.h>
#define klog klogctl
#else
static inline _syscall3 (int, klog, int, type, char *, b, int, len)
#endif /* __GLIBC__ */
# include <sys/klog.h>
#endif
static const char dmesg_usage[] = "dmesg [-c] [-n level] [-s bufsize]\n";
static const char dmesg_usage[] = "dmesg [-c] [-n level]\n";
int dmesg_main (int argc, char **argv)
int dmesg_main( int argc, char** argv )
{
char buf[4096];
int i;
int n;
int level = 0;
int lastc;
int cmd = 3;
argc--;
argv++;
char *buf;
int bufsize=8196;
int i;
int n;
int level = 0;
int lastc;
int cmd = 3;
/* Parse any options */
while (argc && **argv == '-') {
@ -56,43 +60,57 @@ int dmesg_main (int argc, char **argv)
--argc;
++argv;
break;
case 's':
if (--argc == 0)
goto end;
bufsize = atoi (*(++argv));
--argc;
++argv;
break;
default:
goto end;
}
}
if (argc > 1) {
goto end;
}
if (cmd == 8) {
n = klog (cmd, NULL, level);
if (n < 0) {
perror ("klog");
exit (FALSE);
}
exit (TRUE);
}
if (cmd == 8) {
n = klogctl( cmd, NULL, level );
if (n < 0) {
goto klogctl_error;
}
exit( TRUE );
}
n = klog (cmd, buf, sizeof (buf));
if (n < 0) {
perror ("klog");
exit (FALSE);
}
if (bufsize < 4096) bufsize = 4096;
buf = (char*)malloc(bufsize);
n = klogctl( cmd, buf, bufsize );
if (n < 0) {
goto klogctl_error;
}
lastc = '\n';
for (i = 0; i < n; i++) {
if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') {
lastc = '\n';
for (i = 0; i < n; i++) {
if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') {
i++;
while (buf[i] >= '0' && buf[i] <= '9')
i++;
while (buf[i] >= '0' && buf[i] <= '9')
i++;
if (buf[i] == '>')
i++;
}
lastc = buf[i];
putchar (lastc);
}
if (lastc != '\n')
putchar ('\n');
exit (TRUE);
end:
if (buf[i] == '>')
i++;
}
lastc = buf[i];
putchar( lastc );
}
if (lastc != '\n')
putchar( '\n' );
exit( TRUE);
end:
usage( dmesg_usage);
exit (FALSE);
klogctl_error:
perror( "klogctl" );
exit( FALSE );
}

View File

@ -1,4 +1,3 @@
#include "internal.h"
/*
* mkswap.c - set up a linux swap device
*
@ -9,51 +8,170 @@
/*
* 20.12.91 - time began. Got VM working yesterday by doing this by hand.
*
* Usage: mkswap [-c] device [size-in-blocks]
* Usage: mkswap [-c] [-vN] [-f] device [size-in-blocks]
*
* -c for readablility checking (use it unless you are SURE!)
* -c for readability checking. (Use it unless you are SURE!)
* -vN for swap areas version N. (Only N=0,1 known today.)
* -f for forcing swap creation even if it would smash partition table.
*
* The device may be a block device or a image of one, but this isn't
* The device may be a block device or an image of one, but this isn't
* enforced (but it's not much fun on a character device :-).
*
* Patches from jaggy@purplet.demon.co.uk (Mike Jagdis) to make the
* size-in-blocks parameter optional added Wed Feb 8 10:33:43 1995.
*
* Version 1 swap area code (for kernel 2.1.117), aeb, 981010.
*
* Sparc fixes, jj@ultra.linux.cz (Jakub Jelinek), 981201 - mangled by aeb.
* V1_MAX_PAGES fixes, jj, 990325.
*
* 1999-02-22 Arkadiusz Mikiewicz <misiek@misiek.eu.org>
* - added Native Language Support
*
* from util-linux -- adapted for busybox by
* Erik Andersen <andersee@debian.org>. I ripped out Native Language
* Support, made some stuff smaller, and fitted for life in busybox.
*
*/
#include "internal.h"
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/ioctl.h> /* for _IO */
#include <sys/utsname.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <asm/page.h> /* for PAGE_SIZE and PAGE_SHIFT */
/* we also get PAGE_SIZE via getpagesize() */
#include <asm/page.h>
#include <linux/fs.h>
#ifndef __linux__
# define volatile
static const char mkswap_usage[] = "mkswap [-c] [-v0|-v1] device [block-count]\n"
"Prepare a disk partition to be used as a swap partition.\n\n"
"\t-c\tCheck for read-ability.\n"
"\t-v0\tMake version 0 swap [max 128 Megs].\n"
"\t-v1\tMake version 1 swap [big!] (default for kernels > 2.1.117).\n"
"\tblock-count\tNumber of block to use (default is entire partition).\n";
#ifndef _IO
/* pre-1.3.45 */
#define BLKGETSIZE 0x1260
#else
/* same on i386, m68k, arm; different on alpha, mips, sparc, ppc */
#define BLKGETSIZE _IO(0x12,96)
#endif
#define TEST_BUFFER_PAGES 8
const char mkswap_usage[] = "mkswap [-c] partition [block-count]\n"
"\n"
"\tPrepare a disk partition to be used as a swap partition.\n"
"\tThe default block count is the size of the entire partition.\n"
"\n"
"\t-c:\tCheck for read-ability.\n"
"\tblock-count\tUse only this many blocks.\n";
static const char * program_name = "mkswap";
static const char * device_name = NULL;
static char * program_name = "mkswap";
static char * device_name = NULL;
static int DEV = -1;
static long PAGES = 0;
static int do_check = 0;
static int check = 0;
static int badpages = 0;
static int version = -1;
#define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r))
static long bit_test_and_set (unsigned int *addr, unsigned int nr)
static int
linux_version_code(void) {
struct utsname my_utsname;
int p, q, r;
if (uname(&my_utsname) == 0) {
p = atoi(strtok(my_utsname.release, "."));
q = atoi(strtok(NULL, "."));
r = atoi(strtok(NULL, "."));
return MAKE_VERSION(p,q,r);
}
return 0;
}
/*
* The definition of the union swap_header uses the constant PAGE_SIZE.
* Unfortunately, on some architectures this depends on the hardware model,
* and can only be found at run time -- we use getpagesize().
*/
static int pagesize;
static int *signature_page;
struct swap_header_v1 {
char bootbits[1024]; /* Space for disklabel etc. */
unsigned int version;
unsigned int last_page;
unsigned int nr_badpages;
unsigned int padding[125];
unsigned int badpages[1];
} *p;
static void
init_signature_page() {
pagesize = getpagesize();
#ifdef PAGE_SIZE
if (pagesize != PAGE_SIZE)
fprintf(stderr, "Assuming pages of size %d\n", pagesize);
#endif
signature_page = (int *) malloc(pagesize);
memset(signature_page,0,pagesize);
p = (struct swap_header_v1 *) signature_page;
}
static void
write_signature(char *sig) {
char *sp = (char *) signature_page;
strncpy(sp+pagesize-10, sig, 10);
}
#define V0_MAX_PAGES (8 * (pagesize - 10))
/* Before 2.2.0pre9 */
#define V1_OLD_MAX_PAGES ((0x7fffffff / pagesize) - 1)
/* Since 2.2.0pre9:
error if nr of pages >= SWP_OFFSET(SWP_ENTRY(0,~0UL))
with variations on
#define SWP_ENTRY(type,offset) (((type) << 1) | ((offset) << 8))
#define SWP_OFFSET(entry) ((entry) >> 8)
on the various architectures. Below the result - yuk.
Machine pagesize SWP_ENTRY SWP_OFFSET bound+1 oldbound+2
i386 2^12 o<<8 e>>8 1<<24 1<<19
mips 2^12 o<<15 e>>15 1<<17 1<<19
alpha 2^13 o<<40 e>>40 1<<24 1<<18
m68k 2^12 o<<12 e>>12 1<<20 1<<19
sparc 2^{12,13} (o&0x3ffff)<<9 (e>>9)&0x3ffff 1<<18 1<<{19,18}
sparc64 2^13 o<<13 e>>13 1<<51 1<<18
ppc 2^12 o<<8 e>>8 1<<24 1<<19
armo 2^{13,14,15} o<<8 e>>8 1<<24 1<<{18,17,16}
armv 2^12 o<<9 e>>9 1<<23 1<<19
assuming that longs have 64 bits on alpha and sparc64 and 32 bits elsewhere.
The bad part is that we need to know this since the kernel will
refuse a swap space if it is too large.
*/
/* patch from jj - why does this differ from the above? */
#if defined(__alpha__)
#define V1_MAX_PAGES ((1 << 24) - 1)
#elif defined(__mips__)
#define V1_MAX_PAGES ((1 << 17) - 1)
#elif defined(__sparc_v9__)
#define V1_MAX_PAGES ((3 << 29) - 1)
#elif defined(__sparc__)
#define V1_MAX_PAGES (pagesize == 8192 ? ((3 << 29) - 1) : ((1 << 18) - 1))
#else
#define V1_MAX_PAGES V1_OLD_MAX_PAGES
#endif
/* man page now says:
The maximum useful size of a swap area now depends on the architecture.
It is roughly 2GB on i386, PPC, m68k, ARM, 1GB on sparc, 512MB on mips,
128GB on alpha and 3TB on sparc64.
*/
#define MAX_BADPAGES ((pagesize-1024-128*sizeof(int)-10)/sizeof(int))
static void bit_set (unsigned int *addr, unsigned int nr)
{
unsigned int r, m;
@ -61,7 +179,6 @@ static long bit_test_and_set (unsigned int *addr, unsigned int nr)
r = *addr;
m = 1 << (nr & (8 * sizeof(int) - 1));
*addr = r | m;
return (r & m) != 0;
}
static int bit_test_and_clear (unsigned int *addr, unsigned int nr)
@ -75,47 +192,59 @@ static int bit_test_and_clear (unsigned int *addr, unsigned int nr)
return (r & m) != 0;
}
/*
* Volatile to let gcc know that this doesn't return. When trying
* to compile this under minix, volatile gives a warning, as
* exit() isn't defined as volatile under minix.
*/
volatile void fatal_error(const char * fmt_string)
{
fprintf(stderr,fmt_string,program_name,device_name);
exit(FALSE);
void
die(const char *str) {
fprintf(stderr, "%s: %s\n", program_name, str);
exit( FALSE);
}
#define die(str) fatal_error("%s: " str "\n")
void
page_ok(int page) {
if (version==0)
bit_set(signature_page, page);
}
static void check_blocks(int * signature_page)
{
void
page_bad(int page) {
if (version == 0)
bit_test_and_clear(signature_page, page);
else {
if (badpages == MAX_BADPAGES)
die("too many bad pages");
p->badpages[badpages] = page;
}
badpages++;
}
void
check_blocks(void) {
unsigned int current_page;
int do_seek = 1;
char buffer[PAGE_SIZE];
char *buffer;
buffer = malloc(pagesize);
if (!buffer)
die("Out of memory");
current_page = 0;
while (current_page < PAGES) {
if (!do_check) {
bit_test_and_set(signature_page,current_page++);
if (!check) {
page_ok(current_page++);
continue;
} else {
printf("\r%d", current_page);
}
if (do_seek && lseek(DEV,current_page*PAGE_SIZE,SEEK_SET) !=
current_page*PAGE_SIZE)
if (do_seek && lseek(DEV,current_page*pagesize,SEEK_SET) !=
current_page*pagesize)
die("seek failed in check_blocks");
if ( (do_seek = (PAGE_SIZE != read(DEV, buffer, PAGE_SIZE))) ) {
bit_test_and_clear(signature_page,current_page++);
badpages++;
if ((do_seek = (pagesize != read(DEV, buffer, pagesize)))) {
page_bad(current_page++);
continue;
}
bit_test_and_set(signature_page,current_page++);
page_ok(current_page++);
}
if (do_check)
printf("\n");
if (badpages)
printf("%d bad page%s\n",badpages,(badpages>1)?"s":"");
if (badpages == 1)
printf("one bad page\n");
else if (badpages > 1)
printf("%d bad pages\n", badpages);
}
static long valid_offset (int fd, int offset)
@ -129,12 +258,13 @@ static long valid_offset (int fd, int offset)
return 1;
}
static int count_blocks (int fd)
static int
find_size (int fd)
{
int high, low;
unsigned int high, low;
low = 0;
for (high = 1; valid_offset (fd, high); high *= 2)
for (high = 1; high > 0 && valid_offset (fd, high); high *= 2)
low = high;
while (low < high - 1)
{
@ -145,108 +275,194 @@ static int count_blocks (int fd)
else
high = mid;
}
valid_offset (fd, 0);
return (low + 1);
}
static int get_size(const char *file)
/* return size in pages, to avoid integer overflow */
static long
get_size(const char *file)
{
int fd;
int size;
long size;
fd = open(file, O_RDWR);
fd = open(file, O_RDONLY);
if (fd < 0) {
perror(file);
exit(1);
}
if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
close(fd);
return (size * 512);
int sectors_per_page = pagesize/512;
size /= sectors_per_page;
} else {
size = find_size(fd) / pagesize;
}
size = count_blocks(fd);
close(fd);
return size;
}
int
mkswap(const char *device_name, int pages, int check)
{
struct stat statbuf;
int goodpages;
int signature_page[PAGE_SIZE/sizeof(int)];
PAGES = pages;
do_check = check;
memset(signature_page,0,PAGE_SIZE);
if (device_name && !PAGES) {
PAGES = get_size(device_name) / PAGE_SIZE;
}
if (!device_name || PAGES<10) {
fprintf(stderr,
"%s: error: swap area needs to be at least %ldkB\n",
program_name, 10 * PAGE_SIZE / 1024);
/* usage(mkswap_usage); */
exit(1);
}
if (PAGES > 8 * (PAGE_SIZE - 10)) {
PAGES = 8 * (PAGE_SIZE - 10);
fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n",
program_name, PAGES * PAGE_SIZE / 1024);
}
DEV = open(device_name,O_RDWR);
if (DEV < 0 || fstat(DEV, &statbuf) < 0) {
perror(device_name);
exit(1);
}
if (!S_ISBLK(statbuf.st_mode))
do_check=0;
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
die("Will not try to make swapdevice on '%s'");
check_blocks(signature_page);
if (!bit_test_and_clear(signature_page,0))
die("fatal: first page unreadable");
goodpages = PAGES - badpages - 1;
if (goodpages <= 0)
die("Unable to set up swap-space: unreadable");
printf("Setting up swapspace, size = %ld bytes\n",goodpages*PAGE_SIZE);
strncpy((char*)signature_page+PAGE_SIZE-10,"SWAP-SPACE",10);
if (lseek(DEV, 0, SEEK_SET))
die("unable to rewind swap-device");
if (PAGE_SIZE != write(DEV, signature_page, PAGE_SIZE))
die("unable to write signature page");
close(DEV);
return (TRUE);
}
int mkswap_main(int argc, char ** argv)
{
char * tmp;
long int pages=0;
int check=0;
struct stat statbuf;
int sz;
int maxpages;
int goodpages;
int offset;
int force = 0;
if (argc && *argv)
program_name = *argv;
while (argc > 1) {
init_signature_page(); /* get pagesize */
while (argc-- > 1) {
argv++;
argc--;
if (argv[0][0] != '-')
if (argv[0][0] != '-') {
if (device_name) {
pages = strtol(argv[0],&tmp,0)>>(PAGE_SHIFT-10);
if (*tmp) {
usage (mkswap_usage);
}
int blocks_per_page = pagesize/1024;
PAGES = strtol(argv[0],&tmp,0)/blocks_per_page;
if (*tmp)
usage( mkswap_usage);
} else
device_name = argv[0];
else while (*++argv[0])
switch (argv[0][0]) {
case 'c': check=1; break;
default: usage (mkswap_usage);
exit( TRUE);
} else {
switch (argv[0][1]) {
case 'c':
check=1;
break;
case 'f':
force=1;
break;
case 'v':
version=atoi(argv[0]+2);
break;
default:
usage( mkswap_usage);
}
}
}
exit( mkswap(device_name, pages, check));
if (!device_name) {
fprintf(stderr,
"%s: error: Nowhere to set up swap on?\n",
program_name);
usage( mkswap_usage);
}
sz = get_size(device_name);
if (!PAGES) {
PAGES = sz;
} else if (PAGES > sz && !force) {
fprintf(stderr,
"%s: error: "
"size %ld is larger than device size %d\n",
program_name,
PAGES*(pagesize/1024), sz*(pagesize/1024));
exit( FALSE);
}
if (version == -1) {
if (PAGES <= V0_MAX_PAGES)
version = 0;
else if (linux_version_code() < MAKE_VERSION(2,1,117))
version = 0;
else if (pagesize < 2048)
version = 0;
else
version = 1;
}
if (version != 0 && version != 1) {
fprintf(stderr, "%s: error: unknown version %d\n",
program_name, version);
usage( mkswap_usage);
}
if (PAGES < 10) {
fprintf(stderr,
"%s: error: swap area needs to be at least %ldkB\n",
program_name, (long)(10 * pagesize / 1024));
usage( mkswap_usage);
}
#if 0
maxpages = ((version == 0) ? V0_MAX_PAGES : V1_MAX_PAGES);
#else
if (!version)
maxpages = V0_MAX_PAGES;
else if (linux_version_code() >= MAKE_VERSION(2,2,1))
maxpages = V1_MAX_PAGES;
else {
maxpages = V1_OLD_MAX_PAGES;
if (maxpages > V1_MAX_PAGES)
maxpages = V1_MAX_PAGES;
}
#endif
if (PAGES > maxpages) {
PAGES = maxpages;
fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n",
program_name, PAGES * pagesize / 1024);
}
DEV = open(device_name,O_RDWR);
if (DEV < 0 || fstat(DEV, &statbuf) < 0) {
perror(device_name);
exit( FALSE);
}
if (!S_ISBLK(statbuf.st_mode))
check=0;
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
die("Will not try to make swapdevice on '%s'");
#ifdef __sparc__
if (!force && version == 0) {
/* Don't overwrite partition table unless forced */
unsigned char *buffer = (unsigned char *)signature_page;
unsigned short *q, sum;
if (read(DEV, buffer, 512) != 512)
die("fatal: first page unreadable");
if (buffer[508] == 0xDA && buffer[509] == 0xBE) {
q = (unsigned short *)(buffer + 510);
for (sum = 0; q >= (unsigned short *) buffer;)
sum ^= *q--;
if (!sum) {
fprintf(stderr, "\
%s: Device '%s' contains a valid Sun disklabel.\n\
This probably means creating v0 swap would destroy your partition table\n\
No swap created. If you really want to create swap v0 on that device, use\n\
the -f option to force it.\n",
program_name, device_name);
exit( FALSE);
}
}
}
#endif
if (version == 0 || check)
check_blocks();
if (version == 0 && !bit_test_and_clear(signature_page,0))
die("fatal: first page unreadable");
if (version == 1) {
p->version = version;
p->last_page = PAGES-1;
p->nr_badpages = badpages;
}
goodpages = PAGES - badpages - 1;
if (goodpages <= 0)
die("Unable to set up swap-space: unreadable");
printf("Setting up swapspace version %d, size = %ld bytes\n",
version, (long)(goodpages*pagesize));
write_signature((version == 0) ? "SWAP-SPACE" : "SWAPSPACE2");
offset = ((version == 0) ? 0 : 1024);
if (lseek(DEV, offset, SEEK_SET) != offset)
die("unable to rewind swap-device");
if (write(DEV,(char*)signature_page+offset, pagesize-offset)
!= pagesize-offset)
die("unable to write signature page");
/*
* A subsequent swapon() will fail if the signature
* is not actually on disk. (This is a kernel bug.)
*/
if (fsync(DEV))
die("fsync failed");
exit ( TRUE);
}

View File

@ -30,7 +30,7 @@
#include <signal.h>
const char more_usage[] = "[file ...]";
static const char more_usage[] = "[file ...]";
#ifdef BB_MORE_TERM

View File

@ -37,7 +37,7 @@
#include <ctype.h>
#include <fstab.h>
const char mount_usage[] = "Usage:\tmount [flags]\n"
static const char mount_usage[] = "Usage:\tmount [flags]\n"
"\tmount [flags] device directory [-o options,more-options]\n"
"\n"
"Flags:\n"

View File

@ -26,7 +26,7 @@
#include <fstab.h>
#include <errno.h>
const char umount_usage[] =
static const char umount_usage[] =
"Usage: umount filesystem\n"
" or: umount directory\n"
" or: umount -a"

14
zcat.c
View File

@ -4,7 +4,7 @@
#include "internal.h"
const char zcat_usage[] = "zcat\n"
static const char zcat_usage[] = "zcat\n"
"\n"
"\tuncompress gzipped data from stdin to stdout\n";
@ -59,7 +59,7 @@ static char *license_msg[] = {
*/
#ifdef RCSID
static char rcsid[] = "$Id: zcat.c,v 1.2 1999/10/06 20:25:32 andersen Exp $";
static char rcsid[] = "$Id: zcat.c,v 1.3 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>
@ -80,7 +80,7 @@ static char rcsid[] = "$Id: zcat.c,v 1.2 1999/10/06 20:25:32 andersen Exp $";
* The target dependent functions should be defined in tailor.c.
*/
/* $Id: zcat.c,v 1.2 1999/10/06 20:25:32 andersen Exp $ */
/* $Id: zcat.c,v 1.3 1999/10/19 20:03:34 andersen Exp $ */
#define RECORD_IO 0
@ -436,7 +436,7 @@ extern int unlzw OF((int in, int out));
# undef LZW
#endif
/* $Id: zcat.c,v 1.2 1999/10/06 20:25:32 andersen Exp $ */
/* $Id: zcat.c,v 1.3 1999/10/19 20:03:34 andersen Exp $ */
/* #include "getopt.h" */
@ -895,7 +895,7 @@ RETSIGTYPE abort_gzip()
*/
#ifdef RCSID
static char rcsid[] = "$Id: zcat.c,v 1.2 1999/10/06 20:25:32 andersen Exp $";
static char rcsid[] = "$Id: zcat.c,v 1.3 1999/10/19 20:03:34 andersen Exp $";
#endif
/* #include "crypt.h" */
@ -1021,7 +1021,7 @@ int unzip(in, out)
*/
#ifdef RCSID
static char rcsid[] = "$Id: zcat.c,v 1.2 1999/10/06 20:25:32 andersen Exp $";
static char rcsid[] = "$Id: zcat.c,v 1.3 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <ctype.h>
@ -1408,7 +1408,7 @@ ulg crc_32_tab[] = {
*/
#ifdef RCSID
static char rcsid[] = "$Id: zcat.c,v 1.2 1999/10/06 20:25:32 andersen Exp $";
static char rcsid[] = "$Id: zcat.c,v 1.3 1999/10/19 20:03:34 andersen Exp $";
#endif
#include <sys/types.h>