1*52780Sbostic /*- 2*52780Sbostic * Copyright (c) 1991 The Regents of the University of California. 3*52780Sbostic * All rights reserved. 4*52780Sbostic * 5*52780Sbostic * %sccs.include.redist.c% 6*52780Sbostic */ 7*52780Sbostic 8*52780Sbostic #ifndef lint 9*52780Sbostic static char sccsid[] = "@(#)getbsize.c 5.1 (Berkeley) 03/01/92"; 10*52780Sbostic #endif /* not lint */ 11*52780Sbostic 12*52780Sbostic #include <stdio.h> 13*52780Sbostic #include <stdlib.h> 14*52780Sbostic 15*52780Sbostic char * 16*52780Sbostic getbsize(prog, headerlenp, blocksizep) 17*52780Sbostic char *prog; 18*52780Sbostic int *headerlenp, *blocksizep; 19*52780Sbostic { 20*52780Sbostic static char header[20]; 21*52780Sbostic long blocksize; 22*52780Sbostic char *ep, *p; 23*52780Sbostic 24*52780Sbostic #define Kb 1024 25*52780Sbostic #define Mb 1048576 26*52780Sbostic #define Gb 1073741824 27*52780Sbostic if ((p = getenv("BLOCKSIZE")) != NULL && *p != '\0') { 28*52780Sbostic blocksize = strtol(p, &ep, 10); 29*52780Sbostic switch(*ep) { 30*52780Sbostic case 'G': case 'g': 31*52780Sbostic if (ep[1]) 32*52780Sbostic goto fmterr; 33*52780Sbostic if (blocksize > 1) 34*52780Sbostic goto overflow; 35*52780Sbostic *headerlenp = snprintf(header, sizeof(header), 36*52780Sbostic "%dG-blocks", blocksize); 37*52780Sbostic *blocksizep = blocksize * Gb; 38*52780Sbostic return (header); 39*52780Sbostic case 'M': case 'm': 40*52780Sbostic if (ep[1]) 41*52780Sbostic goto fmterr; 42*52780Sbostic *headerlenp = snprintf(header, sizeof(header), 43*52780Sbostic "%dM-blocks", blocksize); 44*52780Sbostic *blocksizep = blocksize * Mb; 45*52780Sbostic return (header); 46*52780Sbostic case 'K': case 'k': 47*52780Sbostic if (ep[1]) 48*52780Sbostic goto fmterr; 49*52780Sbostic *headerlenp = snprintf(header, sizeof(header), 50*52780Sbostic "%dK-blocks", blocksize); 51*52780Sbostic *blocksizep = blocksize * Kb; 52*52780Sbostic return (header); 53*52780Sbostic case '\0': 54*52780Sbostic if (blocksize > Gb) { 55*52780Sbostic overflow: (void)fprintf(stderr, 56*52780Sbostic "%s: maximum blocksize is 1G\n", prog); 57*52780Sbostic blocksize = 512; 58*52780Sbostic } else if (blocksize < 512) { 59*52780Sbostic (void)fprintf(stderr, 60*52780Sbostic "%s: minimum blocksize is 512\n", prog); 61*52780Sbostic blocksize = 512; 62*52780Sbostic } 63*52780Sbostic break; 64*52780Sbostic default: 65*52780Sbostic fmterr: (void)fprintf(stderr, 66*52780Sbostic "%s: %s: unknown blocksize\n", prog, p); 67*52780Sbostic blocksize = 512; 68*52780Sbostic break; 69*52780Sbostic } 70*52780Sbostic } else 71*52780Sbostic blocksize = 512; 72*52780Sbostic 73*52780Sbostic *headerlenp = snprintf(header, sizeof(header), "%d-blocks", blocksize); 74*52780Sbostic *blocksizep = blocksize; 75*52780Sbostic return (header); 76*52780Sbostic } 77