contrib/entitynorm/generate_entitylist.c
3506ac49
b0b8398b
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdint.h>
 #include "../../libclamav/hashtab.h"
3506ac49
 #include <sys/types.h>
 #include <dirent.h>
 
 #define MAX_LINE 1024
 /* ------------ generating entity tables from .ent files ---------------- */
b0b8398b
 static uint16_t* map_data = NULL;
 static size_t map_data_n = 0;
3506ac49
 
cc447ac8
 static void loadEntities(struct cli_hashtable* s)
3506ac49
 {
 	char line[MAX_LINE];
 
b0b8398b
 	while( fgets(line, MAX_LINE, stdin)) {
 		const char* name = line;
 		char* mapto;
 		size_t val;
cc447ac8
 		struct cli_element* elem;
b0b8398b
 		uint16_t converted;
 		int found=0, i;
 
 		mapto = strchr(line,',');
 		if(!mapto) {
 			fprintf(stderr,"Invalid line:%s\n",line);
 			abort();
3506ac49
 		}
b0b8398b
 		*mapto++ = '\0';
 
 		mapto[strlen(mapto)-1] = '\0';
cc447ac8
 		if(elem = cli_hashtab_find(s,name,strlen(name))) {
b0b8398b
 			if(strlen(elem->key) == strlen(name)) {
 				fprintf(stderr, "Duplicate entity:%s\n", name);
3c882206
 			}
b0b8398b
 			continue;
3506ac49
 		}
b0b8398b
 		converted = atoi(mapto);
cc447ac8
 		cli_hashtab_insert(s,name,strlen(name), converted);
3506ac49
 	}
 }
c3671221
 extern short cli_debug_flag;
3506ac49
 
 int main(int argc, char* argv[])
 {
cc447ac8
 	struct cli_hashtable ht;
b0b8398b
 	int i;
c3671221
 	cli_debug_flag=1;
cc447ac8
 	cli_hashtab_init(&ht,2048);
3506ac49
 
b0b8398b
 	loadEntities(&ht);
cc447ac8
 	cli_hashtab_generate_c(&ht,"entities_htable");
3506ac49
 	return 0;
 }