60 static const char* expression =
61 "^[ \t]*cache_dir([ \t]+([[:alpha:]]+))?[ \t]+([[:graph:]]+)[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+)";
64 if (
debug ) fprintf(
debug,
"# trying to open %s\n", fn ? fn :
"(null)" );
65 std::ifstream cfgin(fn);
67 fprintf( stderr,
"fopen %s: %s\n", fn,
strerror(errno) );
72 if (
debug ) fprintf(
debug,
"# trying to compile \"%s\"\n", expression );
77 regerror( result, &rexp, buffer,
sizeof(buffer) );
78 fprintf( stderr,
"regular expression \"%s\": %s\n", expression, buffer );
83 if (
debug ) fputs(
"# trying to read lines\n",
debug );
88 while ( cfgin.getline( line,
sizeof(line)) ) {
92 if ( (s = (
char*) memchr( line,
'#',
sizeof(line) )) ) *s =
'\0';
95 if ( *line ==
'\0' || *line ==
'\n' )
continue;
98 if ( (result=
regexec( &rexp, line, 7, subs, 0 )) != 0 ) {
102 regerror( result, &rexp, buffer,
sizeof(buffer) );
103 fprintf( stderr,
"while matching \"%s\" against %s%s\n",
104 expression, line, buffer );
111 memset( &cd, 0,
sizeof(cd) );
112 if (
debug ) fprintf(
debug,
"# match from %d-%d on line %s",
113 (
int)subs[0].rm_so, (
int)subs[0].rm_eo,
117 line[ subs[0].
rm_eo ] =
'\0';
122 if ( subs[6].rm_so == -1 ) {
124 cd.type = CacheDir::CDT_UFS;
127 line[ subs[offset].rm_eo ] =
'\0';
128 if (
debug ) fprintf(
debug,
"# match from %d-%d on \"%s\"\n",
129 (
int)subs[offset].rm_so,
130 (
int)subs[offset].rm_eo,
131 line+subs[offset].rm_so );
132 if ( strcmp( line + subs[offset].rm_so,
"ufs" ) == 0 )
133 cd.type = CacheDir::CDT_UFS;
134 else if ( strcmp( line + subs[offset].rm_so,
"asyncufs" ) == 0 )
135 cd.type = CacheDir::CDT_AUFS;
136 else if ( strcmp( line + subs[offset].rm_so,
"diskd" ) == 0 )
137 cd.type = CacheDir::CDT_DISKD;
139 cd.type = CacheDir::CDT_OTHER;
144 line[ subs[offset].rm_eo ] =
'\0';
145 if (
debug ) fprintf(
debug,
"# match from %d-%d on \"%s\"\n",
146 (
int)subs[offset].rm_so,
147 (
int)subs[offset].rm_eo,
148 line+subs[offset].rm_so );
149 cd.base =
xstrdup( line+subs[offset].rm_so );
153 line[ subs[offset].rm_eo ] =
'\0';
154 if (
debug ) fprintf(
debug,
"# match from %d-%d on \"%s\"\n",
155 (
int)subs[offset].rm_so,
156 (
int)subs[offset].rm_eo,
157 line+subs[offset].rm_so );
158 cd.size = strtoul( line+subs[offset].rm_so,
nullptr, 10 );
162 line[ subs[offset].rm_eo ] =
'\0';
163 if (
debug ) fprintf(
debug,
"# match from %d-%d on \"%s\"\n",
164 (
int)subs[offset].rm_so,
165 (
int)subs[offset].rm_eo,
166 line+subs[offset].rm_so );
167 cd.level[0] = strtoul( line+subs[offset].rm_so,
nullptr, 10 );
171 line[ subs[offset].rm_eo ] =
'\0';
172 if (
debug ) fprintf(
debug,
"# match from %d-%d on \"%s\"\n",
173 (
int)subs[offset].rm_so,
174 (
int)subs[offset].rm_eo,
175 line+subs[offset].rm_so );
176 cd.level[1] = strtoul( line+subs[offset].rm_so,
nullptr, 10 );
179 cachedir.push_back( cd );
185 return cachedir.size();
int regexec(regex_t *preg, const char *string, size_t nmatch, pmatch, int eflags) const
size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
int regcomp(regex_t *preg, const char *pattern, int cflags)
void regfree(regex_t *preg)
int readConfigFile(CacheDirVector &cachedir, const char *fn, FILE *debug)