]> git.saurik.com Git - apple/network_cmds.git/blob - eaytest.tproj/misc.c
network_cmds-176.tar.gz
[apple/network_cmds.git] / eaytest.tproj / misc.c
1 /* $KAME: misc.c,v 1.22 2001/07/14 05:48:33 sakane Exp $ */
2
3 /*
4 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the project nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 */
31
32 #include <sys/types.h>
33 #include <sys/param.h>
34 #include <sys/stat.h>
35 #include <sys/time.h>
36
37 #include <stdlib.h>
38 #include <stdio.h>
39 #include <string.h>
40 #include <errno.h>
41 #include <syslog.h>
42 #include <ctype.h>
43
44 #include "var.h"
45 #include "misc.h"
46 #include "debug.h"
47
48 #if 0
49 static int bindump __P((void *, size_t));
50
51 static int
52 bindump(buf0, len)
53 void *buf0;
54 size_t len;
55 {
56 unsigned char *buf = (unsigned char *)buf0;
57 size_t i;
58
59 for (i = 0; i < len; i++) {
60 if ((buf[i] & 0x80) || !isprint(buf[i]))
61 printf("\\x%x", buf[i]);
62 else
63 printf("%c", buf[i]);
64 }
65 printf("\n");
66
67 return 0;
68 }
69 #endif
70
71 int
72 hexdump(buf0, len)
73 void *buf0;
74 size_t len;
75 {
76 caddr_t buf = (caddr_t)buf0;
77 size_t i;
78
79 for (i = 0; i < len; i++) {
80 if (i != 0 && i % 32 == 0)
81 printf("\n");
82 if (i % 4 == 0)
83 printf(" ");
84 printf("%02x", (unsigned char)buf[i]);
85 }
86 printf("\n");
87
88 return 0;
89 }
90
91 char *
92 bit2str(n, bl)
93 int n, bl;
94 {
95 #define MAXBITLEN 128
96 static char b[MAXBITLEN + 1];
97 int i;
98
99 if (bl > MAXBITLEN)
100 return "Failed to convert."; /* NG */
101 memset(b, '0', bl);
102 b[bl] = '\0';
103
104 for (i = 0; i < bl; i++) {
105 if (n & (1 << i))
106 b[bl - 1 - i] = '1';
107 }
108
109 return b;
110 }
111
112 const char *
113 debug_location(file, line, func)
114 const char *file;
115 int line;
116 const char *func;
117 {
118 static char buf[1024];
119 const char *p;
120
121 /* truncate pathname */
122 p = strrchr(file, '/');
123 if (p)
124 p++;
125 else
126 p = file;
127
128 if (func)
129 snprintf(buf, sizeof(buf), "%s:%d:%s()", p, line, func);
130 else
131 snprintf(buf, sizeof(buf), "%s:%d", p, line);
132
133 return buf;
134 }
135
136 /*
137 * get file size.
138 * -1: error occured.
139 */
140 int
141 getfsize(path)
142 char *path;
143 {
144 struct stat st;
145
146 if (stat(path, &st) != 0)
147 return -1;
148 else
149 return st.st_size;
150 }
151
152 /*
153 * calculate the difference between two times.
154 * t1: start
155 * t2: end
156 */
157 double
158 timedelta(t1, t2)
159 struct timeval *t1, *t2;
160 {
161 if (t2->tv_usec >= t1->tv_usec)
162 return t2->tv_sec - t1->tv_sec +
163 (double)(t2->tv_usec - t1->tv_usec) / 1000000;
164
165 return t2->tv_sec - t1->tv_sec - 1 +
166 (double)(1000000 + t2->tv_usec - t1->tv_usec) / 1000000;
167 }