From d3c03fe651a932f058aca7596311ada76b80ba81 Mon Sep 17 00:00:00 2001 From: Gene Cumm Date: Mon, 7 Feb 2011 20:13:48 -0500 Subject: [PATCH] libutil: copy suffix_number() from com32/lib/syslinux/load_linux.c --- com32/libutil/Makefile | 3 +- com32/libutil/include/suffix_number.h | 41 ++++++++++++++++++++ com32/libutil/suffix_number.c | 72 +++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 com32/libutil/include/suffix_number.h create mode 100644 com32/libutil/suffix_number.c diff --git a/com32/libutil/Makefile b/com32/libutil/Makefile index 02789ca..d9466aa 100644 --- a/com32/libutil/Makefile +++ b/com32/libutil/Makefile @@ -33,7 +33,8 @@ topdir = ../.. include ../MCONFIG LIBOBJS = ansiline.o ansiraw.o get_key.o sha1hash.o unbase64.o \ - md5.o crypt-md5.o sha256crypt.o sha512crypt.o base64.o + md5.o crypt-md5.o sha256crypt.o sha512crypt.o base64.o \ + suffix_number.o LNXLIBOBJS = $(patsubst %.o,%.lo,$(LIBOBJS)) all: libutil_com.a libutil_lnx.a diff --git a/com32/libutil/include/suffix_number.h b/com32/libutil/include/suffix_number.h new file mode 100644 index 0000000..e2349b4 --- /dev/null +++ b/com32/libutil/include/suffix_number.h @@ -0,0 +1,41 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 2007-2008 H. Peter Anvin - All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall + * be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * ----------------------------------------------------------------------- */ + +/* + * suffix_number.h + * + * Definitions used to convert a string of a number with potential SI suffix + * to int-type. + */ + +#ifndef LIBUTIL_SUFFIX_NUMBER_H +#define LIBUTIL_SUFFIX_NUMBER_H + +unsigned long long suffix_number(const char *); + +#endif /* LIBUTIL_SUFFIX_NUMBER_H */ + diff --git a/com32/libutil/suffix_number.c b/com32/libutil/suffix_number.c new file mode 100644 index 0000000..df073a0 --- /dev/null +++ b/com32/libutil/suffix_number.c @@ -0,0 +1,72 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 2007-2009 H. Peter Anvin - All Rights Reserved + * Copyright 2009 Intel Corporation; author: H. Peter Anvin + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall + * be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * ----------------------------------------------------------------------- */ + +/* + * suffix_number.c + * + * Convert a string of a number with potential SI suffix to int-type + */ + +#include +#include + +/* Get a value with a potential suffix (k/m/g/t/p/e) */ +unsigned long long suffix_number(const char *str) +{ + char *ep; + unsigned long long v; + int shift; + + v = strtoull(str, &ep, 0); + switch (*ep | 0x20) { + case 'k': + shift = 10; + break; + case 'm': + shift = 20; + break; + case 'g': + shift = 30; + break; + case 't': + shift = 40; + break; + case 'p': + shift = 50; + break; + case 'e': + shift = 60; + break; + default: + shift = 0; + break; + } + v <<= shift; + + return v; +} -- 2.7.4