annotate util.c @ 15:54f08929b195 noffle

[svn] Bring up to date
author enz
date Sat, 29 Apr 2000 13:22:25 +0100
parents 04124a4423d4
children 526a4c34ee2e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
1 /*
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
2 util.c
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
3
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
4 $Id: util.c 3 2000-01-04 11:35:42Z enz $
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
5 */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
6
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
7 #include "util.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
8 #include <errno.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
9 #include <ctype.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
10 #include <fnmatch.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
11 #include <sys/types.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
12 #include <sys/stat.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
13 #include <fcntl.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
14 #include <time.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
15 #include <unistd.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
16 #include "config.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
17 #include "log.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
18
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
19 static const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
20 nextWhiteSpace( const char *p )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
21 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
22 while ( *p && ! isspace( *p ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
23 ++p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
24 return p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
25 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
26
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
27 static const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
28 nextNonWhiteSpace( const char *p )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
29 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
30 while ( *p && isspace( *p ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
31 ++p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
32 return p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
33 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
34
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
35 const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
36 Utl_restOfLn( const char *line, unsigned int token )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
37 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
38 unsigned int i;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
39 const char *p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
40
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
41 p = line;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
42 for ( i = 0; i < token; ++i )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
43 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
44 p = nextNonWhiteSpace( p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
45 p = nextWhiteSpace( p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
46 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
47 p = nextNonWhiteSpace( p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
48 return p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
49 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
50
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
51 const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
52 Utl_getLn( Str result, const char *pos )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
53 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
54 int len = 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
55 const char *p = pos;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
56
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
57 if ( ! p )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
58 return NULL;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
59 while ( *p != '\n' )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
60 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
61 if ( *p == '\0' )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
62 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
63 if ( len > 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
64 Log_err( "Line not terminated by newline: '%s'", pos );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
65 return NULL;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
66 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
67 *(result++) = *(p++);
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
68 ++len;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
69 if ( len >= MAXCHAR - 1 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
70 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
71 *result = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
72 Log_err( "Utl_getLn: line too long: %s", result );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
73 return ++p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
74 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
75 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
76 *result = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
77 return ++p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
78
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
79 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
80
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
81 const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
82 Utl_ungetLn( const char *str, const char *p )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
83 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
84 if ( str == p )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
85 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
86 --p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
87 if ( *p != '\n' )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
88 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
89 Log_dbg( "Utl_ungetLn: not at beginning of line" );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
90 return NULL;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
91 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
92 --p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
93 while ( TRUE )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
94 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
95 if ( p == str )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
96 return p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
97 if ( *p == '\n' )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
98 return p + 1;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
99 --p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
100 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
101 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
102
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
103 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
104 Utl_toLower( Str line )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
105 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
106 char *p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
107
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
108 p = line;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
109 while ( *p )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
110 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
111 *p = tolower( *p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
112 ++p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
113 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
114 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
115
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
116 char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
117 Utl_stripWhiteSpace( char *line )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
118 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
119 char *p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
120
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
121 while ( isspace( *line ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
122 ++line;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
123 p = line + strlen( line ) - 1;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
124 while ( isspace( *p ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
125 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
126 *p = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
127 --p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
128 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
129 return line;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
130 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
131
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
132 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
133 Utl_cpyStr( Str dst, const char *src )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
134 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
135 dst[ 0 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
136 strncat( dst, src, MAXCHAR );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
137 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
138
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
139 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
140 Utl_cpyStrN( Str dst, const char *src, size_t n )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
141 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
142 dst[ 0 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
143 strncat( dst, src, n );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
144 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
145
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
146 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
147 Utl_stamp( Str file )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
148 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
149 FILE *f;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
150 time_t t;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
151
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
152 time( &t );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
153 if ( ! ( f = fopen( file, "w" ) ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
154 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
155 Log_err( "Could not open %s for writing (%s)",
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
156 file, strerror( errno ) );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
157 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
158 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
159 fprintf( f, "%lu\n", t );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
160 fclose( f );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
161 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
162
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
163 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
164 Utl_getStamp( time_t *result, Str file )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
165 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
166 FILE *f;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
167
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
168 if ( ! ( f = fopen( file, "r" ) ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
169 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
170 if ( fscanf( f, "%lu", result ) != 1 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
171 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
172 Log_err( "File %s corrupted", file );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
173 fclose( f );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
174 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
175 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
176 fclose( f );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
177 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
178 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
179
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
180 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
181 Utl_allocAndCpy( char **dst, const char *src )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
182 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
183 int len = strlen( src );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
184 if ( ! ( *dst = (char *)malloc( len + 1 ) ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
185 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
186 Log_err( "Cannot allocate string with length %lu", strlen( src ) );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
187 exit( EXIT_FAILURE );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
188 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
189 memcpy( *dst, src, len + 1 );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
190 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
191
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
192 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
193 Utl_matchPattern( const char *text, const char *pattern )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
194 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
195 if ( pattern[ 0 ] == '*' && pattern[ 1 ] == '\0' )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
196 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
197 return ( fnmatch( pattern, text, 0 ) == 0 );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
198 }