xref: /haiku/src/system/libroot/posix/string/strxfrm.cpp (revision 4a55cc230cf7566cadcbb23b1928eefff8aea9a2)
1 /*
2  * Copyright 2005, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3  * Copyright 2010, Oliver Tappe, zooey@hirschkaefer.de.
4  * All rights reserved. Distributed under the terms of the MIT license.
5  */
6 
7 #include <errno.h>
8 #include <string.h>
9 
10 #include <errno_private.h>
11 #include "LocaleBackend.h"
12 
13 
14 using BPrivate::Libroot::GetCurrentLocaleBackend;
15 using BPrivate::Libroot::LocaleBackend;
16 using BPrivate::Libroot::LocaleBackendData;
17 
18 
19 extern "C" size_t
20 strxfrm(char *out, const char *in, size_t size)
21 {
22 	LocaleBackend* backend = GetCurrentLocaleBackend();
23 
24 	if (backend != NULL) {
25 		size_t outSize = 0;
26 		status_t status = backend->Strxfrm(out, in, size, outSize);
27 
28 		if (status != B_OK)
29 			__set_errno(EINVAL);
30 
31 		return outSize;
32 	}
33 
34 	return strlcpy(out, in, size);
35 }
36 
37 
38 extern "C" size_t
39 strxfrm_l(char *out, const char *in, size_t size, locale_t l)
40 {
41 	LocaleBackendData* locale = (LocaleBackendData*)l;
42 	LocaleBackend* backend = locale->backend;
43 
44 	if (backend != NULL) {
45 		size_t outSize = 0;
46 		status_t status = backend->Strxfrm(out, in, size, outSize);
47 
48 		if (status != B_OK)
49 			__set_errno(EINVAL);
50 
51 		return outSize;
52 	}
53 
54 	return strlcpy(out, in, size);
55 }
56