📄 text.c
字号:
/*parse config file, get argument*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "text.h"
FileFilter filefilter;
int parseConfFile (char *file)
{
int fds, i;
int eff;
char *posParse;
char *tok;
fds = open(file, O_RDONLY);
if (fds < 0)
return -1;
char *tmp = readfile(fds);
close(fds);
// suppress commentary
eff = 0;
for (i=0; tmp[i] != 0; i++){
switch (tmp[i]){
case '\n':
eff = 0;
break;
case '#':
eff = 1; // no break !!!
default:
if (eff) tmp[i] = ' ';
}
}
posParse = tmp;
memset(&filefilter, 0, sizeof(FileFilter));
eff = 0;
tok = nextToken(&posParse, ' ');
while (tok != NULL){
if (!strcasecmp(tok, "FileType")) {
eff = 1;
}else{
if(eff){
strcpy(filefilter.filter[filefilter.num], tok);
filefilter.num ++;
}
}
tok = nextToken(&posParse, ' ');
}
free(tmp);
#ifdef DEBUG
for(i = 0; i < filefilter.num; i ++){
printf("[filter %d] = %s\n", i, filefilter.filter[i]);
}
#endif
return 0;
}
/* Read a whole file
*/
char *readfile (int fds)
{
ssize_t pos = 0;
ssize_t size = 512;
int cont = 1;
char buf[500];
ssize_t nbRead;
char *res = malloc(size);
while(cont == 1){
switch (nbRead = read(fds, &buf, 500)){
case 0 :
cont = 0;
break;
case -1 :
cont = -1;
break;
default :
if (pos + nbRead >= size) {
size *= 2;
char *tmp = malloc(size);
memcpy(tmp, res, pos);
free(res);
res = tmp;
}
memcpy(res+pos, buf, nbRead);
pos += nbRead;
break;
}
}
res[pos] = 0;
return res;
}
/* find the next token in the in config file
* must delete comments
* no allocation (cf strtok); content is changed
*/
char *nextToken(char **posParse, char c)
{
// go to the beginning of next word
int cont = 1;
while (cont) {
if (**posParse == c || **posParse == ' ' || **posParse == '\t'
|| **posParse == '\r' || **posParse == '\n') {
(*posParse)++;
} else if (**posParse == '#') {
*posParse = strchr(*posParse, '\n');
if (*posParse == NULL) {
return NULL;
} else {
(*posParse)++;
}
} else {
cont=0;
}
}
// find the end of this word
char *deb = *posParse;
if (**posParse == '\"') {
deb++; (*posParse)++;
while (**posParse != 0 && **posParse != '\"') (*posParse)++;
} else {
while(**posParse != 0 && **posParse != c && **posParse != ' '
&& **posParse != '\t' && **posParse != '\r' && **posParse != '\n') {
(*posParse)++;
}
if (*posParse == deb) return NULL; // EOF
}
if (**posParse != 0) {
**posParse = 0;
(*posParse)++;
}
return deb;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -