* Version $Id$
*/
/*
- Copyright (C) 2002-2005 Kern Sibbald
+ Bacula® - The Network Backup Solution
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as ammended with additional clauses defined in the
- file LICENSE in the main source directory.
+ Copyright (C) 2002-2006 Free Software Foundation Europe e.V.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- the file LICENSE for additional details.
+ The main author of Bacula is Kern Sibbald, with contributions from
+ many others, a complete list can be found in the file AUTHORS.
+ This program is Free Software; you can redistribute it and/or
+ modify it under the terms of version two of the GNU General Public
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
- */
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ Bacula® is a registered trademark of Kern Sibbald.
+ The licensor of Bacula is the Free Software Foundation Europe
+ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+ Switzerland, email:ftf@fsfeurope.org.
+*/
#include "bacula.h"
#include <math.h>
*/
char *edit_uint64_with_commas(uint64_t val, char *buf)
{
- /*
- * Replacement for sprintf(buf, "%" llu, val)
- */
- char mbuf[50];
- mbuf[sizeof(mbuf)-1] = 0;
- int i = sizeof(mbuf)-2; /* edit backward */
- if (val == 0) {
- mbuf[i--] = '0';
- } else {
- while (val != 0) {
- mbuf[i--] = "0123456789"[val%10];
- val /= 10;
- }
- }
- bstrncpy(buf, &mbuf[i+1], 27);
+ edit_uint64(val, buf);
return add_commas(buf, buf);
}
+/*
+ * Edit an integer into "human-readable" format with four or fewer
+ * significant digits followed by a suffix that indicates the scale
+ * factor. The buf array inherits a 27 byte minimim length
+ * requirement from edit_unit64_with_commas(), although the output
+ * string is limited to eight characters.
+ */
+char *edit_uint64_with_suffix(uint64_t val, char *buf)
+{
+ int commas = 0;
+ char *c, mbuf[50];
+ const char *suffix[] =
+ { "", "K", "M", "G", "T", "P", "E", "Z", "Y", "FIX ME" };
+ int suffixes = sizeof(suffix) / sizeof(*suffix);
+
+ edit_uint64_with_commas(val, mbuf);
+
+ if ((c = strchr(mbuf, ',')) != NULL) {
+ commas++;
+ *c++ = '.';
+ while ((c = strchr(c, ',')) != NULL) {
+ commas++;
+ *c++ = '\0';
+ }
+ mbuf[5] = '\0'; // drop this to get '123.456 TB' rather than '123.4 TB'
+ }
+
+ if (commas >= suffixes)
+ commas = suffixes - 1;
+ bsnprintf(buf, 27, "%s %s", mbuf, suffix[commas]);
+ return buf;
+}
+
/*
* Edit an integer number, the supplied buffer
* must be at least 27 bytes long. The incoming number
return buf;
}
+/*
+ * Edit an integer number with commas, the supplied buffer
+ * must be at least 27 bytes long. The incoming number
+ * is always widened to 64 bits.
+ */
+char *edit_int64_with_commas(int64_t val, char *buf)
+{
+ edit_int64(val, buf);
+ return add_commas(buf, buf);
+}
/*
* Given a string "str", separate the numeric part into
* to months. These "kludges" make it compatible with pre 1.31
* Baculas.
*/
- static const char *mod[] = {"n", "seconds", "months", "minutes",
+ static const char *mod[] = {"n", "seconds", "months", "minutes", "mins",
"hours", "days", "weeks", "quarters", "years", NULL};
- static const int32_t mult[] = {60, 1, 60*60*24*30, 60,
- 60*60, 60*60*24, 60*60*24*7, 60*60*24*91, 60*60*24*365};
+ static const int32_t mult[] = {60, 1, 60*60*24*30, 60, 60,
+ 3600, 3600*24, 3600*24*7, 3600*24*91, 3600*24*365};
while (*str) {
if (!get_modifier(str, num_str, sizeof(num_str), mod_str, sizeof(mod_str))) {