Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Version 1.07.0
- github #138: rtlib: freebsd: Fix deprecated use of VM_METER to use VM_TOTAL (William Breathitt Gray)
- sf.net #899: TRIM( wstring ) causes crash if string is single space
- sf.net #900: LTRIM( wstring, filter ) and TRIM( wstring, filter ) truncate result if filter is zero length string
- github #116: Fix optimizations in [L/R]TrimAny rtlib functions (SkyFish)


Version 1.06.0
Expand Down
49 changes: 21 additions & 28 deletions src/rtlib/str_ltrimany.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,68 +4,61 @@

FBCALL FBSTRING *fb_LTrimAny
(
FBSTRING *src,
FBSTRING *src,
FBSTRING *pattern
)
{
const char *pachText = NULL;
const char *pachText = NULL;
FBSTRING *dst;
ssize_t len;

if( src == NULL )
{
fb_hStrDelTemp( pattern );
return &__fb_ctx.null_desc;
}
if( src == NULL )
{
fb_hStrDelTemp( pattern );
return &__fb_ctx.null_desc;
}

FB_STRLOCK();
FB_STRLOCK();

len = 0;
if( src->data != NULL )
{
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
pachText = src->data;
len = FB_STRSIZE( src );
{
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
pachText = src->data;
len = FB_STRSIZE( src );
if( len_pattern != 0 )
{
while ( len != 0 )
{
ssize_t i;
for( i=0; i!=len_pattern; ++i )
{
if( FB_MEMCHR( pattern->data, *pachText, len_pattern )!=NULL )
break;
}

if( i==len_pattern )
break;
{
if( FB_MEMCHR( pattern->data, *pachText, len_pattern ) == NULL )
break;

--len;
++pachText;
--len;
++pachText;
}
}
}

if( len > 0 )
{
/* alloc temp string */
dst = fb_hStrAllocTemp_NoLock( NULL, len );
dst = fb_hStrAllocTemp_NoLock( NULL, len );
if( dst != NULL )
{
/* simple copy */
fb_hStrCopy( dst->data, pachText, len );
}
else
dst = &__fb_ctx.null_desc;
}
}
else
dst = &__fb_ctx.null_desc;

/* del if temp */
fb_hStrDelTemp_NoLock( src );
fb_hStrDelTemp_NoLock( pattern );
fb_hStrDelTemp_NoLock( pattern );

FB_STRUNLOCK();
FB_STRUNLOCK();

return dst;
}
45 changes: 19 additions & 26 deletions src/rtlib/str_rtrimany.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,61 +7,54 @@ FBCALL FBSTRING *fb_RTrimAny( FBSTRING *src, FBSTRING *pattern )
FBSTRING *dst;
ssize_t len;

if( src == NULL )
{
fb_hStrDelTemp( pattern );
return &__fb_ctx.null_desc;
}
if( src == NULL )
{
fb_hStrDelTemp( pattern );
return &__fb_ctx.null_desc;
}

FB_STRLOCK();
FB_STRLOCK();

len = 0;
if( src->data != NULL )
{
const char *pachText = src->data;
{
const char *pachText = src->data;
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
len = FB_STRSIZE( src );
len = FB_STRSIZE( src );
if( len_pattern != 0 )
{
while ( len != 0 )
{
ssize_t i;
--len;
for( i=0; i!=len_pattern; ++i )
{
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern )!=NULL )
break;
}

if( i==len_pattern )
{
++len;
break;
}
{
--len;
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern ) == NULL )
{
++len;
break;
}
}
}
}

if( len > 0 )
{
/* alloc temp string */
dst = fb_hStrAllocTemp_NoLock( NULL, len );
dst = fb_hStrAllocTemp_NoLock( NULL, len );
if( dst != NULL )
{
/* simple copy */
fb_hStrCopy( dst->data, src->data, len );
}
else
dst = &__fb_ctx.null_desc;
}
}
else
dst = &__fb_ctx.null_desc;

/* del if temp */
fb_hStrDelTemp_NoLock( src );
fb_hStrDelTemp_NoLock( pattern );

FB_STRUNLOCK();
FB_STRUNLOCK();

return dst;
}
68 changes: 27 additions & 41 deletions src/rtlib/str_trimany.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,80 +4,66 @@

FBCALL FBSTRING *fb_TrimAny( FBSTRING *src, FBSTRING *pattern )
{
const char *pachText = NULL;
const char *pachText = NULL;
FBSTRING *dst;
ssize_t len;

if( src == NULL )
{
fb_hStrDelTemp( pattern );
return &__fb_ctx.null_desc;
}
if( src == NULL )
{
fb_hStrDelTemp( pattern );
return &__fb_ctx.null_desc;
}

FB_STRLOCK();
FB_STRLOCK();

len = 0;
if( src->data != NULL )
{
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
pachText = src->data;
len = FB_STRSIZE( src );
{
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
pachText = src->data;
len = FB_STRSIZE( src );
if( len_pattern != 0 )
{
while ( len != 0 )
{
ssize_t i;
for( i=0; i!=len_pattern; ++i )
{
if( FB_MEMCHR( pattern->data, *pachText, len_pattern )!=NULL )
break;
}

if( i==len_pattern )
break;
{
if( FB_MEMCHR( pattern->data, *pachText, len_pattern ) == NULL )
break;

--len;
++pachText;
--len;
++pachText;
}
while ( len != 0 )
{
ssize_t i;
--len;
for( i=0; i!=len_pattern; ++i )
{
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern )!=NULL )
break;
}

if( i==len_pattern )
{
++len;
break;
}
{
--len;
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern ) == NULL )
{
++len;
break;
}
}
}
}

if( len > 0 )
{
/* alloc temp string */
dst = fb_hStrAllocTemp_NoLock( NULL, len );
dst = fb_hStrAllocTemp_NoLock( NULL, len );
if( dst != NULL )
{
/* simple copy */
fb_hStrCopy( dst->data, pachText, len );
}
else
dst = &__fb_ctx.null_desc;
}
}
else
dst = &__fb_ctx.null_desc;

/* del if temp */
fb_hStrDelTemp_NoLock( src );
fb_hStrDelTemp_NoLock( pattern );
fb_hStrDelTemp_NoLock( pattern );

FB_STRUNLOCK();
FB_STRUNLOCK();

return dst;
}
43 changes: 20 additions & 23 deletions src/rtlib/strw_ltrimany.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,43 @@

FBCALL FB_WCHAR *fb_WstrLTrimAny ( const FB_WCHAR *src, const FB_WCHAR *pattern )
{
const FB_WCHAR *pachText;
FB_WCHAR *dst;
const FB_WCHAR *pachText;
FB_WCHAR *dst;
ssize_t len;

if( src == NULL ) {
return NULL;
}
if( src == NULL ) {
return NULL;
}

len = fb_wstr_Len( src );
{
ssize_t len_pattern = fb_wstr_Len( pattern );
pachText = src;
while ( len != 0 )
{
ssize_t i;
for( i=0; i!=len_pattern; ++i ) {
if( wcschr( pattern, *pachText )!=NULL ) {
break;
}
}
if( i==len_pattern ) {
break;
}
--len;
++pachText;
{
ssize_t len_pattern = fb_wstr_Len( pattern );
pachText = src;
if( len_pattern != 0 )
{
while ( len != 0 )
{
if( wcschr( pattern, *pachText )==NULL ) {
break;
}
--len;
++pachText;
}
}
}

if( len > 0 )
{
/* alloc temp string */
dst = fb_wstr_AllocTemp( len );
dst = fb_wstr_AllocTemp( len );
if( dst != NULL )
{
/* simple copy */
fb_wstr_Copy( dst, pachText, len );
}
else
dst = NULL;
}
}
else
dst = NULL;

Expand Down
Loading