This broke world.
On Wed, Mar 3, 2010 at 11:25 AM, Maxim Sobolev <sobo...@freebsd.org> wrote: > Author: sobomax > Date: Wed Mar 3 19:25:28 2010 > New Revision: 204654 > URL: http://svn.freebsd.org/changeset/base/204654 > > Log: > Use expand_number(3) from libutil instead of home-grown function to parse > human-friendly power-of-two numbers (i.e. 2k, 5M etc). > > Suggested by: many > MFC after: 1 week > > Modified: > head/sbin/newfs/Makefile > head/sbin/newfs/newfs.c > head/sbin/newfs/newfs.h > head/usr.bin/truncate/Makefile > head/usr.bin/truncate/truncate.c > > Modified: head/sbin/newfs/Makefile > ============================================================================== > --- head/sbin/newfs/Makefile Wed Mar 3 19:14:05 2010 (r204653) > +++ head/sbin/newfs/Makefile Wed Mar 3 19:25:28 2010 (r204654) > @@ -4,8 +4,8 @@ > .PATH: ${.CURDIR}/../../sys/geom > > PROG= newfs > -DPADD= ${LIBUFS} > -LDADD= -lufs > +DPADD= ${LIBUFS} ${LIBUTIL} > +LDADD= -lufs -lutil > SRCS= newfs.c mkfs.c geom_bsd_enc.c > > WARNS?= 3 > > Modified: head/sbin/newfs/newfs.c > ============================================================================== > --- head/sbin/newfs/newfs.c Wed Mar 3 19:14:05 2010 (r204653) > +++ head/sbin/newfs/newfs.c Wed Mar 3 19:25:28 2010 (r204654) > @@ -77,6 +77,8 @@ __FBSDID("$FreeBSD$"); > #include <syslog.h> > #include <unistd.h> > > +#include <libutil.h> > + > #include "newfs.h" > > int Eflag; /* Erase previous disk contents */ > @@ -90,19 +92,19 @@ int Jflag; /* enable gjournal for file > int lflag; /* enable multilabel for file system */ > int nflag; /* do not create .snap directory */ > intmax_t fssize; /* file system size */ > -int sectorsize; /* bytes/sector */ > +int64_t sectorsize; /* bytes/sector */ > int realsectorsize; /* bytes/sector in hardware */ > -int fsize = 0; /* fragment size */ > -int bsize = 0; /* block size */ > -int maxbsize = 0; /* maximum clustering */ > -int maxblkspercg = MAXBLKSPERCG; /* maximum blocks per cylinder group */ > +int64_t fsize = 0; /* fragment size */ > +int64_t bsize = 0; /* block size */ > +int64_t maxbsize = 0; /* maximum clustering */ > +int64_t maxblkspercg = MAXBLKSPERCG; /* maximum blocks per cylinder > group */ > int minfree = MINFREE; /* free space threshold */ > int opt = DEFAULTOPT; /* optimization preference (space or time) */ > -int density; /* number of bytes per inode */ > -int maxcontig = 0; /* max contiguous blocks to allocate */ > -int maxbpg; /* maximum blocks per file in a cyl group */ > -int avgfilesize = AVFILESIZ;/* expected average file size */ > -int avgfilesperdir = AFPDIR;/* expected number of files per directory */ > +int64_t density; /* number of bytes per inode */ > +int64_t maxcontig = 0; /* max contiguous blocks to allocate > */ > +int64_t maxbpg; /* maximum blocks per file in a cyl > group */ > +int64_t avgfilesize = AVFILESIZ;/* expected average file size */ > +int64_t avgfilesperdir = AFPDIR;/* expected number of files per > directory */ > u_char *volumelabel = NULL; /* volume label for filesystem */ > struct uufsd disk; /* libufs disk structure */ > > @@ -117,7 +119,6 @@ static void getfssize(intmax_t *, const > static struct disklabel *getdisklabel(char *s); > static void rewritelabel(char *s, struct disklabel *lp); > static void usage(void); > -static int parselength(const char *ls, int *sz); > > ufs2_daddr_t part_ofs; /* partition offset in blocks, used with files */ > > @@ -170,7 +171,7 @@ main(int argc, char *argv[]) > Rflag = 1; > break; > case 'S': > - rval = parselength(optarg, §orsize); > + rval = expand_number(optarg, §orsize); > if (rval < 0 || sectorsize <= 0) > errx(1, "%s: bad sector size", optarg); > break; > @@ -184,13 +185,13 @@ main(int argc, char *argv[]) > Xflag++; > break; > case 'a': > - rval = parselength(optarg, &maxcontig); > + rval = expand_number(optarg, &maxcontig); > if (rval < 0 || maxcontig <= 0) > errx(1, "%s: bad maximum contiguous blocks", > optarg); > break; > case 'b': > - rval = parselength(optarg, &bsize); > + rval = expand_number(optarg, &bsize); > if (rval < 0) > errx(1, "%s: bad block size", > optarg); > @@ -202,39 +203,39 @@ main(int argc, char *argv[]) > optarg, MAXBSIZE); > break; > case 'c': > - rval = parselength(optarg, &maxblkspercg); > + rval = expand_number(optarg, &maxblkspercg); > if (rval < 0 || maxblkspercg <= 0) > errx(1, "%s: bad blocks per cylinder group", > optarg); > break; > case 'd': > - rval = parselength(optarg, &maxbsize); > + rval = expand_number(optarg, &maxbsize); > if (rval < 0 || maxbsize < MINBSIZE) > errx(1, "%s: bad extent block size", optarg); > break; > case 'e': > - rval = parselength(optarg, &maxbpg); > + rval = expand_number(optarg, &maxbpg); > if (rval < 0 || maxbpg <= 0) > errx(1, "%s: bad blocks per file in a cylinder > group", > optarg); > break; > case 'f': > - rval = parselength(optarg, &fsize); > + rval = expand_number(optarg, &fsize); > if (rval < 0 || fsize <= 0) > errx(1, "%s: bad fragment size", optarg); > break; > case 'g': > - rval = parselength(optarg, &avgfilesize); > + rval = expand_number(optarg, &avgfilesize); > if (rval < 0 || avgfilesize <= 0) > errx(1, "%s: bad average file size", optarg); > break; > case 'h': > - rval = parselength(optarg, &avgfilesperdir); > + rval = expand_number(optarg, &avgfilesperdir); > if (rval < 0 || avgfilesperdir <= 0) > errx(1, "%s: bad average files per dir", > optarg); > break; > case 'i': > - rval = parselength(optarg, &density); > + rval = expand_number(optarg, &density); > if (rval < 0 || density <= 0) > errx(1, "%s: bad bytes per inode", optarg); > break; > @@ -495,62 +496,3 @@ usage() > fprintf(stderr, "\t-s file system size (sectors)\n"); > exit(1); > } > - > -/* > - * Return the numeric value of a string given in the form [+-][0-9]+[GMKT] > - * or -1 on format error or overflow. > - */ > -static int > -parselength(const char *ls, int *sz) > -{ > - off_t length, oflow; > - int lsign; > - > - length = 0; > - lsign = 1; > - > - switch (*ls) { > - case '-': > - lsign = -1; > - case '+': > - ls++; > - } > - > -#define ASSIGN_CHK_OFLOW(x, y) if (x < y) return -1; y = x > - /* > - * Calculate the value of the decimal digit string, failing > - * on overflow. > - */ > - while (isdigit(*ls)) { > - oflow = length * 10 + *ls++ - '0'; > - ASSIGN_CHK_OFLOW(oflow, length); > - } > - > - switch (*ls) { > - case 'T': > - case 't': > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case 'G': > - case 'g': > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case 'M': > - case 'm': > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case 'K': > - case 'k': > - if (ls[1] != '\0') > - return -1; > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case '\0': > - break; > - default: > - return -1; > - } > - > - *sz = length * lsign; > - return 0; > -} > > Modified: head/sbin/newfs/newfs.h > ============================================================================== > --- head/sbin/newfs/newfs.h Wed Mar 3 19:14:05 2010 (r204653) > +++ head/sbin/newfs/newfs.h Wed Mar 3 19:25:28 2010 (r204654) > @@ -86,19 +86,19 @@ extern int Jflag; /* enable gjournal fo > extern int lflag; /* enable multilabel MAC for file system */ > extern int nflag; /* do not create .snap directory */ > extern intmax_t fssize; /* file system size */ > -extern int sectorsize; /* bytes/sector */ > +extern int64_t sectorsize; /* bytes/sector */ > extern int realsectorsize; /* bytes/sector in hardware*/ > -extern int fsize; /* fragment size */ > -extern int bsize; /* block size */ > -extern int maxbsize; /* maximum clustering */ > -extern int maxblkspercg; /* maximum blocks per cylinder group */ > +extern int64_t fsize; /* fragment size */ > +extern int64_t bsize; /* block size */ > +extern int64_t maxbsize; /* maximum clustering */ > +extern int64_t maxblkspercg; /* maximum blocks per cylinder group */ > extern int minfree; /* free space threshold */ > extern int opt; /* optimization preference (space or time) */ > -extern int density; /* number of bytes per inode */ > -extern int maxcontig; /* max contiguous blocks to allocate */ > -extern int maxbpg; /* maximum blocks per file in a cyl group */ > -extern int avgfilesize; /* expected average file size */ > -extern int avgfilesperdir; /* expected number of files per directory */ > +extern int64_t density; /* number of bytes per inode */ > +extern int64_t maxcontig; /* max contiguous blocks to allocate */ > +extern int64_t maxbpg; /* maximum blocks per file in a cyl group */ > +extern int64_t avgfilesize; /* expected average file size */ > +extern int64_t avgfilesperdir; /* expected number of files per directory */ > extern u_char *volumelabel; /* volume label for filesystem */ > extern struct uufsd disk; /* libufs disk structure */ > > > Modified: head/usr.bin/truncate/Makefile > ============================================================================== > --- head/usr.bin/truncate/Makefile Wed Mar 3 19:14:05 2010 > (r204653) > +++ head/usr.bin/truncate/Makefile Wed Mar 3 19:25:28 2010 > (r204654) > @@ -1,5 +1,7 @@ > # $FreeBSD$ > > PROG= truncate > +DPADD= ${LIBUTIL} > +LDADD= -lutil > > .include <bsd.prog.mk> > > Modified: head/usr.bin/truncate/truncate.c > ============================================================================== > --- head/usr.bin/truncate/truncate.c Wed Mar 3 19:14:05 2010 > (r204653) > +++ head/usr.bin/truncate/truncate.c Wed Mar 3 19:25:28 2010 > (r204654) > @@ -40,7 +40,8 @@ static const char rcsid[] = > #include <stdlib.h> > #include <unistd.h> > > -static int parselength(char *, off_t *); > +#include <libutil.h> > + > static void usage(void); > > static int no_create; > @@ -53,7 +54,8 @@ main(int argc, char **argv) > { > struct stat sb; > mode_t omode; > - off_t oflow, rsize, sz, tsize; > + off_t oflow, rsize, tsize; > + int64_t sz; > int ch, error, fd, oflags; > char *fname, *rname; > > @@ -71,7 +73,7 @@ main(int argc, char **argv) > rname = optarg; > break; > case 's': > - if (parselength(optarg, &sz) == -1) > + if (expand_number(optarg, &sz) == -1) > errx(EXIT_FAILURE, > "invalid size argument `%s'", optarg); > if (*optarg == '+' || *optarg == '-') > @@ -148,65 +150,6 @@ main(int argc, char **argv) > return error ? EXIT_FAILURE : EXIT_SUCCESS; > } > > -/* > - * Return the numeric value of a string given in the form [+-][0-9]+[GMKT] > - * or -1 on format error or overflow. > - */ > -static int > -parselength(char *ls, off_t *sz) > -{ > - off_t length, oflow; > - int lsign; > - > - length = 0; > - lsign = 1; > - > - switch (*ls) { > - case '-': > - lsign = -1; > - case '+': > - ls++; > - } > - > -#define ASSIGN_CHK_OFLOW(x, y) if (x < y) return -1; y = x > - /* > - * Calculate the value of the decimal digit string, failing > - * on overflow. > - */ > - while (isdigit(*ls)) { > - oflow = length * 10 + *ls++ - '0'; > - ASSIGN_CHK_OFLOW(oflow, length); > - } > - > - switch (*ls) { > - case 'T': > - case 't': > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case 'G': > - case 'g': > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case 'M': > - case 'm': > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case 'K': > - case 'k': > - if (ls[1] != '\0') > - return -1; > - oflow = length * 1024; > - ASSIGN_CHK_OFLOW(oflow, length); > - case '\0': > - break; > - default: > - return -1; > - } > - > - *sz = length * lsign; > - return 0; > -} > - > static void > usage(void) > { > _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"