/*:::::*/ FBCALL FB_WCHAR *fb_WstrConcatWA ( const FB_WCHAR *str1, const void *str2, int str2_size ) { FB_WCHAR *dst; int 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_WstrAssignFromA ( FB_WCHAR *dst, ssize_t dst_chars, void *src, ssize_t src_size ) { char *src_ptr; ssize_t src_chars; if( dst != NULL ) { FB_STRSETUP_FIX( src, src_size, src_ptr, src_chars ); /* size unknown? assume it's big enough */ if( dst_chars == 0 ) { dst_chars = src_chars; } else { /* less the null-term */ --dst_chars; } fb_wstr_ConvFromA( dst, dst_chars, src_ptr ); } /* delete temp? */ if( src_size == -1 ) fb_hStrDelTemp( (FBSTRING *)src ); return dst; }
FBCALL FB_WCHAR *fb_StrToWstr( const char *src ) { FB_WCHAR *dst; ssize_t chars; if( src == NULL ) return NULL; chars = strlen( src ); if( chars == 0 ) return NULL; dst = fb_wstr_AllocTemp( chars ); if( dst == NULL ) return NULL; fb_wstr_ConvFromA( dst, chars, src ); return dst; }