/
strw_convconcat.c
75 lines (59 loc) · 1.45 KB
/
strw_convconcat.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* wstring concatenation + convertion functions */
#include "fb.h"
FBCALL FB_WCHAR *fb_WstrConcatWA( const FB_WCHAR *str1, const void *str2, ssize_t str2_size )
{
FB_WCHAR *dst;
ssize_t str1_len, str2_len;
char *str2_ptr;
if( str1 != NULL )
str1_len = fb_wstr_Len( str1 );
else
str1_len = 0;
FB_STRSETUP_FIX( str2, str2_size, str2_ptr, str2_len );
/* NULL? */
if( str1_len + str2_len == 0 )
{
dst = NULL;
}
else
{
/* alloc temp string */
dst = fb_wstr_AllocTemp( str1_len + str2_len );
/* do the concatenation */
fb_wstr_Move( dst, str1, str1_len );
fb_wstr_ConvFromA( &dst[str1_len], str2_len, str2_ptr );
}
/* delete temp? */
if( str2_size == -1 )
fb_hStrDelTemp( (FBSTRING *)str2 );
return dst;
}
FBCALL FB_WCHAR *fb_WstrConcatAW( const void *str1, ssize_t str1_size, const FB_WCHAR *str2 )
{
FB_WCHAR *dst;
ssize_t str1_len, str2_len;
char *str1_ptr;
FB_STRSETUP_FIX( str1, str1_size, str1_ptr, str1_len );
if( str2 != NULL )
str2_len = fb_wstr_Len( str2 );
else
str2_len = 0;
/* NULL? */
if( str1_len + str2_len == 0 )
{
dst = NULL;
}
else
{
/* alloc temp string */
dst = fb_wstr_AllocTemp( str1_len + str2_len );
/* do the concatenation */
str1_len = fb_wstr_ConvFromA( dst, str1_len, str1_ptr );
if( str2_len > 0 )
fb_wstr_Move( &dst[str1_len], str2, str2_len + 1 );
}
/* delete temp? */
if( str1_size == -1 )
fb_hStrDelTemp( (FBSTRING *)str1 );
return dst;
}