mirror of
https://gitlab.freedesktop.org/libbsd/libbsd.git
synced 2025-04-22 02:06:16 +02:00
Add getbsize() function
Import code from DragonFlyBSD and man page from FreeBSD.
This commit is contained in:
parent
a88bb8380d
commit
e8f9300355
@ -70,6 +70,8 @@ void *reallocf(void *ptr, size_t size);
|
|||||||
|
|
||||||
long long strtonum(const char *nptr, long long minval, long long maxval,
|
long long strtonum(const char *nptr, long long minval, long long maxval,
|
||||||
const char **errstr);
|
const char **errstr);
|
||||||
|
|
||||||
|
char *getbsize(int *headerlenp, long *blocksizep);
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -29,6 +29,7 @@ dist_man_MANS = \
|
|||||||
fmtcheck.3 \
|
fmtcheck.3 \
|
||||||
fparseln.3 \
|
fparseln.3 \
|
||||||
funopen.3 \
|
funopen.3 \
|
||||||
|
getbsize.3 \
|
||||||
getmode.3 \
|
getmode.3 \
|
||||||
getpeereid.3 \
|
getpeereid.3 \
|
||||||
getprogname.3 \
|
getprogname.3 \
|
||||||
|
95
man/getbsize.3
Normal file
95
man/getbsize.3
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
.\" Copyright (c) 1993
|
||||||
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\" 3. Neither the name of the University nor the names of its contributors
|
||||||
|
.\" may be used to endorse or promote products derived from this software
|
||||||
|
.\" without specific prior written permission.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.\" @(#)getbsize.3 8.1 (Berkeley) 6/4/93
|
||||||
|
.\" $FreeBSD$
|
||||||
|
.\"
|
||||||
|
.Dd November 16, 2012
|
||||||
|
.Dt GETBSIZE 3
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm getbsize
|
||||||
|
.Nd get preferred block size
|
||||||
|
.Sh LIBRARY
|
||||||
|
.ds str-Lb-libbsd Utility functions from BSD systems (libbsd, \-lbsd)
|
||||||
|
.Lb libbsd
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.In bsd/stdlib.h
|
||||||
|
.Ft char *
|
||||||
|
.Fn getbsize "int *headerlenp" "long *blocksizep"
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Fn getbsize
|
||||||
|
function returns a preferred block size for reporting by system utilities
|
||||||
|
.Xr df 1 ,
|
||||||
|
.Xr du 1 ,
|
||||||
|
.Xr ls 1
|
||||||
|
and
|
||||||
|
.Xr systat 1 ,
|
||||||
|
based on the value of the
|
||||||
|
.Ev BLOCKSIZE
|
||||||
|
environment variable.
|
||||||
|
.Ev BLOCKSIZE
|
||||||
|
may be specified directly in bytes, or in multiples of a kilobyte by
|
||||||
|
specifying a number followed by ``K'' or ``k'', in multiples of a
|
||||||
|
megabyte by specifying a number followed by ``M'' or ``m'' or in
|
||||||
|
multiples of a gigabyte by specifying a number followed by ``G'' or
|
||||||
|
``g''.
|
||||||
|
Multiples must be integers.
|
||||||
|
.Pp
|
||||||
|
Valid values of
|
||||||
|
.Ev BLOCKSIZE
|
||||||
|
are 512 bytes to 1 gigabyte.
|
||||||
|
Sizes less than 512 bytes are rounded up to 512 bytes, and sizes
|
||||||
|
greater than 1 GB are rounded down to 1 GB.
|
||||||
|
In each case
|
||||||
|
.Fn getbsize
|
||||||
|
produces a warning message.
|
||||||
|
.Pp
|
||||||
|
The
|
||||||
|
.Fn getbsize
|
||||||
|
function returns a pointer to a null-terminated string describing
|
||||||
|
the block size, something like
|
||||||
|
.Dq 1K-blocks .
|
||||||
|
The memory referenced by
|
||||||
|
.Fa headerlenp
|
||||||
|
is filled in with the length of the string (not including the
|
||||||
|
terminating null).
|
||||||
|
The memory referenced by
|
||||||
|
.Fa blocksizep
|
||||||
|
is filled in with block size, in bytes.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr df 1 ,
|
||||||
|
.Xr du 1 ,
|
||||||
|
.Xr ls 1 ,
|
||||||
|
.Xr systat 1 ,
|
||||||
|
.Xr environ 7
|
||||||
|
.Sh HISTORY
|
||||||
|
The
|
||||||
|
.Fn getbsize
|
||||||
|
function first appeared in
|
||||||
|
.Bx 4.4 .
|
@ -52,6 +52,7 @@ libbsd_la_SOURCES = \
|
|||||||
fparseln.c \
|
fparseln.c \
|
||||||
fpurge.c \
|
fpurge.c \
|
||||||
funopen.c \
|
funopen.c \
|
||||||
|
getbsize.c \
|
||||||
getpeereid.c \
|
getpeereid.c \
|
||||||
hash/md5.c \
|
hash/md5.c \
|
||||||
hash/md5hl.c \
|
hash/md5hl.c \
|
||||||
|
102
src/getbsize.c
Normal file
102
src/getbsize.c
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 1991, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)getbsize.c 8.1 (Berkeley) 6/4/93
|
||||||
|
* $FreeBSD: src/lib/libc/gen/getbsize.c,v 1.9 2008/08/04 06:53:13 cperciva Exp $
|
||||||
|
* $DragonFly: src/lib/libc/gen/getbsize.c,v 1.4 2005/11/13 00:07:42 swildner Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <err.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
char *
|
||||||
|
getbsize(int *headerlenp, long *blocksizep)
|
||||||
|
{
|
||||||
|
static char header[20];
|
||||||
|
long n, max, mul, blocksize;
|
||||||
|
char *ep, *p;
|
||||||
|
const char *form;
|
||||||
|
|
||||||
|
#define KB (1024L)
|
||||||
|
#define MB (1024L * 1024L)
|
||||||
|
#define GB (1024L * 1024L * 1024L)
|
||||||
|
#define MAXB GB /* No tera, peta, nor exa. */
|
||||||
|
form = "";
|
||||||
|
if ((p = getenv("BLOCKSIZE")) != NULL && *p != '\0') {
|
||||||
|
if ((n = strtol(p, &ep, 10)) < 0)
|
||||||
|
goto underflow;
|
||||||
|
if (n == 0)
|
||||||
|
n = 1;
|
||||||
|
if (*ep && ep[1])
|
||||||
|
goto fmterr;
|
||||||
|
switch (*ep) {
|
||||||
|
case 'G': case 'g':
|
||||||
|
form = "G";
|
||||||
|
max = MAXB / GB;
|
||||||
|
mul = GB;
|
||||||
|
break;
|
||||||
|
case 'K': case 'k':
|
||||||
|
form = "K";
|
||||||
|
max = MAXB / KB;
|
||||||
|
mul = KB;
|
||||||
|
break;
|
||||||
|
case 'M': case 'm':
|
||||||
|
form = "M";
|
||||||
|
max = MAXB / MB;
|
||||||
|
mul = MB;
|
||||||
|
break;
|
||||||
|
case '\0':
|
||||||
|
max = MAXB;
|
||||||
|
mul = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fmterr: warnx("%s: unknown blocksize", p);
|
||||||
|
n = 512;
|
||||||
|
max = MAXB;
|
||||||
|
mul = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (n > max) {
|
||||||
|
warnx("maximum blocksize is %ldG", MAXB / GB);
|
||||||
|
n = max;
|
||||||
|
}
|
||||||
|
if ((blocksize = n * mul) < 512) {
|
||||||
|
underflow: warnx("minimum blocksize is 512");
|
||||||
|
form = "";
|
||||||
|
blocksize = n = 512;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
blocksize = n = 512;
|
||||||
|
|
||||||
|
snprintf(header, sizeof(header), "%ld%s-blocks", n, form);
|
||||||
|
*headerlenp = strlen(header);
|
||||||
|
*blocksizep = blocksize;
|
||||||
|
return (header);
|
||||||
|
}
|
@ -112,6 +112,8 @@ LIBBSD_0.6 {
|
|||||||
} LIBBSD_0.5;
|
} LIBBSD_0.5;
|
||||||
|
|
||||||
LIBBSD_0.7 {
|
LIBBSD_0.7 {
|
||||||
|
getbsize;
|
||||||
|
|
||||||
funopen;
|
funopen;
|
||||||
|
|
||||||
_time32_to_time;
|
_time32_to_time;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user