152780Sbostic /*- 252780Sbostic * Copyright (c) 1991 The Regents of the University of California. 352780Sbostic * All rights reserved. 452780Sbostic * 552780Sbostic * %sccs.include.redist.c% 652780Sbostic */ 752780Sbostic 852780Sbostic #ifndef lint 9*52896Sbostic static char sccsid[] = "@(#)getbsize.c 5.2 (Berkeley) 03/09/92"; 1052780Sbostic #endif /* not lint */ 1152780Sbostic 1252780Sbostic #include <stdio.h> 1352780Sbostic #include <stdlib.h> 1452780Sbostic 1552780Sbostic char * 1652780Sbostic getbsize(prog, headerlenp, blocksizep) 1752780Sbostic char *prog; 18*52896Sbostic int *headerlenp; 19*52896Sbostic long *blocksizep; 2052780Sbostic { 2152780Sbostic static char header[20]; 2252780Sbostic long blocksize; 2352780Sbostic char *ep, *p; 2452780Sbostic 2552780Sbostic #define Kb 1024 2652780Sbostic #define Mb 1048576 2752780Sbostic #define Gb 1073741824 2852780Sbostic if ((p = getenv("BLOCKSIZE")) != NULL && *p != '\0') { 2952780Sbostic blocksize = strtol(p, &ep, 10); 3052780Sbostic switch(*ep) { 3152780Sbostic case 'G': case 'g': 3252780Sbostic if (ep[1]) 3352780Sbostic goto fmterr; 3452780Sbostic if (blocksize > 1) 3552780Sbostic goto overflow; 3652780Sbostic *headerlenp = snprintf(header, sizeof(header), 3752780Sbostic "%dG-blocks", blocksize); 3852780Sbostic *blocksizep = blocksize * Gb; 3952780Sbostic return (header); 4052780Sbostic case 'M': case 'm': 4152780Sbostic if (ep[1]) 4252780Sbostic goto fmterr; 4352780Sbostic *headerlenp = snprintf(header, sizeof(header), 4452780Sbostic "%dM-blocks", blocksize); 4552780Sbostic *blocksizep = blocksize * Mb; 4652780Sbostic return (header); 4752780Sbostic case 'K': case 'k': 4852780Sbostic if (ep[1]) 4952780Sbostic goto fmterr; 5052780Sbostic *headerlenp = snprintf(header, sizeof(header), 5152780Sbostic "%dK-blocks", blocksize); 5252780Sbostic *blocksizep = blocksize * Kb; 5352780Sbostic return (header); 5452780Sbostic case '\0': 5552780Sbostic if (blocksize > Gb) { 5652780Sbostic overflow: (void)fprintf(stderr, 5752780Sbostic "%s: maximum blocksize is 1G\n", prog); 5852780Sbostic blocksize = 512; 5952780Sbostic } else if (blocksize < 512) { 6052780Sbostic (void)fprintf(stderr, 6152780Sbostic "%s: minimum blocksize is 512\n", prog); 6252780Sbostic blocksize = 512; 6352780Sbostic } 6452780Sbostic break; 6552780Sbostic default: 6652780Sbostic fmterr: (void)fprintf(stderr, 6752780Sbostic "%s: %s: unknown blocksize\n", prog, p); 6852780Sbostic blocksize = 512; 6952780Sbostic break; 7052780Sbostic } 7152780Sbostic } else 7252780Sbostic blocksize = 512; 7352780Sbostic 7452780Sbostic *headerlenp = snprintf(header, sizeof(header), "%d-blocks", blocksize); 7552780Sbostic *blocksizep = blocksize; 7652780Sbostic return (header); 7752780Sbostic } 78