File: misc_8c-source.html

package info (click to toggle)
klone 1.1.1.dfsg1-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 6,480 kB
  • ctags: 4,238
  • sloc: ansic: 16,288; makefile: 384; sh: 351
file content (218 lines) | stat: -rw-r--r-- 11,753 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>LibU: misc.c Source File</title>
<link href="kl.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a></div>
<div class="nav">
<a class="el" href="dir_000000.html">src</a></div>
<h1>misc.c</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/* </span>
00002 <span class="comment"> * Copyright (c) 2005, 2006 by KoanLogic s.r.l. - All rights reserved.  </span>
00003 <span class="comment"> */</span>
00004 
00005 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> rcsid[] =
00006     <span class="stringliteral">"$Id: misc.c,v 1.16 2006/01/09 12:38:38 tat Exp $"</span>;
00007 
00008 <span class="preprocessor">#include "libu_conf.h"</span>
00009 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
00010 <span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
00011 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
00012 <span class="preprocessor">#include &lt;string.h&gt;</span>
00013 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
00014 <span class="preprocessor">#include &lt;time.h&gt;</span>
00015 <span class="preprocessor">#include &lt;errno.h&gt;</span>
00016 <span class="preprocessor">#include &lt;signal.h&gt;</span>
00017 <span class="preprocessor">#include &lt;ctype.h&gt;</span>
00018 <span class="preprocessor">#include &lt;fcntl.h&gt;</span>
00019 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
00020 <span class="preprocessor">#include &lt;dirent.h&gt;</span>
00021 
00022 <span class="preprocessor">#include &lt;u/misc.h&gt;</span>
00023 <span class="preprocessor">#include &lt;u/carpal.h&gt;</span>
00024 <span class="preprocessor">#include &lt;u/memory.h&gt;</span>
00025 
<a name="l00033"></a><a class="code" href="group__misc.html#ga0">00033</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga0">u_isblank</a>(<span class="keywordtype">int</span> c)
00034 {
00035     <span class="keywordflow">return</span> c == <span class="charliteral">' '</span> || c == <span class="charliteral">'\t'</span>;
00036 }
00037 
<a name="l00040"></a><a class="code" href="group__misc.html#ga1">00040</a> <span class="keywordtype">void</span> <a class="code" href="group__misc.html#ga1">u_trim</a>(<span class="keywordtype">char</span> *s)
00041 {
00042     <span class="keywordtype">char</span> *p;
00043 
00044     <span class="keywordflow">if</span>(!s)
00045         <span class="keywordflow">return</span>;
00046 
00047     <span class="comment">/* trim trailing blanks */</span>
00048     p = s + strlen(s) -1;
00049     <span class="keywordflow">while</span>(s &lt; p &amp;&amp; <a class="code" href="group__misc.html#ga0">u_isblank</a>(*p))
00050         --p;
00051     p[1] = 0;
00052 
00053     <span class="comment">/* trim leading blanks */</span>
00054     p = s;
00055     <span class="keywordflow">while</span>(*p &amp;&amp; <a class="code" href="group__misc.html#ga0">u_isblank</a>(*p))
00056         ++p;
00057 
00058     <span class="keywordflow">if</span>(p &gt; s)
00059         memmove(s, p, 1 + strlen(p));
00060 }
00061 
<a name="l00065"></a><a class="code" href="group__misc.html#ga2">00065</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga2">u_isblank_str</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *ln)
00066 {
00067     <span class="keywordflow">for</span>(; *ln; ++ln)
00068         <span class="keywordflow">if</span>(!<a class="code" href="group__misc.html#ga0">u_isblank</a>(*ln))
00069             <span class="keywordflow">return</span> 0;
00070     <span class="keywordflow">return</span> 1;
00071 }
00072 
<a name="l00076"></a><a class="code" href="group__misc.html#ga3">00076</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga3">u_isnl</a>(<span class="keywordtype">int</span> c)
00077 {
00078     <span class="keywordflow">return</span> c == <span class="charliteral">'\n'</span> || c == <span class="charliteral">'\r'</span>;
00079 }
00080 
<a name="l00084"></a><a class="code" href="group__misc.html#ga4">00084</a> <span class="keywordtype">char</span> *<a class="code" href="group__misc.html#ga4">u_strndup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, size_t len)
00085 {
00086     <span class="keywordtype">char</span> *cp;
00087 
00088     <span class="keywordflow">if</span>((cp = (<span class="keywordtype">char</span>*) <a class="code" href="group__alloc.html#ga0">u_malloc</a>(len + 1)) == NULL)
00089         <span class="keywordflow">return</span> NULL;
00090     memcpy(cp, s, len);
00091     cp[len] = 0;
00092     <span class="keywordflow">return</span> cp;
00093 }
00094 
<a name="l00096"></a><a class="code" href="group__misc.html#ga5">00096</a> <span class="keywordtype">char</span> *<a class="code" href="group__misc.html#ga5">u_strdup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *s)
00097 {
00098     <span class="keywordflow">return</span> <a class="code" href="group__misc.html#ga4">u_strndup</a>(s, strlen(s));
00099 }
00100 
<a name="l00105"></a><a class="code" href="group__misc.html#ga6">00105</a> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga6">u_savepid</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *pf)
00106 {
00107     FILE *pfp;
00108 
00109     dbg_return_if ((pfp = fopen(pf, <span class="stringliteral">"w"</span>)) == NULL, ~0);
00110 
00111     fprintf(pfp, <span class="stringliteral">"%ld\n"</span>, (<span class="keywordtype">long</span>) getpid());
00112     fclose(pfp);
00113 
00114     <span class="keywordflow">return</span> 0;
00115 }
00116 
<a name="l00122"></a><a class="code" href="group__misc.html#ga7">00122</a> <span class="keywordtype">char</span> *<a class="code" href="group__misc.html#ga7">u_sstrncpy</a> (<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> *src, size_t size)
00123 {
00124     dst[size] = <span class="charliteral">'\0'</span>;
00125     <span class="keywordflow">return</span> strncpy(dst, src, size);
00126 }
00127 
<a name="l00131"></a><a class="code" href="group__misc.html#ga8">00131</a> <span class="keywordtype">void</span>* <a class="code" href="group__misc.html#ga8">u_memdup</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *src, size_t size)
00132 {
00133     <span class="keywordtype">void</span> *p;
00134 
00135     p = <a class="code" href="group__alloc.html#ga0">u_malloc</a>(size);
00136     <span class="keywordflow">if</span>(p)
00137         memcpy(p, src, size);
00138     <span class="keywordflow">return</span> p;
00139 }
00140 
<a name="l00153"></a><a class="code" href="group__misc.html#ga9">00153</a> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga9">u_tokenize</a> (<span class="keywordtype">char</span> *wlist, <span class="keyword">const</span> <span class="keywordtype">char</span> *delim, <span class="keywordtype">char</span> **tokv, size_t tokv_sz)
00154 {
00155     <span class="keywordtype">char</span> **ap;
00156 
00157     dbg_return_if (wlist == NULL, ~0);
00158     dbg_return_if (delim == NULL, ~0);
00159     dbg_return_if (tokv == NULL, ~0);
00160     dbg_return_if (tokv_sz == 0, ~0);
00161 
00162     ap = tokv;
00163 
00164     <span class="keywordflow">for</span> ( ; (*ap = strsep(&amp;wlist, delim)) != NULL; )
00165     {
00166         <span class="comment">/* skip empty field */</span>
00167         <span class="keywordflow">if</span> (**ap == <span class="charliteral">'\0'</span>)
00168             <span class="keywordflow">continue</span>;
00169 
00170         <span class="comment">/* check bounds */</span>
00171         <span class="keywordflow">if</span> (++ap &gt;= &amp;tokv[tokv_sz - 1])
00172             <span class="keywordflow">break</span>;
00173     }
00174 
00175     <span class="comment">/* put an explicit stopper to tokv */</span>
00176     *ap = NULL;
00177 
00178     <span class="keywordflow">return</span> 0;
00179 }
00180 
<a name="l00192"></a><a class="code" href="group__misc.html#ga10">00192</a> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga10">u_snprintf</a>(<span class="keywordtype">char</span> *str, size_t size, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
00193 {
00194     va_list ap;
00195     <span class="keywordtype">int</span> wr;
00196 
00197     va_start(ap, fmt);
00198 
00199     wr = vsnprintf(str, size, fmt, ap);
00200 
00201     va_end(ap);
00202 
00203     dbg_err_if(wr &lt; 0 || wr &gt;= (<span class="keywordtype">int</span>)size);
00204 
00205     <span class="keywordflow">return</span> 0;
00206 err:
00207     <span class="keywordflow">return</span> ~0;
00208 }
00209 
<a name="l00223"></a><a class="code" href="group__misc.html#ga11">00223</a> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga11">u_path_snprintf</a>(<span class="keywordtype">char</span> *buf, size_t sz, <span class="keywordtype">char</span> sep, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
00224 {
00225     va_list ap;
00226     <span class="keywordtype">int</span> wr, i, len;
00227 
00228     va_start(ap, fmt);
00229 
00230     wr = vsnprintf(buf, sz, fmt, ap);
00231 
00232     va_end(ap);
00233 
00234     dbg_err_if(wr &lt; 0 || wr &gt;= (<span class="keywordtype">int</span>)sz);
00235 
00236     <span class="comment">/* remove multiple consecutive '/' */</span>
00237     <span class="keywordflow">for</span>(len = i = strlen(buf); i &gt; 0; --i)
00238         <span class="keywordflow">if</span>(buf[i] == sep &amp;&amp; buf[i-1] == sep)
00239             memmove(buf + i, buf + i + 1, len--);
00240 
00241     <span class="keywordflow">return</span> 0;
00242 err:
00243     <span class="keywordflow">return</span> ~0;
00244 }
00245 
00246 <span class="keyword">inline</span> <span class="keywordtype">void</span> u_use_unused_args(<span class="keywordtype">char</span> *dummy, ...)
00247 {
00248     dummy = 0;
00249     <span class="keywordflow">return</span>;
00250 }
00251 
<a name="l00253"></a><a class="code" href="group__misc.html#ga13">00253</a> <span class="keywordtype">int</span> <a class="code" href="group__misc.html#ga13">u_data_is_bin</a> (<span class="keywordtype">char</span> *data, size_t sz)
00254 {
00255     size_t i;
00256 
00257     <span class="keywordflow">for</span> (i = 0; i &lt; sz; i++)
00258     {
00259         <span class="keywordflow">if</span> (!isascii(data[i]))
00260             <span class="keywordflow">return</span> 1;
00261     }
00262 
00263     <span class="keywordflow">return</span> 0;
00264 }
00265 
</pre></div><hr>
<div> 
  <div style="text-align:left">
    <a href="http://www.koanlogic.com/kl/cont/gb/html/products.html">&larr;Products</a>
  </div>
  <div style="text-align:center;">
    &copy; 2005-2006 - <a href="http://www.koanlogic.com">KoanLogic S.r.l.</a> - All rights reserved
  </div>
</div>

</body>
</html>