summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/lib/roken/parse_units.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/lib/roken/parse_units.c')
-rw-r--r--crypto/heimdal/lib/roken/parse_units.c49
1 files changed, 26 insertions, 23 deletions
diff --git a/crypto/heimdal/lib/roken/parse_units.c b/crypto/heimdal/lib/roken/parse_units.c
index 217d55e..1960bec 100644
--- a/crypto/heimdal/lib/roken/parse_units.c
+++ b/crypto/heimdal/lib/roken/parse_units.c
@@ -33,13 +33,13 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
-RCSID("$Id: parse_units.c,v 1.14 2001/09/04 09:56:00 assar Exp $");
+RCSID("$Id: parse_units.c 21005 2007-06-08 01:54:35Z lha $");
#endif
#include <stdio.h>
#include <ctype.h>
#include <string.h>
-#include <roken.h>
+#include "roken.h"
#include "parse_units.h"
/*
@@ -152,7 +152,7 @@ acc_units(int res, int val, unsigned mult)
return res + val * mult;
}
-int
+int ROKEN_LIB_FUNCTION
parse_units (const char *s, const struct units *units,
const char *def_unit)
{
@@ -178,7 +178,7 @@ acc_flags(int res, int val, unsigned mult)
return -1;
}
-int
+int ROKEN_LIB_FUNCTION
parse_flags (const char *s, const struct units *units,
int orig)
{
@@ -192,9 +192,8 @@ parse_flags (const char *s, const struct units *units,
static int
unparse_something (int num, const struct units *units, char *s, size_t len,
- int (*print) (char *s, size_t len, int div,
- const char *name, int rem),
- int (*update) (int in, unsigned mult),
+ int (*print) (char *, size_t, int, const char *, int),
+ int (*update) (int, unsigned),
const char *zero_string)
{
const struct units *u;
@@ -204,17 +203,21 @@ unparse_something (int num, const struct units *units, char *s, size_t len,
return snprintf (s, len, "%s", zero_string);
for (u = units; num > 0 && u->name; ++u) {
- int div;
+ int divisor;
- div = num / u->mult;
- if (div) {
+ divisor = num / u->mult;
+ if (divisor) {
num = (*update) (num, u->mult);
- tmp = (*print) (s, len, div, u->name, num);
+ tmp = (*print) (s, len, divisor, u->name, num);
if (tmp < 0)
return tmp;
-
- len -= tmp;
- s += tmp;
+ if (tmp > len) {
+ len = 0;
+ s = NULL;
+ } else {
+ len -= tmp;
+ s += tmp;
+ }
ret += tmp;
}
}
@@ -222,11 +225,11 @@ unparse_something (int num, const struct units *units, char *s, size_t len,
}
static int
-print_unit (char *s, size_t len, int div, const char *name, int rem)
+print_unit (char *s, size_t len, int divisor, const char *name, int rem)
{
return snprintf (s, len, "%u %s%s%s",
- div, name,
- div == 1 ? "" : "s",
+ divisor, name,
+ divisor == 1 ? "" : "s",
rem > 0 ? " " : "");
}
@@ -245,7 +248,7 @@ update_unit_approx (int in, unsigned mult)
return update_unit (in, mult);
}
-int
+int ROKEN_LIB_FUNCTION
unparse_units (int num, const struct units *units, char *s, size_t len)
{
return unparse_something (num, units, s, len,
@@ -254,7 +257,7 @@ unparse_units (int num, const struct units *units, char *s, size_t len)
"0");
}
-int
+int ROKEN_LIB_FUNCTION
unparse_units_approx (int num, const struct units *units, char *s, size_t len)
{
return unparse_something (num, units, s, len,
@@ -263,7 +266,7 @@ unparse_units_approx (int num, const struct units *units, char *s, size_t len)
"0");
}
-void
+void ROKEN_LIB_FUNCTION
print_units_table (const struct units *units, FILE *f)
{
const struct units *u, *u2;
@@ -297,7 +300,7 @@ print_units_table (const struct units *units, FILE *f)
}
static int
-print_flag (char *s, size_t len, int div, const char *name, int rem)
+print_flag (char *s, size_t len, int divisor, const char *name, int rem)
{
return snprintf (s, len, "%s%s", name, rem > 0 ? ", " : "");
}
@@ -308,7 +311,7 @@ update_flag (int in, unsigned mult)
return in - mult;
}
-int
+int ROKEN_LIB_FUNCTION
unparse_flags (int num, const struct units *units, char *s, size_t len)
{
return unparse_something (num, units, s, len,
@@ -317,7 +320,7 @@ unparse_flags (int num, const struct units *units, char *s, size_t len)
"");
}
-void
+void ROKEN_LIB_FUNCTION
print_flags_table (const struct units *units, FILE *f)
{
const struct units *u;
OpenPOWER on IntegriCloud