convtbl.c (164671) | convtbl.c (164672) |
---|---|
1/* 2 * Copyright (c) 2003, Trent Nelson, <trent@arpa.com>. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * | 1/* 2 * Copyright (c) 2003, Trent Nelson, <trent@arpa.com>. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * |
28 * $FreeBSD: head/usr.bin/systat/convtbl.c 164671 2006-11-27 15:26:26Z yar $ | 28 * $FreeBSD: head/usr.bin/systat/convtbl.c 164672 2006-11-27 16:14:32Z yar $ |
29 */ 30 31#include <sys/types.h> | 29 */ 30 31#include <sys/types.h> |
32#include <unistd.h> | 32#include <stdlib.h> 33#include <string.h> |
33#include "convtbl.h" 34 35struct convtbl convtbl[] = { | 34#include "convtbl.h" 35 36struct convtbl convtbl[] = { |
36 /* mul, scale, str */ 37 [SC_BYTE] = { BYTE, BYTES, "bytes" }, 38 [SC_KILOBYTE] = { BYTE, KILO, "KB" }, 39 [SC_MEGABYTE] = { BYTE, MEGA, "MB" }, 40 [SC_GIGABYTE] = { BYTE, GIGA, "GB" }, | 37 /* mul, scale, str, name */ 38 [SC_BYTE] = { BYTE, BYTES, "B", "byte" }, 39 [SC_KILOBYTE] = { BYTE, KILO, "KB", "kbyte" }, 40 [SC_MEGABYTE] = { BYTE, MEGA, "MB", "mbyte" }, 41 [SC_GIGABYTE] = { BYTE, GIGA, "GB", "gbyte" }, |
41 | 42 |
42 [SC_BIT] = { BIT, BITS, "b" }, 43 [SC_KILOBIT] = { BIT, KILO, "Kb" }, 44 [SC_MEGABIT] = { BIT, MEGA, "Mb" }, 45 [SC_GIGABIT] = { BIT, GIGA, "Gb" }, | 43 [SC_BIT] = { BIT, BITS, "b", "bit" }, 44 [SC_KILOBIT] = { BIT, KILO, "Kb", "kbit" }, 45 [SC_MEGABIT] = { BIT, MEGA, "Mb", "mbit" }, 46 [SC_GIGABIT] = { BIT, GIGA, "Gb", "gbit" }, |
46 | 47 |
47 [SC_AUTO] = { 0, 0, "" } | 48 [SC_AUTO] = { 0, 0, "", "auto" } |
48}; 49 | 49}; 50 |
50 | |
51static 52struct convtbl * 53get_tbl_ptr(const uintmax_t size, const int scale) 54{ 55 uintmax_t tmp; 56 int idx; 57 58 /* If our index is out of range, default to auto-scaling. */ --- 26 unchanged lines hidden (view full) --- 85const char * 86get_string(const uintmax_t size, const int scale) 87{ 88 struct convtbl *tp; 89 90 tp = get_tbl_ptr(size, scale); 91 return (tp->str); 92} | 51static 52struct convtbl * 53get_tbl_ptr(const uintmax_t size, const int scale) 54{ 55 uintmax_t tmp; 56 int idx; 57 58 /* If our index is out of range, default to auto-scaling. */ --- 26 unchanged lines hidden (view full) --- 85const char * 86get_string(const uintmax_t size, const int scale) 87{ 88 struct convtbl *tp; 89 90 tp = get_tbl_ptr(size, scale); 91 return (tp->str); 92} |
93 94int 95get_scale(const char *name) 96{ 97 int i; 98 99 for (i = 0; i <= SC_AUTO; i++) 100 if (strcmp(convtbl[i].name, name) == 0) 101 return (i); 102 return (-1); 103} 104 105const char * 106get_helplist() 107{ 108 int i; 109 size_t len; 110 static char *buf; 111 112 if (buf == NULL) { 113 len = 0; 114 for (i = 0; i <= SC_AUTO; i++) 115 len += strlen(convtbl[i].name) + 2; 116 if ((buf = malloc(len)) != NULL) { 117 buf[0] = '\0'; 118 for (i = 0; i <= SC_AUTO; i++) { 119 strcat(buf, convtbl[i].name); 120 if (i < SC_AUTO) 121 strcat(buf, ", "); 122 } 123 } else 124 return (""); 125 } 126 return (buf); 127} |
|