1 /* 2 * Copyright 2011, Oliver Tappe, zooey@hirschkaefer.de. 3 * All rights reserved. Distributed under the terms of the MIT license. 4 */ 5 6 #include <errno.h> 7 8 #include <errno_private.h> 9 #include <LocaleBackend.h> 10 #include <wchar_private.h> 11 12 13 using BPrivate::Libroot::GetCurrentLocaleBackend; 14 using BPrivate::Libroot::LocaleBackend; 15 using BPrivate::Libroot::LocaleBackendData; 16 17 18 extern "C" size_t 19 __wcsxfrm(wchar_t* dest, const wchar_t* src, size_t destSize) 20 { 21 LocaleBackend* backend = GetCurrentLocaleBackend(); 22 23 if (backend != NULL) { 24 size_t outSize = 0; 25 status_t status = backend->Wcsxfrm(dest, src, destSize, outSize); 26 27 if (status != B_OK) 28 __set_errno(EINVAL); 29 30 return outSize; 31 } 32 33 return wcslcpy(dest, src, destSize); 34 } 35 36 37 B_DEFINE_WEAK_ALIAS(__wcsxfrm, wcsxfrm); 38 39 40 extern "C" size_t 41 __wcsxfrm_l(wchar_t* dest, const wchar_t* src, size_t destSize, locale_t l) 42 { 43 LocaleBackendData* locale = (LocaleBackendData*)l; 44 LocaleBackend* backend = locale->backend; 45 46 if (backend != NULL) { 47 size_t outSize = 0; 48 status_t status = backend->Wcsxfrm(dest, src, destSize, outSize); 49 50 if (status != B_OK) 51 __set_errno(EINVAL); 52 53 return outSize; 54 } 55 56 return wcslcpy(dest, src, destSize); 57 } 58 59 60 B_DEFINE_WEAK_ALIAS(__wcsxfrm_l, wcsxfrm_l); 61