IMPROVES-i5 full fix on sequal_full()
This commit is contained in:
40
lib11sht.c
40
lib11sht.c
@@ -42,44 +42,48 @@ int sequal(char *a, char *b, float shold)
|
||||
{
|
||||
float ratio;
|
||||
char s1[LEVN_SBUFF], s2[LEVN_SBUFF];
|
||||
return sequal_full(a, b, shold, &ratio, s1, s2);
|
||||
return sequal_full(a, b, shold, &ratio, s1, LEVN_SBUFF, s2, LEVN_SBUFF);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
int sequal_full(char *a, char *b, float shold, float *ratio, char *s1, char *s2)
|
||||
int sequal_full(char *a, char *b, float shold, float *ratio,
|
||||
char *s1, size_t s1_size,
|
||||
char *s2, size_t s2_size)
|
||||
{
|
||||
int i;
|
||||
size_t i;
|
||||
|
||||
if(!a || !b || !s1 || !s2 || !ratio)
|
||||
if(!a || !b || !s1 || !s2 || !ratio || s1_size == 0 || s2_size == 0)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* remove accents */
|
||||
asciify(a, s1, LEVN_SBUFF);
|
||||
asciify(b, s2, LEVN_SBUFF);
|
||||
/* remove accents (asciify NUL-terminates within s1_size / s2_size) */
|
||||
asciify(a, s1, s1_size);
|
||||
asciify(b, s2, s2_size);
|
||||
|
||||
/* trim spaces (leading, trailing, and internal collapse) */
|
||||
trim(s1);
|
||||
trim(s2);
|
||||
|
||||
/* lowercase */
|
||||
for(i=0; i<LEVN_SBUFF && s1[i]; i++)
|
||||
/* lowercase, bounded by each buffer's actual size */
|
||||
for(i=0; i<s1_size && s1[i]; i++)
|
||||
s1[i] = (char)tolower((unsigned char)s1[i]);
|
||||
for(i=0; i<LEVN_SBUFF && s2[i]; i++)
|
||||
for(i=0; i<s2_size && s2[i]; i++)
|
||||
s2[i] = (char)tolower((unsigned char)s2[i]);
|
||||
|
||||
i=strcmp(s1, s2);
|
||||
if(!i)
|
||||
{
|
||||
*ratio=1.0;
|
||||
return 0;
|
||||
int cmp = strcmp(s1, s2);
|
||||
if(cmp == 0)
|
||||
{
|
||||
*ratio = 1.0;
|
||||
return 0;
|
||||
}
|
||||
*ratio = shit11(s1, s2);
|
||||
if(*ratio > shold)
|
||||
return 0;
|
||||
return (cmp < 0) ? -1 : 1;
|
||||
}
|
||||
*ratio = shit11(s1, s2);
|
||||
if(*ratio > shold)
|
||||
return 0;
|
||||
return (i < 0)? -1 : 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
Reference in New Issue
Block a user