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 Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data 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 <sys/types.h></span>
00010 <span class="preprocessor">#include <sys/stat.h></span>
00011 <span class="preprocessor">#include <stdlib.h></span>
00012 <span class="preprocessor">#include <string.h></span>
00013 <span class="preprocessor">#include <stdio.h></span>
00014 <span class="preprocessor">#include <time.h></span>
00015 <span class="preprocessor">#include <errno.h></span>
00016 <span class="preprocessor">#include <signal.h></span>
00017 <span class="preprocessor">#include <ctype.h></span>
00018 <span class="preprocessor">#include <fcntl.h></span>
00019 <span class="preprocessor">#include <unistd.h></span>
00020 <span class="preprocessor">#include <dirent.h></span>
00021
00022 <span class="preprocessor">#include <u/misc.h></span>
00023 <span class="preprocessor">#include <u/carpal.h></span>
00024 <span class="preprocessor">#include <u/memory.h></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 < p && <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 && <a class="code" href="group__misc.html#ga0">u_isblank</a>(*p))
00056 ++p;
00057
00058 <span class="keywordflow">if</span>(p > 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(&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 >= &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 < 0 || wr >= (<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 < 0 || wr >= (<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 > 0; --i)
00238 <span class="keywordflow">if</span>(buf[i] == sep && 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 < 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">←Products</a>
</div>
<div style="text-align:center;">
© 2005-2006 - <a href="http://www.koanlogic.com">KoanLogic S.r.l.</a> - All rights reserved
</div>
</div>
</body>
</html>
|