Mercurial > noffle
comparison util.c @ 0:04124a4423d4 noffle
[svn] Initial revision
author | enz |
---|---|
date | Tue, 04 Jan 2000 11:35:42 +0000 |
parents | |
children | 526a4c34ee2e |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:04124a4423d4 |
---|---|
1 /* | |
2 util.c | |
3 | |
4 $Id: util.c 3 2000-01-04 11:35:42Z enz $ | |
5 */ | |
6 | |
7 #include "util.h" | |
8 #include <errno.h> | |
9 #include <ctype.h> | |
10 #include <fnmatch.h> | |
11 #include <sys/types.h> | |
12 #include <sys/stat.h> | |
13 #include <fcntl.h> | |
14 #include <time.h> | |
15 #include <unistd.h> | |
16 #include "config.h" | |
17 #include "log.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 void | |
104 Utl_toLower( Str line ) | |
105 { | |
106 char *p; | |
107 | |
108 p = line; | |
109 while ( *p ) | |
110 { | |
111 *p = tolower( *p ); | |
112 ++p; | |
113 } | |
114 } | |
115 | |
116 char * | |
117 Utl_stripWhiteSpace( char *line ) | |
118 { | |
119 char *p; | |
120 | |
121 while ( isspace( *line ) ) | |
122 ++line; | |
123 p = line + strlen( line ) - 1; | |
124 while ( isspace( *p ) ) | |
125 { | |
126 *p = '\0'; | |
127 --p; | |
128 } | |
129 return line; | |
130 } | |
131 | |
132 void | |
133 Utl_cpyStr( Str dst, const char *src ) | |
134 { | |
135 dst[ 0 ] = '\0'; | |
136 strncat( dst, src, MAXCHAR ); | |
137 } | |
138 | |
139 void | |
140 Utl_cpyStrN( Str dst, const char *src, size_t n ) | |
141 { | |
142 dst[ 0 ] = '\0'; | |
143 strncat( dst, src, n ); | |
144 } | |
145 | |
146 void | |
147 Utl_stamp( Str file ) | |
148 { | |
149 FILE *f; | |
150 time_t t; | |
151 | |
152 time( &t ); | |
153 if ( ! ( f = fopen( file, "w" ) ) ) | |
154 { | |
155 Log_err( "Could not open %s for writing (%s)", | |
156 file, strerror( errno ) ); | |
157 return; | |
158 } | |
159 fprintf( f, "%lu\n", t ); | |
160 fclose( f ); | |
161 } | |
162 | |
163 Bool | |
164 Utl_getStamp( time_t *result, Str file ) | |
165 { | |
166 FILE *f; | |
167 | |
168 if ( ! ( f = fopen( file, "r" ) ) ) | |
169 return FALSE; | |
170 if ( fscanf( f, "%lu", result ) != 1 ) | |
171 { | |
172 Log_err( "File %s corrupted", file ); | |
173 fclose( f ); | |
174 return FALSE; | |
175 } | |
176 fclose( f ); | |
177 return TRUE; | |
178 } | |
179 | |
180 void | |
181 Utl_allocAndCpy( char **dst, const char *src ) | |
182 { | |
183 int len = strlen( src ); | |
184 if ( ! ( *dst = (char *)malloc( len + 1 ) ) ) | |
185 { | |
186 Log_err( "Cannot allocate string with length %lu", strlen( src ) ); | |
187 exit( EXIT_FAILURE ); | |
188 } | |
189 memcpy( *dst, src, len + 1 ); | |
190 } | |
191 | |
192 Bool | |
193 Utl_matchPattern( const char *text, const char *pattern ) | |
194 { | |
195 if ( pattern[ 0 ] == '*' && pattern[ 1 ] == '\0' ) | |
196 return TRUE; | |
197 return ( fnmatch( pattern, text, 0 ) == 0 ); | |
198 } |