diff -ur -N findutils-20080905.orig/locate/locate.c findutils-20080905/locate/locate.c --- findutils-20080905.orig/locate/locate.c 2008-07-10 09:58:41.000000000 +0200 +++ findutils-20080905/locate/locate.c 2008-08-02 11:30:12.000000000 +0200 @@ -332,7 +332,6 @@ struct process_data { int c; /* An input byte. */ - char itemcount; /* Indicates we're at the beginning of an slocate db. */ int count; /* The length of the prefix shared with the previous database entry. */ int len; char *original_filename; /* The current input database entry. */ @@ -569,35 +568,17 @@ if (procdata->slocatedb_format) { - if (procdata->itemcount == 0) - { - ungetc(procdata->c, procdata->fp); - procdata->count = 0; - procdata->len = 0; - } - else if (procdata->itemcount == 1) - { - procdata->count = procdata->len-1; - } - else - { - if (procdata->c == LOCATEDB_ESCAPE) - procdata->count += (short)get_short (procdata->fp); - else if (procdata->c > 127) - procdata->count += procdata->c - 256; - else - procdata->count += procdata->c; - } + /* Manufacture initial count=0 for slocate database. */ + ungetc (procdata->c, procdata->fp); + procdata->c = procdata->slocatedb_format = 0; } - else - { + if (procdata->c == LOCATEDB_ESCAPE) procdata->count += (short)get_short (procdata->fp); else if (procdata->c > 127) procdata->count += procdata->c - 256; else procdata->count += procdata->c; - } if (procdata->count > procdata->len || procdata->count < 0) { @@ -613,27 +594,17 @@ nread = locate_read_str (&procdata->original_filename, &procdata->pathsize, procdata->fp, 0, procdata->count); - if (nread < 0) + if (nread < 1) return VISIT_ABORT; procdata->c = getc (procdata->fp); - procdata->len = procdata->count + nread; - s = procdata->original_filename + procdata->len - 1; /* Move to the last char in path. */ + procdata->len = procdata->count + nread - 1; + s = procdata->original_filename + procdata->len; /* Move to the last char in path. */ assert (s[0] != '\0'); assert (s[1] == '\0'); /* Our terminator. */ assert (s[2] == '\0'); /* Added by locate_read_str. */ procdata->munged_filename = procdata->original_filename; - if (procdata->slocatedb_format) - { - /* Don't increment indefinitely, it might overflow. */ - if (procdata->itemcount < 6) - { - ++(procdata->itemcount); - } - } - - return VISIT_CONTINUE; } @@ -1087,8 +1058,6 @@ oldformat = 0; procdata.endian_state = GetwordEndianStateInitial; procdata.len = procdata.count = 0; - procdata.slocatedb_format = 0; - procdata.itemcount = 0; procdata.dbfile = dbfile; procdata.fp = fp;