comparison src/util.c @ 43:2842f50feb55 noffle

[svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h, control.c, control.h, database.c, database.h, dynamicstring.c, dynamicstring.h, fetch.c, fetch.h, fetchlist.c, fetchlist.h, group.c, group.h, itemlist.c, itemlist.h, lock.c, lock.h, log.c, log.h, noffle.c, online.c, online.h, outgoing.c, outgoing.h, over.c, over.h, post.c, post.h, protocol.c, protocol.h, pseudo.c, pseudo.h, request.c, request.h, server.c, server.h, util.c, util.h, wildmat.c, wildmat.h: Moved files to the subdirectory src/ * Makefile.am, acconfig.h, configure.in, docs/Makefile.am, src/Makefile.am, Makefile.in, aclocal.m4, config.h.in, configure, install-sh, missing, mkinstalldirs, stamp-h.in, docs/Makefile.in, src/Makefile.in: Added files. They are used by aclocal, autoheader, autoconf and automake. * src/config.c, src/config.h: Renamed to configfile.c and configfile.h, because configure will generate a config.h file itself. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/noffle.c, src/online.c, src/outgoing.c, src/over.c, src/pseudo.c, src/request.c, src/server.c, src/util.c: Changed '#include "config.h"' to '#include "configfile.h"'. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/online.c, src/outgoing.c, src/post.c, src/protocol.c, src/request.c, src/server.c: Files now #include <config.h>. Added missing <stdio.h>. This removes the warnings about snprintf() not being declared. * Makefile: Removed. This is now generated by configure.
author uh1763
date Fri, 05 May 2000 22:45:56 +0100
parents
children 32ba1198c6fa
comparison
equal deleted inserted replaced
42:2467ff423c15 43:2842f50feb55
1 /*
2 util.c
3
4 $Id: util.c 49 2000-05-05 21:45:56Z uh1763 $
5 */
6
7 #include "util.h"
8 #include <errno.h>
9 #include <ctype.h>
10 #include <sys/types.h>
11 #include <sys/stat.h>
12 #include <fcntl.h>
13 #include <time.h>
14 #include <unistd.h>
15 #include "configfile.h"
16 #include "log.h"
17 #include "wildmat.h"
18
19 static const char *
20 nextWhiteSpace( const char *p )
21 {
22 while ( *p && ! isspace( *p ) )
23 ++p;
24 return p;
25 }
26
27 static const char *
28 nextNonWhiteSpace( const char *p )
29 {
30 while ( *p && isspace( *p ) )
31 ++p;
32 return p;
33 }
34
35 const char *
36 Utl_restOfLn( const char *line, unsigned int token )
37 {
38 unsigned int i;
39 const char *p;
40
41 p = line;
42 for ( i = 0; i < token; ++i )
43 {
44 p = nextNonWhiteSpace( p );
45 p = nextWhiteSpace( p );
46 }
47 p = nextNonWhiteSpace( p );
48 return p;
49 }
50
51 const char *
52 Utl_getLn( Str result, const char *pos )
53 {
54 int len = 0;
55 const char *p = pos;
56
57 if ( ! p )
58 return NULL;
59 while ( *p != '\n' )
60 {
61 if ( *p == '\0' )
62 {
63 if ( len > 0 )
64 Log_err( "Line not terminated by newline: '%s'", pos );
65 return NULL;
66 }
67 *(result++) = *(p++);
68 ++len;
69 if ( len >= MAXCHAR - 1 )
70 {
71 *result = '\0';
72 Log_err( "Utl_getLn: line too long: %s", result );
73 return ++p;
74 }
75 }
76 *result = '\0';
77 return ++p;
78
79 }
80
81 const char *
82 Utl_ungetLn( const char *str, const char *p )
83 {
84 if ( str == p )
85 return FALSE;
86 --p;
87 if ( *p != '\n' )
88 {
89 Log_dbg( "Utl_ungetLn: not at beginning of line" );
90 return NULL;
91 }
92 --p;
93 while ( TRUE )
94 {
95 if ( p == str )
96 return p;
97 if ( *p == '\n' )
98 return p + 1;
99 --p;
100 }
101 }
102
103 const char *
104 Utl_getHeaderLn( Str result, const char *p )
105 {
106 const char * res = Utl_getLn( result, p );
107
108 /* Look for followon line if this isn't a blank line. */
109 if ( res != NULL && !isspace( result[ 0 ] ) )
110 while ( res != NULL && res[ 0 ] != '\n' && isspace( res[ 0 ] ) )
111 {
112 Str nextLine;
113 const char *here;
114 char *next;
115
116 here = res;
117 res = Utl_getLn( nextLine, res );
118 next = Utl_stripWhiteSpace( nextLine );
119
120 if ( next[ 0 ] != '\0' )
121 {
122 Utl_catStr( result, " " );
123 Utl_catStr( result, next );
124 }
125 else
126 {
127 res = here;
128 break;
129 }
130 }
131
132 return res;
133 }
134
135 void
136 Utl_toLower( Str line )
137 {
138 char *p;
139
140 p = line;
141 while ( *p )
142 {
143 *p = tolower( *p );
144 ++p;
145 }
146 }
147
148 char *
149 Utl_stripWhiteSpace( char *line )
150 {
151 char *p;
152
153 while ( isspace( *line ) )
154 ++line;
155 p = line + strlen( line ) - 1;
156 while ( isspace( *p ) )
157 {
158 *p = '\0';
159 --p;
160 }
161 return line;
162 }
163
164 void
165 Utl_stripComment( char *line )
166 {
167 for ( ; *line != '\0'; line++ )
168 if ( *line =='#' )
169 {
170 *line = '\0';
171 break;
172 }
173 }
174
175 void
176 Utl_cpyStr( Str dst, const char *src )
177 {
178 dst[ 0 ] = '\0';
179 strncat( dst, src, MAXCHAR );
180 }
181
182 void
183 Utl_cpyStrN( Str dst, const char *src, size_t n )
184 {
185 if ( n > MAXCHAR )
186 n = MAXCHAR;
187 dst[ 0 ] = '\0';
188 strncat( dst, src, n );
189 }
190
191 void
192 Utl_catStr( Str dst, const char *src )
193 {
194 strncat( dst, src, MAXCHAR - strlen( dst ) );
195 }
196
197 void
198 Utl_catStrN( Str dst, const char *src, size_t n )
199 {
200 if ( n > MAXCHAR - strlen( dst ) )
201 n = MAXCHAR - strlen( dst );
202 strncat( dst, src, n );
203 }
204
205 void
206 Utl_stamp( Str file )
207 {
208 FILE *f;
209 time_t t;
210
211 time( &t );
212 if ( ! ( f = fopen( file, "w" ) ) )
213 {
214 Log_err( "Could not open %s for writing (%s)",
215 file, strerror( errno ) );
216 return;
217 }
218 fprintf( f, "%lu\n", t );
219 fclose( f );
220 }
221
222 Bool
223 Utl_getStamp( time_t *result, Str file )
224 {
225 FILE *f;
226
227 if ( ! ( f = fopen( file, "r" ) ) )
228 return FALSE;
229 if ( fscanf( f, "%lu", result ) != 1 )
230 {
231 Log_err( "File %s corrupted", file );
232 fclose( f );
233 return FALSE;
234 }
235 fclose( f );
236 return TRUE;
237 }
238
239 void
240 Utl_rfc822Date( time_t t, Str res )
241 {
242 strftime( res, MAXCHAR,"%a, %d %b %Y %H:%M:%S %z", localtime( &t ) );
243 }
244
245 void
246 Utl_allocAndCpy( char **dst, const char *src )
247 {
248 int len = strlen( src );
249 if ( ! ( *dst = (char *)malloc( len + 1 ) ) )
250 {
251 Log_err( "Cannot allocate string with length %lu", strlen( src ) );
252 exit( EXIT_FAILURE );
253 }
254 memcpy( *dst, src, len + 1 );
255 }