VirtualBox

source: kStuff/trunk/kHlp/Generic/kHlpGetEnvUZ.c@ 2

Last change on this file since 2 was 2, checked in by bird, 17 years ago

Imported http://svn.netlabs.org/repos/libc/trunk/kStuff, revision 3612.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 3.0 KB
Line 
1/* $Id: kHlpGetEnvUZ.c 2 2007-11-16 16:07:14Z bird $ */
2/** @file
3 * kHlpEnv - kHlpGetEnvUZ.
4 */
5
6/*
7 * Copyright (c) 2006-2007 knut st. osmundsen <[email protected]>
8 *
9 * This file is part of kStuff.
10 *
11 * kStuff is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
15 *
16 * In addition to the permissions in the GNU Lesser General Public
17 * License, you are granted unlimited permission to link the compiled
18 * version of this file into combinations with other programs, and to
19 * distribute those combinations without any restriction coming from
20 * the use of this file.
21 *
22 * kStuff is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 * Lesser General Public License for more details.
26 *
27 * You should have received a copy of the GNU Lesser General Public
28 * License along with kStuff; if not, write to the Free Software
29 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
30 * 02110-1301, USA
31 */
32
33/*******************************************************************************
34* Header Files *
35*******************************************************************************/
36#include <k/kHlpEnv.h>
37#include <k/kHlpString.h>
38
39
40/**
41 * Gets an environment variable and converts it to a KSIZE.
42 *
43 * @returns 0 and *pcb on success.
44 * @returns On failure see kHlpGetEnv.
45 * @param pszVar The name of the variable.
46 * @param pcb Where to put the value.
47 */
48KHLP_DECL(int) kHlpGetEnvUZ(const char *pszVar, KSIZE *pcb)
49{
50 KSIZE cb;
51 unsigned uBase;
52 char szVal[64];
53 KSIZE cchVal = sizeof(szVal);
54 const char *psz;
55 int rc;
56
57 *pcb = 0;
58 rc = kHlpGetEnv(pszVar, szVal, cchVal);
59 if (rc)
60 return rc;
61
62 /* figure out the base. */
63 uBase = 10;
64 psz = szVal;
65 if ( *psz == '0'
66 && (psz[1] == 'x' || psz[1] == 'X'))
67 {
68 uBase = 16;
69 psz += 2;
70 }
71
72 /* convert it up to the first unknown char. */
73 cb = 0;
74 for(;;)
75 {
76 const char ch = *psz;
77 unsigned uDigit;
78 if (!ch)
79 break;
80 else if (ch >= '0' && ch <= '9')
81 uDigit = ch - '0';
82 else if (ch >= 'a' && ch <= 'z')
83 uDigit = ch - 'a' + 10;
84 else if (ch >= 'A' && ch <= 'Z')
85 uDigit = ch - 'A' + 10;
86 else
87 break;
88 if (uDigit >= uBase)
89 break;
90
91 /* add the digit */
92 cb *= uBase;
93 cb += uDigit;
94
95 psz++;
96 }
97
98 /* check for unit */
99 if (*psz == 'm' || *psz == 'M')
100 cb *= 1024*1024;
101 else if (*psz == 'k' ||*psz == 'K')
102 cb *= 1024;
103 else if (*psz == 'g' || *psz == 'G')
104 cb *= 1024*1024*1024;
105
106 *pcb = cb;
107 return 0;
108}
109
110
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette