1178355Ssam/*
2178355Ssam** Copyright 2011, Oliver Tappe, zooey@hirschkaefer.de. All rights reserved.
3178355Ssam** Distributed under the terms of the MIT License.
4178355Ssam*/
5178355Ssam
6178355Ssam#include <errno_private.h>
7178355Ssam#include <LocaleBackend.h>
8178355Ssam#include <wchar_private.h>
9178355Ssam
10178355Ssam
11178355Ssamusing BPrivate::Libroot::GetCurrentLocaleBackend;
12178355Ssamusing BPrivate::Libroot::LocaleBackend;
13178355Ssamusing BPrivate::Libroot::LocaleBackendData;
14178355Ssam
15178355Ssam
16178355Ssamextern "C" int
17178355Ssam__wcscoll(const wchar_t* wcs1, const wchar_t* wcs2)
18178355Ssam{
19178355Ssam	LocaleBackend* backend = GetCurrentLocaleBackend();
20178355Ssam
21178355Ssam	if (backend != NULL) {
22178355Ssam		int result = 0;
23178355Ssam		status_t status = backend->Wcscoll(wcs1, wcs2, result);
24178355Ssam
25178355Ssam		if (status != B_OK)
26178355Ssam			__set_errno(EINVAL);
27178355Ssam
28178355Ssam		return result;
29178355Ssam	}
30178355Ssam
31178355Ssam	return wcscmp(wcs1, wcs2);
32178355Ssam}
33178355Ssam
34178355Ssam
35178355SsamB_DEFINE_WEAK_ALIAS(__wcscoll, wcscoll);
36178355Ssam
37178355Ssam
38178355Ssamextern "C" int
39178355Ssam__wcscoll_l(const wchar_t* wcs1, const wchar_t* wcs2, locale_t l)
40178355Ssam{
41178355Ssam	LocaleBackendData* locale = (LocaleBackendData*)l;
42178355Ssam	LocaleBackend* backend = locale->backend;
43178355Ssam
44178355Ssam	if (backend != NULL) {
45178355Ssam		int result = 0;
46178355Ssam		status_t status = backend->Wcscoll(wcs1, wcs2, result);
47178355Ssam
48178355Ssam		if (status != B_OK)
49178355Ssam			__set_errno(EINVAL);
50178355Ssam
51178355Ssam		return result;
52178355Ssam	}
53178355Ssam
54178355Ssam	return wcscmp(wcs1, wcs2);
55178355Ssam}
56178355Ssam
57178355Ssam
58178355SsamB_DEFINE_WEAK_ALIAS(__wcscoll_l, wcscoll_l);
59178355Ssam