From b63076aa3fbbc0c2d3c08c00537ea1b2db23bca3 Mon Sep 17 00:00:00 2001 From: steffen Date: Sat, 15 Jun 2013 22:00:06 +0000 Subject: [PATCH] need torewrite search code again.. --- mapsys/map_searchhash.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/mapsys/map_searchhash.c b/mapsys/map_searchhash.c index cbfb2d8..bd0c64a 100644 --- a/mapsys/map_searchhash.c +++ b/mapsys/map_searchhash.c @@ -480,7 +480,7 @@ static char maps_line[MAP_SEARCHLINE_LEN*4]; * parameter: pos - entry position inside file * data - destination of found data * size - size of data block - * return: next position to read data. + * return: final start of current data block */ unsigned long int maps_readpos (unsigned long int pos, struct map_search_data *data, int *size) { size_t realpos; @@ -505,7 +505,7 @@ unsigned long int maps_readpos (unsigned long int pos, struct map_search_data *d d_printf ("maps_readpos: found no start. pos:%ld realpos:%lld", pos, realpos); return -1; } - d_printf ("start:%d", start); +// d_printf ("start:%d", start); /* search where the current line ends */ for (end = start; end < readsize && maps_line[end] != '\n'; end++); @@ -517,12 +517,12 @@ unsigned long int maps_readpos (unsigned long int pos, struct map_search_data *d *data = map_search_line2data (maps_line+start); *size = end-start; - return realpos+start; + return start; }; int map_search (char *name, struct map_search_data *data, int datasize) { - size_t blocksize, blockstart; + uint64_t blocksize, blockstart; struct stat buf; int i, j, cmpres, k; @@ -541,9 +541,9 @@ int map_search (char *name, struct map_search_data *data, int datasize) { d_printf ("map_search something went wrong. i < 0 name:%s", name); return 0; } - d_printf ("search blocksize:%lld blockstart:%lld i:%d j:%d", blocksize, blockstart, i, j); - - if ((cmpres = strcasecmp (name, data->name)) > 0) { + d_printf ("search blocksize:%lld blockstart:%lld i:%d j:%d", blocksize, blockstart, i, j, data->name); + d_printf ("compare: '%s' with '%s'", name, data->name); + if ((cmpres = strncasecmp (name, data->name, strlen (name)))> 0) { /* name is lager than data */ blocksize = blocksize - ((i+j) - blockstart); blockstart = i+j; @@ -552,9 +552,10 @@ int map_search (char *name, struct map_search_data *data, int datasize) { /* name is smaller than data */ blocksize = i - blockstart; } + d_printf ("cmpres: %d", cmpres); } while (cmpres != 0 && blocksize > MAP_SEARCHLINE_LEN*2); - d_printf ("found blockstart:%lld datasize:%d, i:%d", blockstart, datasize, i); + d_printf ("found blockstart:%lld datasize:%d, i:%d text:'%-12s'", blockstart, datasize, i, data->name); blockstart = i-MAP_SEARCHLINE_LEN; if (blockstart < 0) blockstart = 0; for (i = 0, k = 0; i < datasize*2 && k < datasize; i++) {