200-uclibc-locale.patch 101 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021
  1. Warning! This patch is not finished. The wide char time-related stuff
  2. is broken or non-functional. But it serves as a starting point to get
  3. things building while I continue to work on the uClibc locale internals.
  4. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
  5. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
  6. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2004-01-09 07:55:02.000000000 -0600
  7. @@ -0,0 +1,63 @@
  8. +// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
  9. +
  10. +// Copyright (C) 2002 Free Software Foundation, Inc.
  11. +//
  12. +// This file is part of the GNU ISO C++ Library. This library is free
  13. +// software; you can redistribute it and/or modify it under the
  14. +// terms of the GNU General Public License as published by the
  15. +// Free Software Foundation; either version 2, or (at your option)
  16. +// any later version.
  17. +
  18. +// This library is distributed in the hope that it will be useful,
  19. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. +// GNU General Public License for more details.
  22. +
  23. +// You should have received a copy of the GNU General Public License along
  24. +// with this library; see the file COPYING. If not, write to the Free
  25. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  26. +// USA.
  27. +
  28. +// As a special exception, you may use this file as part of a free software
  29. +// library without restriction. Specifically, if other files instantiate
  30. +// templates or use macros or inline functions from this file, or you compile
  31. +// this file and link it with other files to produce an executable, this
  32. +// file does not by itself cause the resulting executable to be covered by
  33. +// the GNU General Public License. This exception does not however
  34. +// invalidate any other reasons why the executable file might be covered by
  35. +// the GNU General Public License.
  36. +
  37. +// Written by Jakub Jelinek <jakub@redhat.com>
  38. +
  39. +#include <clocale>
  40. +
  41. +#ifdef __UCLIBC_MJN3_ONLY__
  42. +#warning clean this up
  43. +#endif
  44. +
  45. +#ifdef __UCLIBC_HAS_XLOCALE__
  46. +
  47. +extern "C" __typeof(iswctype_l) __iswctype_l;
  48. +extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
  49. +extern "C" __typeof(strcoll_l) __strcoll_l;
  50. +extern "C" __typeof(strftime_l) __strftime_l;
  51. +extern "C" __typeof(strtod_l) __strtod_l;
  52. +extern "C" __typeof(strtof_l) __strtof_l;
  53. +extern "C" __typeof(strtold_l) __strtold_l;
  54. +extern "C" __typeof(strtol_l) __strtol_l;
  55. +extern "C" __typeof(strtoll_l) __strtoll_l;
  56. +extern "C" __typeof(strtoul_l) __strtoul_l;
  57. +extern "C" __typeof(strtoull_l) __strtoull_l;
  58. +extern "C" __typeof(strxfrm_l) __strxfrm_l;
  59. +extern "C" __typeof(towlower_l) __towlower_l;
  60. +extern "C" __typeof(towupper_l) __towupper_l;
  61. +extern "C" __typeof(wcscoll_l) __wcscoll_l;
  62. +extern "C" __typeof(wcsftime_l) __wcsftime_l;
  63. +extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
  64. +extern "C" __typeof(wctype_l) __wctype_l;
  65. +extern "C" __typeof(newlocale) __newlocale;
  66. +extern "C" __typeof(freelocale) __freelocale;
  67. +extern "C" __typeof(duplocale) __duplocale;
  68. +extern "C" __typeof(uselocale) __uselocale;
  69. +
  70. +#endif // GLIBC 2.3 and later
  71. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc
  72. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
  73. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc 2004-01-09 08:37:55.000000000 -0600
  74. @@ -0,0 +1,231 @@
  75. +// Wrapper for underlying C-language localization -*- C++ -*-
  76. +
  77. +// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  78. +//
  79. +// This file is part of the GNU ISO C++ Library. This library is free
  80. +// software; you can redistribute it and/or modify it under the
  81. +// terms of the GNU General Public License as published by the
  82. +// Free Software Foundation; either version 2, or (at your option)
  83. +// any later version.
  84. +
  85. +// This library is distributed in the hope that it will be useful,
  86. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  87. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  88. +// GNU General Public License for more details.
  89. +
  90. +// You should have received a copy of the GNU General Public License along
  91. +// with this library; see the file COPYING. If not, write to the Free
  92. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  93. +// USA.
  94. +
  95. +// As a special exception, you may use this file as part of a free software
  96. +// library without restriction. Specifically, if other files instantiate
  97. +// templates or use macros or inline functions from this file, or you compile
  98. +// this file and link it with other files to produce an executable, this
  99. +// file does not by itself cause the resulting executable to be covered by
  100. +// the GNU General Public License. This exception does not however
  101. +// invalidate any other reasons why the executable file might be covered by
  102. +// the GNU General Public License.
  103. +
  104. +//
  105. +// ISO C++ 14882: 22.8 Standard locale categories.
  106. +//
  107. +
  108. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  109. +
  110. +#include <locale>
  111. +#include <stdexcept>
  112. +#include <langinfo.h>
  113. +#include <bits/c++locale_internal.h>
  114. +
  115. +#ifndef __UCLIBC_HAS_XLOCALE__
  116. +#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
  117. +#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
  118. +#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
  119. +#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
  120. +#define __strtof_l(S, E, L) strtof((S), (E))
  121. +#define __strtod_l(S, E, L) strtod((S), (E))
  122. +#define __strtold_l(S, E, L) strtold((S), (E))
  123. +#endif
  124. +
  125. +namespace std
  126. +{
  127. + template<>
  128. + void
  129. + __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err,
  130. + const __c_locale& __cloc, int __base)
  131. + {
  132. + if (!(__err & ios_base::failbit))
  133. + {
  134. + char* __sanity;
  135. + errno = 0;
  136. + long __l = __strtol_l(__s, &__sanity, __base, __cloc);
  137. + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
  138. + __v = __l;
  139. + else
  140. + __err |= ios_base::failbit;
  141. + }
  142. + }
  143. +
  144. + template<>
  145. + void
  146. + __convert_to_v(const char* __s, unsigned long& __v,
  147. + ios_base::iostate& __err, const __c_locale& __cloc,
  148. + int __base)
  149. + {
  150. + if (!(__err & ios_base::failbit))
  151. + {
  152. + char* __sanity;
  153. + errno = 0;
  154. + unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
  155. + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
  156. + __v = __ul;
  157. + else
  158. + __err |= ios_base::failbit;
  159. + }
  160. + }
  161. +
  162. +#ifdef _GLIBCPP_USE_LONG_LONG
  163. + template<>
  164. + void
  165. + __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err,
  166. + const __c_locale& __cloc, int __base)
  167. + {
  168. + if (!(__err & ios_base::failbit))
  169. + {
  170. + char* __sanity;
  171. + errno = 0;
  172. + long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
  173. + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
  174. + __v = __ll;
  175. + else
  176. + __err |= ios_base::failbit;
  177. + }
  178. + }
  179. +
  180. + template<>
  181. + void
  182. + __convert_to_v(const char* __s, unsigned long long& __v,
  183. + ios_base::iostate& __err, const __c_locale& __cloc,
  184. + int __base)
  185. + {
  186. + if (!(__err & ios_base::failbit))
  187. + {
  188. + char* __sanity;
  189. + errno = 0;
  190. + unsigned long long __ull = __strtoull_l(__s, &__sanity, __base,
  191. + __cloc);
  192. + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
  193. + __v = __ull;
  194. + else
  195. + __err |= ios_base::failbit;
  196. + }
  197. + }
  198. +#endif
  199. +
  200. + template<>
  201. + void
  202. + __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
  203. + const __c_locale& __cloc, int)
  204. + {
  205. + if (!(__err & ios_base::failbit))
  206. + {
  207. + char* __sanity;
  208. + errno = 0;
  209. + float __f = __strtof_l(__s, &__sanity, __cloc);
  210. + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
  211. + __v = __f;
  212. + else
  213. + __err |= ios_base::failbit;
  214. + }
  215. + }
  216. +
  217. + template<>
  218. + void
  219. + __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
  220. + const __c_locale& __cloc, int)
  221. + {
  222. + if (!(__err & ios_base::failbit))
  223. + {
  224. + char* __sanity;
  225. + errno = 0;
  226. + double __d = __strtod_l(__s, &__sanity, __cloc);
  227. + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
  228. + __v = __d;
  229. + else
  230. + __err |= ios_base::failbit;
  231. + }
  232. + }
  233. +
  234. + template<>
  235. + void
  236. + __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
  237. + const __c_locale& __cloc, int)
  238. + {
  239. + if (!(__err & ios_base::failbit))
  240. + {
  241. + char* __sanity;
  242. + errno = 0;
  243. + long double __ld = __strtold_l(__s, &__sanity, __cloc);
  244. + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
  245. + __v = __ld;
  246. + else
  247. + __err |= ios_base::failbit;
  248. + }
  249. + }
  250. +
  251. + void
  252. + locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
  253. + __c_locale __old)
  254. + {
  255. +#ifdef __UCLIBC_HAS_XLOCALE__
  256. + __cloc = __newlocale(1 << LC_ALL, __s, __old);
  257. + if (!__cloc)
  258. + {
  259. + // This named locale is not supported by the underlying OS.
  260. + __throw_runtime_error("attempt to create locale from unknown name");
  261. + }
  262. +#else
  263. + __cloc = NULL;
  264. +#endif
  265. + }
  266. +
  267. + void
  268. + locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
  269. + {
  270. +#ifdef __UCLIBC_HAS_XLOCALE__
  271. + if (_S_c_locale != __cloc)
  272. + __freelocale(__cloc);
  273. +#else
  274. + __cloc = NULL;
  275. +#endif
  276. + }
  277. +
  278. + __c_locale
  279. + locale::facet::_S_clone_c_locale(__c_locale& __cloc)
  280. +#ifdef __UCLIBC_HAS_XLOCALE__
  281. + { return __duplocale(__cloc); }
  282. +#else
  283. + { return __c_locale(); }
  284. +#endif
  285. +
  286. + const char* locale::_S_categories[_S_categories_size
  287. + + _S_extra_categories_size] =
  288. + {
  289. + "LC_CTYPE",
  290. + "LC_NUMERIC",
  291. + "LC_TIME",
  292. + "LC_COLLATE",
  293. + "LC_MONETARY",
  294. + "LC_MESSAGES"
  295. +#if _GLIBCPP_NUM_CATEGORIES != 0
  296. + ,
  297. + "LC_PAPER",
  298. + "LC_NAME",
  299. + "LC_ADDRESS",
  300. + "LC_TELEPHONE",
  301. + "LC_MEASUREMENT",
  302. + "LC_IDENTIFICATION"
  303. +#endif
  304. + };
  305. +} // namespace std
  306. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h
  307. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
  308. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h 2004-01-09 07:51:06.000000000 -0600
  309. @@ -0,0 +1,118 @@
  310. +// Wrapper for underlying C-language localization -*- C++ -*-
  311. +
  312. +// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  313. +//
  314. +// This file is part of the GNU ISO C++ Library. This library is free
  315. +// software; you can redistribute it and/or modify it under the
  316. +// terms of the GNU General Public License as published by the
  317. +// Free Software Foundation; either version 2, or (at your option)
  318. +// any later version.
  319. +
  320. +// This library is distributed in the hope that it will be useful,
  321. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  322. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  323. +// GNU General Public License for more details.
  324. +
  325. +// You should have received a copy of the GNU General Public License along
  326. +// with this library; see the file COPYING. If not, write to the Free
  327. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  328. +// USA.
  329. +
  330. +// As a special exception, you may use this file as part of a free software
  331. +// library without restriction. Specifically, if other files instantiate
  332. +// templates or use macros or inline functions from this file, or you compile
  333. +// this file and link it with other files to produce an executable, this
  334. +// file does not by itself cause the resulting executable to be covered by
  335. +// the GNU General Public License. This exception does not however
  336. +// invalidate any other reasons why the executable file might be covered by
  337. +// the GNU General Public License.
  338. +
  339. +//
  340. +// ISO C++ 14882: 22.8 Standard locale categories.
  341. +//
  342. +
  343. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  344. +
  345. +#ifndef _CPP_BITS_C_LOCALE_H
  346. +#define _CPP_BITS_C_LOCALE_H 1
  347. +
  348. +#pragma GCC system_header
  349. +
  350. +#include <clocale>
  351. +#include <langinfo.h> // For codecvt
  352. +#ifdef __UCLIBC_MJN3_ONLY__
  353. +#warning fix this
  354. +#endif
  355. +#ifdef __UCLIBC_HAS_LOCALE__
  356. +#include <iconv.h> // For codecvt using iconv, iconv_t
  357. +#endif
  358. +#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
  359. +#include <libintl.h> // For messages
  360. +#endif
  361. +
  362. +#ifdef __UCLIBC_MJN3_ONLY__
  363. +#warning what is _GLIBCPP_C_LOCALE_GNU for
  364. +#endif
  365. +#define _GLIBCPP_C_LOCALE_GNU 1
  366. +
  367. +#ifdef __UCLIBC_MJN3_ONLY__
  368. +#warning fix categories
  369. +#endif
  370. +// #define _GLIBCPP_NUM_CATEGORIES 6
  371. +#define _GLIBCPP_NUM_CATEGORIES 0
  372. +
  373. +#ifdef __UCLIBC_HAS_XLOCALE__
  374. +namespace __gnu_cxx
  375. +{
  376. + extern "C" __typeof(uselocale) __uselocale;
  377. +}
  378. +#endif
  379. +
  380. +namespace std
  381. +{
  382. +#ifdef __UCLIBC_HAS_XLOCALE__
  383. + typedef __locale_t __c_locale;
  384. +#else
  385. + typedef int* __c_locale;
  386. +#endif
  387. +
  388. + // Convert numeric value of type _Tv to string and return length of
  389. + // string. If snprintf is available use it, otherwise fall back to
  390. + // the unsafe sprintf which, in general, can be dangerous and should
  391. + // be avoided.
  392. + template<typename _Tv>
  393. + int
  394. + __convert_from_v(char* __out, const int __size, const char* __fmt,
  395. +#ifdef __UCLIBC_HAS_XLOCALE__
  396. + _Tv __v, const __c_locale& __cloc, int __prec = -1)
  397. + {
  398. + __c_locale __old = __gnu_cxx::__uselocale(__cloc);
  399. +#else
  400. + _Tv __v, const __c_locale&, int __prec = -1)
  401. + {
  402. +# ifdef __UCLIBC_HAS_LOCALE__
  403. + char* __old = setlocale(LC_ALL, NULL);
  404. + char* __sav = static_cast<char*>(malloc(strlen(__old) + 1));
  405. + if (__sav)
  406. + strcpy(__sav, __old);
  407. + setlocale(LC_ALL, "C");
  408. +# endif
  409. +#endif
  410. +
  411. + int __ret;
  412. + if (__prec >= 0)
  413. + __ret = snprintf(__out, __size, __fmt, __prec, __v);
  414. + else
  415. + __ret = snprintf(__out, __size, __fmt, __v);
  416. +
  417. +#ifdef __UCLIBC_HAS_XLOCALE__
  418. + __gnu_cxx::__uselocale(__old);
  419. +#elif defined __UCLIBC_HAS_LOCALE__
  420. + setlocale(LC_ALL, __sav);
  421. + free(__sav);
  422. +#endif
  423. + return __ret;
  424. + }
  425. +}
  426. +
  427. +#endif
  428. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
  429. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
  430. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2004-01-09 04:04:34.000000000 -0600
  431. @@ -0,0 +1,113 @@
  432. +// std::codecvt implementation details, GNU version -*- C++ -*-
  433. +
  434. +// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  435. +//
  436. +// This file is part of the GNU ISO C++ Library. This library is free
  437. +// software; you can redistribute it and/or modify it under the
  438. +// terms of the GNU General Public License as published by the
  439. +// Free Software Foundation; either version 2, or (at your option)
  440. +// any later version.
  441. +
  442. +// This library is distributed in the hope that it will be useful,
  443. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  444. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  445. +// GNU General Public License for more details.
  446. +
  447. +// You should have received a copy of the GNU General Public License along
  448. +// with this library; see the file COPYING. If not, write to the Free
  449. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  450. +// USA.
  451. +
  452. +// As a special exception, you may use this file as part of a free software
  453. +// library without restriction. Specifically, if other files instantiate
  454. +// templates or use macros or inline functions from this file, or you compile
  455. +// this file and link it with other files to produce an executable, this
  456. +// file does not by itself cause the resulting executable to be covered by
  457. +// the GNU General Public License. This exception does not however
  458. +// invalidate any other reasons why the executable file might be covered by
  459. +// the GNU General Public License.
  460. +
  461. +//
  462. +// ISO C++ 14882: 22.2.1.5 - Template class codecvt
  463. +//
  464. +
  465. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  466. +
  467. +#include <locale>
  468. +#include <bits/c++locale_internal.h>
  469. +
  470. +namespace std
  471. +{
  472. + // Specializations.
  473. +#ifdef _GLIBCPP_USE_WCHAR_T
  474. + codecvt_base::result
  475. + codecvt<wchar_t, char, mbstate_t>::
  476. + do_out(state_type& __state, const intern_type* __from,
  477. + const intern_type* __from_end, const intern_type*& __from_next,
  478. + extern_type* __to, extern_type* __to_end,
  479. + extern_type*& __to_next) const
  480. + {
  481. + result __ret = error;
  482. + size_t __len = min(__from_end - __from, __to_end - __to);
  483. +#ifdef __UCLIBC_HAS_XLOCALE__
  484. + __c_locale __old = __uselocale(_S_c_locale);
  485. +#endif
  486. + size_t __conv = wcsrtombs(__to, &__from, __len, &__state);
  487. +#ifdef __UCLIBC_HAS_XLOCALE__
  488. + __uselocale(__old);
  489. +#endif
  490. +
  491. + if (__conv == __len)
  492. + {
  493. + __from_next = __from;
  494. + __to_next = __to + __conv;
  495. + __ret = ok;
  496. + }
  497. + else if (__conv > 0 && __conv < __len)
  498. + {
  499. + __from_next = __from;
  500. + __to_next = __to + __conv;
  501. + __ret = partial;
  502. + }
  503. + else
  504. + __ret = error;
  505. +
  506. + return __ret;
  507. + }
  508. +
  509. + codecvt_base::result
  510. + codecvt<wchar_t, char, mbstate_t>::
  511. + do_in(state_type& __state, const extern_type* __from,
  512. + const extern_type* __from_end, const extern_type*& __from_next,
  513. + intern_type* __to, intern_type* __to_end,
  514. + intern_type*& __to_next) const
  515. + {
  516. + result __ret = error;
  517. + size_t __len = min(__from_end - __from, __to_end - __to);
  518. +#ifdef __UCLIBC_HAS_XLOCALE__
  519. + __c_locale __old = __uselocale(_S_c_locale);
  520. +#endif
  521. + size_t __conv = mbsrtowcs(__to, &__from, __len, &__state);
  522. +#ifdef __UCLIBC_HAS_XLOCALE__
  523. + __uselocale(__old);
  524. +#endif
  525. +
  526. + if (__conv == __len)
  527. + {
  528. + __from_next = __from;
  529. + __to_next = __to + __conv;
  530. + __ret = ok;
  531. + }
  532. + else if (__conv > 0 && __conv < __len)
  533. + {
  534. + __from_next = __from;
  535. + __to_next = __to + __conv;
  536. + __ret = partial;
  537. + }
  538. + else
  539. + __ret = error;
  540. +
  541. + return __ret;
  542. + }
  543. +#endif
  544. +}
  545. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h
  546. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h 1969-12-31 18:00:00.000000000 -0600
  547. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h 2004-01-09 01:53:51.000000000 -0600
  548. @@ -0,0 +1,461 @@
  549. +// Locale support (codecvt) -*- C++ -*-
  550. +
  551. +// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
  552. +//
  553. +// This file is part of the GNU ISO C++ Library. This library is free
  554. +// software; you can redistribute it and/or modify it under the
  555. +// terms of the GNU General Public License as published by the
  556. +// Free Software Foundation; either version 2, or (at your option)
  557. +// any later version.
  558. +
  559. +// This library is distributed in the hope that it will be useful,
  560. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  561. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  562. +// GNU General Public License for more details.
  563. +
  564. +// You should have received a copy of the GNU General Public License along
  565. +// with this library; see the file COPYING. If not, write to the Free
  566. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  567. +// USA.
  568. +
  569. +// As a special exception, you may use this file as part of a free software
  570. +// library without restriction. Specifically, if other files instantiate
  571. +// templates or use macros or inline functions from this file, or you compile
  572. +// this file and link it with other files to produce an executable, this
  573. +// file does not by itself cause the resulting executable to be covered by
  574. +// the GNU General Public License. This exception does not however
  575. +// invalidate any other reasons why the executable file might be covered by
  576. +// the GNU General Public License.
  577. +
  578. +//
  579. +// ISO C++ 14882: 22.2.1.5 Template class codecvt
  580. +//
  581. +
  582. +// Warning: this file is not meant for user inclusion. Use <locale>.
  583. +
  584. +// Written by Benjamin Kosnik <bkoz@cygnus.com>
  585. +
  586. + // XXX
  587. + // Define this here to codecvt.cc can have _S_max_size definition.
  588. +#define _GLIBCPP_USE___ENC_TRAITS 1
  589. +
  590. + // Extension to use icov for dealing with character encodings,
  591. + // including conversions and comparisons between various character
  592. + // sets. This object encapsulates data that may need to be shared between
  593. + // char_traits, codecvt and ctype.
  594. + class __enc_traits
  595. + {
  596. + public:
  597. + // Types:
  598. + // NB: A conversion descriptor subsumes and enhances the
  599. + // functionality of a simple state type such as mbstate_t.
  600. + typedef iconv_t __desc_type;
  601. +
  602. + protected:
  603. + // Data Members:
  604. + // Max size of charset encoding name
  605. + static const int _S_max_size = 32;
  606. + // Name of internal character set encoding.
  607. + char _M_int_enc[_S_max_size];
  608. + // Name of external character set encoding.
  609. + char _M_ext_enc[_S_max_size];
  610. +
  611. + // Conversion descriptor between external encoding to internal encoding.
  612. + __desc_type _M_in_desc;
  613. + // Conversion descriptor between internal encoding to external encoding.
  614. + __desc_type _M_out_desc;
  615. +
  616. + // Details the byte-order marker for the external encoding, if necessary.
  617. + int _M_ext_bom;
  618. +
  619. + // Details the byte-order marker for the internal encoding, if necessary.
  620. + int _M_int_bom;
  621. +
  622. + public:
  623. + explicit __enc_traits()
  624. + : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
  625. + {
  626. + memset(_M_int_enc, 0, _S_max_size);
  627. + memset(_M_ext_enc, 0, _S_max_size);
  628. + }
  629. +
  630. + explicit __enc_traits(const char* __int, const char* __ext,
  631. + int __ibom = 0, int __ebom = 0)
  632. + : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
  633. + {
  634. + strncpy(_M_int_enc, __int, _S_max_size);
  635. + strncpy(_M_ext_enc, __ext, _S_max_size);
  636. + }
  637. +
  638. + // 21.1.2 traits typedefs
  639. + // p4
  640. + // typedef STATE_T state_type
  641. + // requires: state_type shall meet the requirements of
  642. + // CopyConstructible types (20.1.3)
  643. + __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
  644. + {
  645. + strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
  646. + strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
  647. + _M_ext_bom = __obj._M_ext_bom;
  648. + _M_int_bom = __obj._M_int_bom;
  649. + }
  650. +
  651. + // Need assignment operator as well.
  652. + __enc_traits&
  653. + operator=(const __enc_traits& __obj)
  654. + {
  655. + strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
  656. + strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
  657. + _M_in_desc = 0;
  658. + _M_out_desc = 0;
  659. + _M_ext_bom = __obj._M_ext_bom;
  660. + _M_int_bom = __obj._M_int_bom;
  661. + return *this;
  662. + }
  663. +
  664. + ~__enc_traits()
  665. + {
  666. + __desc_type __err = reinterpret_cast<iconv_t>(-1);
  667. + if (_M_in_desc && _M_in_desc != __err)
  668. + iconv_close(_M_in_desc);
  669. + if (_M_out_desc && _M_out_desc != __err)
  670. + iconv_close(_M_out_desc);
  671. + }
  672. +
  673. + void
  674. + _M_init()
  675. + {
  676. + const __desc_type __err = reinterpret_cast<iconv_t>(-1);
  677. + if (!_M_in_desc)
  678. + {
  679. + _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
  680. + if (_M_in_desc == __err)
  681. + __throw_runtime_error("creating iconv input descriptor failed.");
  682. + }
  683. + if (!_M_out_desc)
  684. + {
  685. + _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
  686. + if (_M_out_desc == __err)
  687. + __throw_runtime_error("creating iconv output descriptor failed.");
  688. + }
  689. + }
  690. +
  691. + bool
  692. + _M_good()
  693. + {
  694. + const __desc_type __err = reinterpret_cast<iconv_t>(-1);
  695. + bool __test = _M_in_desc && _M_in_desc != __err;
  696. + __test &= _M_out_desc && _M_out_desc != __err;
  697. + return __test;
  698. + }
  699. +
  700. + const __desc_type*
  701. + _M_get_in_descriptor()
  702. + { return &_M_in_desc; }
  703. +
  704. + const __desc_type*
  705. + _M_get_out_descriptor()
  706. + { return &_M_out_desc; }
  707. +
  708. + int
  709. + _M_get_external_bom()
  710. + { return _M_ext_bom; }
  711. +
  712. + int
  713. + _M_get_internal_bom()
  714. + { return _M_int_bom; }
  715. +
  716. + const char*
  717. + _M_get_internal_enc()
  718. + { return _M_int_enc; }
  719. +
  720. + const char*
  721. + _M_get_external_enc()
  722. + { return _M_ext_enc; }
  723. + };
  724. +
  725. + // Partial specialization
  726. + // This specialization takes advantage of iconv to provide code
  727. + // conversions between a large number of character encodings.
  728. + template<typename _InternT, typename _ExternT>
  729. + class codecvt<_InternT, _ExternT, __enc_traits>
  730. + : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
  731. + {
  732. + public:
  733. + // Types:
  734. + typedef codecvt_base::result result;
  735. + typedef _InternT intern_type;
  736. + typedef _ExternT extern_type;
  737. + typedef __enc_traits state_type;
  738. + typedef __enc_traits::__desc_type __desc_type;
  739. + typedef __enc_traits __enc_type;
  740. +
  741. + // Data Members:
  742. + static locale::id id;
  743. +
  744. + explicit
  745. + codecvt(size_t __refs = 0)
  746. + : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
  747. + { }
  748. +
  749. + explicit
  750. + codecvt(__enc_type* __enc, size_t __refs = 0)
  751. + : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
  752. + { }
  753. +
  754. + protected:
  755. + virtual
  756. + ~codecvt() { }
  757. +
  758. + virtual result
  759. + do_out(state_type& __state, const intern_type* __from,
  760. + const intern_type* __from_end, const intern_type*& __from_next,
  761. + extern_type* __to, extern_type* __to_end,
  762. + extern_type*& __to_next) const;
  763. +
  764. + virtual result
  765. + do_unshift(state_type& __state, extern_type* __to,
  766. + extern_type* __to_end, extern_type*& __to_next) const;
  767. +
  768. + virtual result
  769. + do_in(state_type& __state, const extern_type* __from,
  770. + const extern_type* __from_end, const extern_type*& __from_next,
  771. + intern_type* __to, intern_type* __to_end,
  772. + intern_type*& __to_next) const;
  773. +
  774. + virtual int
  775. + do_encoding() const throw();
  776. +
  777. + virtual bool
  778. + do_always_noconv() const throw();
  779. +
  780. + virtual int
  781. + do_length(const state_type&, const extern_type* __from,
  782. + const extern_type* __end, size_t __max) const;
  783. +
  784. + virtual int
  785. + do_max_length() const throw();
  786. + };
  787. +
  788. + template<typename _InternT, typename _ExternT>
  789. + locale::id
  790. + codecvt<_InternT, _ExternT, __enc_traits>::id;
  791. +
  792. + // This adaptor works around the signature problems of the second
  793. + // argument to iconv(): SUSv2 and others use 'const char**', but glibc 2.2
  794. + // uses 'char**', which matches the POSIX 1003.1-2001 standard.
  795. + // Using this adaptor, g++ will do the work for us.
  796. + template<typename _T>
  797. + inline size_t
  798. + __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
  799. + iconv_t __cd, char** __inbuf, size_t* __inbytes,
  800. + char** __outbuf, size_t* __outbytes)
  801. + { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
  802. +
  803. + template<typename _InternT, typename _ExternT>
  804. + codecvt_base::result
  805. + codecvt<_InternT, _ExternT, __enc_traits>::
  806. + do_out(state_type& __state, const intern_type* __from,
  807. + const intern_type* __from_end, const intern_type*& __from_next,
  808. + extern_type* __to, extern_type* __to_end,
  809. + extern_type*& __to_next) const
  810. + {
  811. + result __ret = codecvt_base::error;
  812. + if (__state._M_good())
  813. + {
  814. + typedef state_type::__desc_type __desc_type;
  815. + const __desc_type* __desc = __state._M_get_out_descriptor();
  816. + const size_t __fmultiple = sizeof(intern_type);
  817. + size_t __fbytes = __fmultiple * (__from_end - __from);
  818. + const size_t __tmultiple = sizeof(extern_type);
  819. + size_t __tbytes = __tmultiple * (__to_end - __to);
  820. +
  821. + // Argument list for iconv specifies a byte sequence. Thus,
  822. + // all to/from arrays must be brutally casted to char*.
  823. + char* __cto = reinterpret_cast<char*>(__to);
  824. + char* __cfrom;
  825. + size_t __conv;
  826. +
  827. + // Some encodings need a byte order marker as the first item
  828. + // in the byte stream, to designate endian-ness. The default
  829. + // value for the byte order marker is NULL, so if this is
  830. + // the case, it's not necessary and we can just go on our
  831. + // merry way.
  832. + int __int_bom = __state._M_get_internal_bom();
  833. + if (__int_bom)
  834. + {
  835. + size_t __size = __from_end - __from;
  836. + intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
  837. + __cfixed[0] = static_cast<intern_type>(__int_bom);
  838. + char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
  839. + __cfrom = reinterpret_cast<char*>(__cfixed);
  840. + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
  841. + &__fbytes, &__cto, &__tbytes);
  842. + }
  843. + else
  844. + {
  845. + intern_type* __cfixed = const_cast<intern_type*>(__from);
  846. + __cfrom = reinterpret_cast<char*>(__cfixed);
  847. + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes,
  848. + &__cto, &__tbytes);
  849. + }
  850. +
  851. + if (__conv != size_t(-1))
  852. + {
  853. + __from_next = reinterpret_cast<const intern_type*>(__cfrom);
  854. + __to_next = reinterpret_cast<extern_type*>(__cto);
  855. + __ret = codecvt_base::ok;
  856. + }
  857. + else
  858. + {
  859. + if (__fbytes < __fmultiple * (__from_end - __from))
  860. + {
  861. + __from_next = reinterpret_cast<const intern_type*>(__cfrom);
  862. + __to_next = reinterpret_cast<extern_type*>(__cto);
  863. + __ret = codecvt_base::partial;
  864. + }
  865. + else
  866. + __ret = codecvt_base::error;
  867. + }
  868. + }
  869. + return __ret;
  870. + }
  871. +
  872. + template<typename _InternT, typename _ExternT>
  873. + codecvt_base::result
  874. + codecvt<_InternT, _ExternT, __enc_traits>::
  875. + do_unshift(state_type& __state, extern_type* __to,
  876. + extern_type* __to_end, extern_type*& __to_next) const
  877. + {
  878. + result __ret = codecvt_base::error;
  879. + if (__state._M_good())
  880. + {
  881. + typedef state_type::__desc_type __desc_type;
  882. + const __desc_type* __desc = __state._M_get_in_descriptor();
  883. + const size_t __tmultiple = sizeof(intern_type);
  884. + size_t __tlen = __tmultiple * (__to_end - __to);
  885. +
  886. + // Argument list for iconv specifies a byte sequence. Thus,
  887. + // all to/from arrays must be brutally casted to char*.
  888. + char* __cto = reinterpret_cast<char*>(__to);
  889. + size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
  890. + &__cto, &__tlen);
  891. +
  892. + if (__conv != size_t(-1))
  893. + {
  894. + __to_next = reinterpret_cast<extern_type*>(__cto);
  895. + if (__tlen == __tmultiple * (__to_end - __to))
  896. + __ret = codecvt_base::noconv;
  897. + else if (__tlen == 0)
  898. + __ret = codecvt_base::ok;
  899. + else
  900. + __ret = codecvt_base::partial;
  901. + }
  902. + else
  903. + __ret = codecvt_base::error;
  904. + }
  905. + return __ret;
  906. + }
  907. +
  908. + template<typename _InternT, typename _ExternT>
  909. + codecvt_base::result
  910. + codecvt<_InternT, _ExternT, __enc_traits>::
  911. + do_in(state_type& __state, const extern_type* __from,
  912. + const extern_type* __from_end, const extern_type*& __from_next,
  913. + intern_type* __to, intern_type* __to_end,
  914. + intern_type*& __to_next) const
  915. + {
  916. + result __ret = codecvt_base::error;
  917. + if (__state._M_good())
  918. + {
  919. + typedef state_type::__desc_type __desc_type;
  920. + const __desc_type* __desc = __state._M_get_in_descriptor();
  921. + const size_t __fmultiple = sizeof(extern_type);
  922. + size_t __flen = __fmultiple * (__from_end - __from);
  923. + const size_t __tmultiple = sizeof(intern_type);
  924. + size_t __tlen = __tmultiple * (__to_end - __to);
  925. +
  926. + // Argument list for iconv specifies a byte sequence. Thus,
  927. + // all to/from arrays must be brutally casted to char*.
  928. + char* __cto = reinterpret_cast<char*>(__to);
  929. + char* __cfrom;
  930. + size_t __conv;
  931. +
  932. + // Some encodings need a byte order marker as the first item
  933. + // in the byte stream, to designate endian-ness. The default
  934. + // value for the byte order marker is NULL, so if this is
  935. + // the case, it's not necessary and we can just go on our
  936. + // merry way.
  937. + int __ext_bom = __state._M_get_external_bom();
  938. + if (__ext_bom)
  939. + {
  940. + size_t __size = __from_end - __from;
  941. + extern_type* __cfixed = static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
  942. + __cfixed[0] = static_cast<extern_type>(__ext_bom);
  943. + char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
  944. + __cfrom = reinterpret_cast<char*>(__cfixed);
  945. + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
  946. + &__flen, &__cto, &__tlen);
  947. + }
  948. + else
  949. + {
  950. + extern_type* __cfixed = const_cast<extern_type*>(__from);
  951. + __cfrom = reinterpret_cast<char*>(__cfixed);
  952. + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
  953. + &__flen, &__cto, &__tlen);
  954. + }
  955. +
  956. +
  957. + if (__conv != size_t(-1))
  958. + {
  959. + __from_next = reinterpret_cast<const extern_type*>(__cfrom);
  960. + __to_next = reinterpret_cast<intern_type*>(__cto);
  961. + __ret = codecvt_base::ok;
  962. + }
  963. + else
  964. + {
  965. + if (__flen < static_cast<size_t>(__from_end - __from))
  966. + {
  967. + __from_next = reinterpret_cast<const extern_type*>(__cfrom);
  968. + __to_next = reinterpret_cast<intern_type*>(__cto);
  969. + __ret = codecvt_base::partial;
  970. + }
  971. + else
  972. + __ret = codecvt_base::error;
  973. + }
  974. + }
  975. + return __ret;
  976. + }
  977. +
  978. + template<typename _InternT, typename _ExternT>
  979. + int
  980. + codecvt<_InternT, _ExternT, __enc_traits>::
  981. + do_encoding() const throw()
  982. + {
  983. + int __ret = 0;
  984. + if (sizeof(_ExternT) <= sizeof(_InternT))
  985. + __ret = sizeof(_InternT)/sizeof(_ExternT);
  986. + return __ret;
  987. + }
  988. +
  989. + template<typename _InternT, typename _ExternT>
  990. + bool
  991. + codecvt<_InternT, _ExternT, __enc_traits>::
  992. + do_always_noconv() const throw()
  993. + { return false; }
  994. +
  995. + template<typename _InternT, typename _ExternT>
  996. + int
  997. + codecvt<_InternT, _ExternT, __enc_traits>::
  998. + do_length(const state_type&, const extern_type* __from,
  999. + const extern_type* __end, size_t __max) const
  1000. + { return min(__max, static_cast<size_t>(__end - __from)); }
  1001. +
  1002. +#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
  1003. +// 74. Garbled text for codecvt::do_max_length
  1004. + template<typename _InternT, typename _ExternT>
  1005. + int
  1006. + codecvt<_InternT, _ExternT, __enc_traits>::
  1007. + do_max_length() const throw()
  1008. + { return 1; }
  1009. +#endif
  1010. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc
  1011. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
  1012. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc 2004-01-09 08:06:24.000000000 -0600
  1013. @@ -0,0 +1,80 @@
  1014. +// std::collate implementation details, GNU version -*- C++ -*-
  1015. +
  1016. +// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  1017. +//
  1018. +// This file is part of the GNU ISO C++ Library. This library is free
  1019. +// software; you can redistribute it and/or modify it under the
  1020. +// terms of the GNU General Public License as published by the
  1021. +// Free Software Foundation; either version 2, or (at your option)
  1022. +// any later version.
  1023. +
  1024. +// This library is distributed in the hope that it will be useful,
  1025. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1026. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1027. +// GNU General Public License for more details.
  1028. +
  1029. +// You should have received a copy of the GNU General Public License along
  1030. +// with this library; see the file COPYING. If not, write to the Free
  1031. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1032. +// USA.
  1033. +
  1034. +// As a special exception, you may use this file as part of a free software
  1035. +// library without restriction. Specifically, if other files instantiate
  1036. +// templates or use macros or inline functions from this file, or you compile
  1037. +// this file and link it with other files to produce an executable, this
  1038. +// file does not by itself cause the resulting executable to be covered by
  1039. +// the GNU General Public License. This exception does not however
  1040. +// invalidate any other reasons why the executable file might be covered by
  1041. +// the GNU General Public License.
  1042. +
  1043. +//
  1044. +// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
  1045. +//
  1046. +
  1047. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1048. +
  1049. +#include <locale>
  1050. +#include <bits/c++locale_internal.h>
  1051. +
  1052. +#ifndef __UCLIBC_HAS_XLOCALE__
  1053. +#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
  1054. +#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
  1055. +#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
  1056. +#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
  1057. +#endif
  1058. +
  1059. +namespace std
  1060. +{
  1061. + // These are basically extensions to char_traits, and perhaps should
  1062. + // be put there instead of here.
  1063. + template<>
  1064. + int
  1065. + collate<char>::_M_compare(const char* __one, const char* __two) const
  1066. + {
  1067. + int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
  1068. + return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
  1069. + }
  1070. +
  1071. + template<>
  1072. + size_t
  1073. + collate<char>::_M_transform(char* __to, const char* __from,
  1074. + size_t __n) const
  1075. + { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
  1076. +
  1077. +#ifdef _GLIBCPP_USE_WCHAR_T
  1078. + template<>
  1079. + int
  1080. + collate<wchar_t>::_M_compare(const wchar_t* __one,
  1081. + const wchar_t* __two) const
  1082. + {
  1083. + int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
  1084. + return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
  1085. + }
  1086. +
  1087. + template<>
  1088. + size_t
  1089. + collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
  1090. + size_t __n) const
  1091. + { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
  1092. +#endif
  1093. +}
  1094. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc
  1095. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
  1096. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2004-01-09 08:15:41.000000000 -0600
  1097. @@ -0,0 +1,274 @@
  1098. +// std::ctype implementation details, GNU version -*- C++ -*-
  1099. +
  1100. +// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  1101. +//
  1102. +// This file is part of the GNU ISO C++ Library. This library is free
  1103. +// software; you can redistribute it and/or modify it under the
  1104. +// terms of the GNU General Public License as published by the
  1105. +// Free Software Foundation; either version 2, or (at your option)
  1106. +// any later version.
  1107. +
  1108. +// This library is distributed in the hope that it will be useful,
  1109. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1110. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1111. +// GNU General Public License for more details.
  1112. +
  1113. +// You should have received a copy of the GNU General Public License along
  1114. +// with this library; see the file COPYING. If not, write to the Free
  1115. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1116. +// USA.
  1117. +
  1118. +// As a special exception, you may use this file as part of a free software
  1119. +// library without restriction. Specifically, if other files instantiate
  1120. +// templates or use macros or inline functions from this file, or you compile
  1121. +// this file and link it with other files to produce an executable, this
  1122. +// file does not by itself cause the resulting executable to be covered by
  1123. +// the GNU General Public License. This exception does not however
  1124. +// invalidate any other reasons why the executable file might be covered by
  1125. +// the GNU General Public License.
  1126. +
  1127. +//
  1128. +// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
  1129. +//
  1130. +
  1131. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1132. +
  1133. +#define _LIBC
  1134. +#include <locale>
  1135. +#undef _LIBC
  1136. +#include <bits/c++locale_internal.h>
  1137. +
  1138. +#ifndef __UCLIBC_HAS_XLOCALE__
  1139. +#define __wctype_l(S, L) wctype((S))
  1140. +#define __towupper_l(C, L) towupper((C))
  1141. +#define __towlower_l(C, L) towlower((C))
  1142. +#define __iswctype_l(C, M, L) iswctype((C), (M))
  1143. +#endif
  1144. +
  1145. +namespace std
  1146. +{
  1147. + // NB: The other ctype<char> specializations are in src/locale.cc and
  1148. + // various /config/os/* files.
  1149. + template<>
  1150. + ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
  1151. + : ctype<char>(0, false, __refs)
  1152. + {
  1153. + _S_destroy_c_locale(_M_c_locale_ctype);
  1154. + _S_create_c_locale(_M_c_locale_ctype, __s);
  1155. +#ifdef __UCLIBC_HAS_XLOCALE__
  1156. + _M_toupper = _M_c_locale_ctype->__ctype_toupper;
  1157. + _M_tolower = _M_c_locale_ctype->__ctype_tolower;
  1158. + _M_table = _M_c_locale_ctype->__ctype_b;
  1159. +#endif
  1160. + }
  1161. +
  1162. +#ifdef _GLIBCPP_USE_WCHAR_T
  1163. + ctype<wchar_t>::__wmask_type
  1164. + ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
  1165. + {
  1166. + __wmask_type __ret;
  1167. + switch (__m)
  1168. + {
  1169. + case space:
  1170. + __ret = __wctype_l("space", _M_c_locale_ctype);
  1171. + break;
  1172. + case print:
  1173. + __ret = __wctype_l("print", _M_c_locale_ctype);
  1174. + break;
  1175. + case cntrl:
  1176. + __ret = __wctype_l("cntrl", _M_c_locale_ctype);
  1177. + break;
  1178. + case upper:
  1179. + __ret = __wctype_l("upper", _M_c_locale_ctype);
  1180. + break;
  1181. + case lower:
  1182. + __ret = __wctype_l("lower", _M_c_locale_ctype);
  1183. + break;
  1184. + case alpha:
  1185. + __ret = __wctype_l("alpha", _M_c_locale_ctype);
  1186. + break;
  1187. + case digit:
  1188. + __ret = __wctype_l("digit", _M_c_locale_ctype);
  1189. + break;
  1190. + case punct:
  1191. + __ret = __wctype_l("punct", _M_c_locale_ctype);
  1192. + break;
  1193. + case xdigit:
  1194. + __ret = __wctype_l("xdigit", _M_c_locale_ctype);
  1195. + break;
  1196. + case alnum:
  1197. + __ret = __wctype_l("alnum", _M_c_locale_ctype);
  1198. + break;
  1199. + case graph:
  1200. + __ret = __wctype_l("graph", _M_c_locale_ctype);
  1201. + break;
  1202. + default:
  1203. + __ret = 0;
  1204. + }
  1205. + return __ret;
  1206. + };
  1207. +
  1208. + wchar_t
  1209. + ctype<wchar_t>::do_toupper(wchar_t __c) const
  1210. + { return __towupper_l(__c, _M_c_locale_ctype); }
  1211. +
  1212. + const wchar_t*
  1213. + ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
  1214. + {
  1215. + while (__lo < __hi)
  1216. + {
  1217. + *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
  1218. + ++__lo;
  1219. + }
  1220. + return __hi;
  1221. + }
  1222. +
  1223. + wchar_t
  1224. + ctype<wchar_t>::do_tolower(wchar_t __c) const
  1225. + { return __towlower_l(__c, _M_c_locale_ctype); }
  1226. +
  1227. + const wchar_t*
  1228. + ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
  1229. + {
  1230. + while (__lo < __hi)
  1231. + {
  1232. + *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
  1233. + ++__lo;
  1234. + }
  1235. + return __hi;
  1236. + }
  1237. +
  1238. + bool
  1239. + ctype<wchar_t>::
  1240. + do_is(mask __m, wchar_t __c) const
  1241. + {
  1242. + // Highest bitmask in ctype_base == 10, but extra in "C"
  1243. + // library for blank.
  1244. + bool __ret = false;
  1245. + const size_t __bitmasksize = 11;
  1246. + for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
  1247. + {
  1248. + const mask __bit = static_cast<mask>(_ISbit(__bitcur));
  1249. + if (__m & __bit)
  1250. + __ret |= __iswctype_l(__c, _M_convert_to_wmask(__bit),
  1251. + _M_c_locale_ctype);
  1252. + }
  1253. + return __ret;
  1254. + }
  1255. +
  1256. + const wchar_t*
  1257. + ctype<wchar_t>::
  1258. + do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
  1259. + {
  1260. + for (;__lo < __hi; ++__vec, ++__lo)
  1261. + {
  1262. + // Highest bitmask in ctype_base == 10, but extra in "C"
  1263. + // library for blank.
  1264. + const size_t __bitmasksize = 11;
  1265. + mask __m = 0;
  1266. + for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
  1267. + {
  1268. + const mask __bit = static_cast<mask>(_ISbit(__bitcur));
  1269. + if (__iswctype_l(*__lo, _M_convert_to_wmask(__bit),
  1270. + _M_c_locale_ctype))
  1271. + __m |= __bit;
  1272. + }
  1273. + *__vec = __m;
  1274. + }
  1275. + return __hi;
  1276. + }
  1277. +
  1278. + const wchar_t*
  1279. + ctype<wchar_t>::
  1280. + do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
  1281. + {
  1282. + while (__lo < __hi && !this->do_is(__m, *__lo))
  1283. + ++__lo;
  1284. + return __lo;
  1285. + }
  1286. +
  1287. + const wchar_t*
  1288. + ctype<wchar_t>::
  1289. + do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
  1290. + {
  1291. + while (__lo < __hi && this->do_is(__m, *__lo) != 0)
  1292. + ++__lo;
  1293. + return __lo;
  1294. + }
  1295. +
  1296. + wchar_t
  1297. + ctype<wchar_t>::
  1298. + do_widen(char __c) const
  1299. + {
  1300. +#ifdef __UCLIBC_HAS_XLOCALE__
  1301. + __c_locale __old = __uselocale(_M_c_locale_ctype);
  1302. +#endif
  1303. + wchar_t __ret = btowc(__c);
  1304. +#ifdef __UCLIBC_HAS_XLOCALE__
  1305. + __uselocale(__old);
  1306. +#endif
  1307. + return __ret;
  1308. + }
  1309. +
  1310. + const char*
  1311. + ctype<wchar_t>::
  1312. + do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
  1313. + {
  1314. +#ifdef __UCLIBC_HAS_XLOCALE__
  1315. + __c_locale __old = __uselocale(_M_c_locale_ctype);
  1316. +#endif
  1317. + mbstate_t __state;
  1318. + memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
  1319. + mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
  1320. +#ifdef __UCLIBC_HAS_XLOCALE__
  1321. + __uselocale(__old);
  1322. +#endif
  1323. + return __hi;
  1324. + }
  1325. +
  1326. + char
  1327. + ctype<wchar_t>::
  1328. + do_narrow(wchar_t __wc, char __dfault) const
  1329. + {
  1330. +#ifdef __UCLIBC_HAS_XLOCALE__
  1331. + __c_locale __old = __uselocale(_M_c_locale_ctype);
  1332. +#endif
  1333. + int __c = wctob(__wc);
  1334. +#ifdef __UCLIBC_HAS_XLOCALE__
  1335. + __uselocale(__old);
  1336. +#endif
  1337. + return (__c == EOF ? __dfault : static_cast<char>(__c));
  1338. + }
  1339. +
  1340. + const wchar_t*
  1341. + ctype<wchar_t>::
  1342. + do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
  1343. + char* __dest) const
  1344. + {
  1345. +#ifdef __UCLIBC_HAS_XLOCALE__
  1346. + __c_locale __old = __uselocale(_M_c_locale_ctype);
  1347. +#endif
  1348. + size_t __offset = 0;
  1349. + while (true)
  1350. + {
  1351. + const wchar_t* __start = __lo + __offset;
  1352. + size_t __len = __hi - __start;
  1353. +
  1354. + mbstate_t __state;
  1355. + memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
  1356. + size_t __con = wcsrtombs(__dest + __offset, &__start, __len, &__state);
  1357. + if (__con != __len && __start != 0)
  1358. + {
  1359. + __offset = __start - __lo;
  1360. + __dest[__offset++] = __dfault;
  1361. + }
  1362. + else
  1363. + break;
  1364. + }
  1365. +#ifdef __UCLIBC_HAS_XLOCALE__
  1366. + __uselocale(__old);
  1367. +#endif
  1368. + return __hi;
  1369. + }
  1370. +#endif // _GLIBCPP_USE_WCHAR_T
  1371. +}
  1372. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc
  1373. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
  1374. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc 2004-01-09 08:46:16.000000000 -0600
  1375. @@ -0,0 +1,100 @@
  1376. +// std::messages implementation details, GNU version -*- C++ -*-
  1377. +
  1378. +// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  1379. +//
  1380. +// This file is part of the GNU ISO C++ Library. This library is free
  1381. +// software; you can redistribute it and/or modify it under the
  1382. +// terms of the GNU General Public License as published by the
  1383. +// Free Software Foundation; either version 2, or (at your option)
  1384. +// any later version.
  1385. +
  1386. +// This library is distributed in the hope that it will be useful,
  1387. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1388. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1389. +// GNU General Public License for more details.
  1390. +
  1391. +// You should have received a copy of the GNU General Public License along
  1392. +// with this library; see the file COPYING. If not, write to the Free
  1393. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1394. +// USA.
  1395. +
  1396. +// As a special exception, you may use this file as part of a free software
  1397. +// library without restriction. Specifically, if other files instantiate
  1398. +// templates or use macros or inline functions from this file, or you compile
  1399. +// this file and link it with other files to produce an executable, this
  1400. +// file does not by itself cause the resulting executable to be covered by
  1401. +// the GNU General Public License. This exception does not however
  1402. +// invalidate any other reasons why the executable file might be covered by
  1403. +// the GNU General Public License.
  1404. +
  1405. +//
  1406. +// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
  1407. +//
  1408. +
  1409. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1410. +
  1411. +#include <locale>
  1412. +#include <bits/c++locale_internal.h>
  1413. +
  1414. +#ifdef __UCLIBC_MJN3_ONLY__
  1415. +#warning fix gettext stuff
  1416. +#endif
  1417. +#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
  1418. +extern "C" char *__dcgettext(const char *domainname,
  1419. + const char *msgid, int category);
  1420. +#undef gettext
  1421. +#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
  1422. +#else
  1423. +#undef gettext
  1424. +#define gettext(msgid) (msgid)
  1425. +#endif
  1426. +
  1427. +namespace std
  1428. +{
  1429. + // Specializations.
  1430. + template<>
  1431. + string
  1432. + messages<char>::do_get(catalog, int, int, const string& __dfault) const
  1433. + {
  1434. +#ifdef __UCLIBC_HAS_XLOCALE__
  1435. + __c_locale __old = __uselocale(_M_c_locale_messages);
  1436. + const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
  1437. + __uselocale(__old);
  1438. + return string(__msg);
  1439. +#elif defined __UCLIBC_HAS_LOCALE__
  1440. + char* __old = strdup(setlocale(LC_ALL, NULL));
  1441. + setlocale(LC_ALL, _M_name_messages);
  1442. + const char* __msg = gettext(__dfault.c_str());
  1443. + setlocale(LC_ALL, __old);
  1444. + free(__old);
  1445. + return string(__msg);
  1446. +#else
  1447. + const char* __msg = gettext(__dfault.c_str());
  1448. + return string(__msg);
  1449. +#endif
  1450. + }
  1451. +
  1452. +#ifdef _GLIBCPP_USE_WCHAR_T
  1453. + template<>
  1454. + wstring
  1455. + messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
  1456. + {
  1457. +#ifdef __UCLIBC_HAS_XLOCALE__
  1458. + __c_locale __old = __uselocale(_M_c_locale_messages);
  1459. + char* __msg = gettext(_M_convert_to_char(__dfault));
  1460. + __uselocale(__old);
  1461. + return _M_convert_from_char(__msg);
  1462. +#elif defined __UCLIBC_HAS_LOCALE__
  1463. + char* __old = strdup(setlocale(LC_ALL, NULL));
  1464. + setlocale(LC_ALL, _M_name_messages);
  1465. + char* __msg = gettext(_M_convert_to_char(__dfault));
  1466. + setlocale(LC_ALL, __old);
  1467. + free(__old);
  1468. + return _M_convert_from_char(__msg);
  1469. +# else
  1470. + char* __msg = gettext(_M_convert_to_char(__dfault));
  1471. + return _M_convert_from_char(__msg);
  1472. +# endif
  1473. + }
  1474. +#endif
  1475. +}
  1476. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h
  1477. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
  1478. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h 2004-01-09 08:52:48.000000000 -0600
  1479. @@ -0,0 +1,122 @@
  1480. +// std::messages implementation details, GNU version -*- C++ -*-
  1481. +
  1482. +// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  1483. +//
  1484. +// This file is part of the GNU ISO C++ Library. This library is free
  1485. +// software; you can redistribute it and/or modify it under the
  1486. +// terms of the GNU General Public License as published by the
  1487. +// Free Software Foundation; either version 2, or (at your option)
  1488. +// any later version.
  1489. +
  1490. +// This library is distributed in the hope that it will be useful,
  1491. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1492. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1493. +// GNU General Public License for more details.
  1494. +
  1495. +// You should have received a copy of the GNU General Public License along
  1496. +// with this library; see the file COPYING. If not, write to the Free
  1497. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1498. +// USA.
  1499. +
  1500. +// As a special exception, you may use this file as part of a free software
  1501. +// library without restriction. Specifically, if other files instantiate
  1502. +// templates or use macros or inline functions from this file, or you compile
  1503. +// this file and link it with other files to produce an executable, this
  1504. +// file does not by itself cause the resulting executable to be covered by
  1505. +// the GNU General Public License. This exception does not however
  1506. +// invalidate any other reasons why the executable file might be covered by
  1507. +// the GNU General Public License.
  1508. +
  1509. +//
  1510. +// ISO C++ 14882: 22.2.7.1.2 messages functions
  1511. +//
  1512. +
  1513. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1514. +
  1515. +#ifdef __UCLIBC_MJN3_ONLY__
  1516. +#warning fix prototypes for *textdomain funcs
  1517. +#endif
  1518. +#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
  1519. +extern "C" char *__textdomain(const char *domainname);
  1520. +extern "C" char *__bindtextdomain(const char *domainname,
  1521. + const char *dirname);
  1522. +#else
  1523. +#undef __textdomain
  1524. +#undef __bindtextdomain
  1525. +#define __textdomain(D) ((void)0)
  1526. +#define __bindtextdomain(D,P) ((void)0)
  1527. +#endif
  1528. +
  1529. + // Non-virtual member functions.
  1530. + template<typename _CharT>
  1531. + messages<_CharT>::messages(size_t __refs)
  1532. + : locale::facet(__refs)
  1533. + {
  1534. +#ifndef __UCLIBC_HAS_XLOCALE__
  1535. + _M_name_messages = _S_c_name;
  1536. +#endif
  1537. + _M_c_locale_messages = _S_c_locale;
  1538. + }
  1539. +
  1540. + template<typename _CharT>
  1541. + messages<_CharT>::messages(__c_locale __cloc,
  1542. + const char* __s, size_t __refs)
  1543. + : locale::facet(__refs)
  1544. + {
  1545. +#ifndef __UCLIBC_HAS_XLOCALE__
  1546. + _M_name_messages = new char[strlen(__s) + 1];
  1547. + strcpy(_M_name_messages, __s);
  1548. +#endif
  1549. + _M_c_locale_messages = _S_clone_c_locale(__cloc);
  1550. + }
  1551. +
  1552. + template<typename _CharT>
  1553. + typename messages<_CharT>::catalog
  1554. + messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
  1555. + const char* __dir) const
  1556. + {
  1557. + __bindtextdomain(__s.c_str(), __dir);
  1558. + return this->do_open(__s, __loc);
  1559. + }
  1560. +
  1561. + // Virtual member functions.
  1562. + template<typename _CharT>
  1563. + messages<_CharT>::~messages()
  1564. + {
  1565. +#ifndef __UCLIBC_HAS_XLOCALE__
  1566. + if (_S_c_name != _M_name_messages)
  1567. + delete [] _M_name_messages;
  1568. +#endif
  1569. + _S_destroy_c_locale(_M_c_locale_messages);
  1570. + }
  1571. +
  1572. + template<typename _CharT>
  1573. + typename messages<_CharT>::catalog
  1574. + messages<_CharT>::do_open(const basic_string<char>& __s,
  1575. + const locale&) const
  1576. + {
  1577. + // No error checking is done, assume the catalog exists and can
  1578. + // be used.
  1579. + __textdomain(__s.c_str());
  1580. + return 0;
  1581. + }
  1582. +
  1583. + template<typename _CharT>
  1584. + void
  1585. + messages<_CharT>::do_close(catalog) const
  1586. + { }
  1587. +
  1588. + // messages_byname
  1589. + template<typename _CharT>
  1590. + messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
  1591. + : messages<_CharT>(__refs)
  1592. + {
  1593. +#ifndef __UCLIBC_HAS_XLOCALE__
  1594. + if (_S_c_name != _M_name_messages)
  1595. + delete [] _M_name_messages;
  1596. + _M_name_messages = new char[strlen(__s) + 1];
  1597. + strcpy(_M_name_messages, __s);
  1598. +#endif
  1599. + _S_destroy_c_locale(_M_c_locale_messages);
  1600. + _S_create_c_locale(_M_c_locale_messages, __s);
  1601. + }
  1602. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc
  1603. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
  1604. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2004-01-09 18:20:23.000000000 -0600
  1605. @@ -0,0 +1,578 @@
  1606. +// std::moneypunct implementation details, GNU version -*- C++ -*-
  1607. +
  1608. +// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  1609. +//
  1610. +// This file is part of the GNU ISO C++ Library. This library is free
  1611. +// software; you can redistribute it and/or modify it under the
  1612. +// terms of the GNU General Public License as published by the
  1613. +// Free Software Foundation; either version 2, or (at your option)
  1614. +// any later version.
  1615. +
  1616. +// This library is distributed in the hope that it will be useful,
  1617. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1618. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1619. +// GNU General Public License for more details.
  1620. +
  1621. +// You should have received a copy of the GNU General Public License along
  1622. +// with this library; see the file COPYING. If not, write to the Free
  1623. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1624. +// USA.
  1625. +
  1626. +// As a special exception, you may use this file as part of a free software
  1627. +// library without restriction. Specifically, if other files instantiate
  1628. +// templates or use macros or inline functions from this file, or you compile
  1629. +// this file and link it with other files to produce an executable, this
  1630. +// file does not by itself cause the resulting executable to be covered by
  1631. +// the GNU General Public License. This exception does not however
  1632. +// invalidate any other reasons why the executable file might be covered by
  1633. +// the GNU General Public License.
  1634. +
  1635. +//
  1636. +// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
  1637. +//
  1638. +
  1639. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1640. +
  1641. +#define _LIBC
  1642. +#include <locale>
  1643. +#undef _LIBC
  1644. +#include <bits/c++locale_internal.h>
  1645. +
  1646. +#ifdef __UCLIBC_MJN3_ONLY__
  1647. +#warning optimize this for uclibc
  1648. +#warning tailor for stub locale support
  1649. +#endif
  1650. +
  1651. +#ifndef __UCLIBC_HAS_XLOCALE__
  1652. +#define __nl_langinfo_l(N, L) nl_langinfo((N))
  1653. +#endif
  1654. +
  1655. +namespace std
  1656. +{
  1657. + // Construct and return valid pattern consisting of some combination of:
  1658. + // space none symbol sign value
  1659. + money_base::pattern
  1660. + money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
  1661. + {
  1662. + pattern __ret;
  1663. +
  1664. + // This insanely complicated routine attempts to construct a valid
  1665. + // pattern for use with monyepunct. A couple of invariants:
  1666. +
  1667. + // if (__precedes) symbol -> value
  1668. + // else value -> symbol
  1669. +
  1670. + // if (__space) space
  1671. + // else none
  1672. +
  1673. + // none == never first
  1674. + // space never first or last
  1675. +
  1676. + // Any elegant implementations of this are welcome.
  1677. + switch (__posn)
  1678. + {
  1679. + case 0:
  1680. + case 1:
  1681. + // 1 The sign precedes the value and symbol.
  1682. + if (__space)
  1683. + {
  1684. + // Pattern starts with sign.
  1685. + if (__precedes)
  1686. + {
  1687. + __ret.field[1] = symbol;
  1688. + __ret.field[2] = space;
  1689. + __ret.field[3] = value;
  1690. + }
  1691. + else
  1692. + {
  1693. + __ret.field[1] = value;
  1694. + __ret.field[2] = space;
  1695. + __ret.field[3] = symbol;
  1696. + }
  1697. + __ret.field[0] = sign;
  1698. + }
  1699. + else
  1700. + {
  1701. + // Pattern starts with sign and ends with none.
  1702. + if (__precedes)
  1703. + {
  1704. + __ret.field[1] = symbol;
  1705. + __ret.field[2] = value;
  1706. + }
  1707. + else
  1708. + {
  1709. + __ret.field[1] = value;
  1710. + __ret.field[2] = symbol;
  1711. + }
  1712. + __ret.field[0] = sign;
  1713. + __ret.field[3] = none;
  1714. + }
  1715. + break;
  1716. + case 2:
  1717. + // 2 The sign follows the value and symbol.
  1718. + if (__space)
  1719. + {
  1720. + // Pattern either ends with sign.
  1721. + if (__precedes)
  1722. + {
  1723. + __ret.field[0] = symbol;
  1724. + __ret.field[1] = space;
  1725. + __ret.field[2] = value;
  1726. + }
  1727. + else
  1728. + {
  1729. + __ret.field[0] = value;
  1730. + __ret.field[1] = space;
  1731. + __ret.field[2] = symbol;
  1732. + }
  1733. + __ret.field[3] = sign;
  1734. + }
  1735. + else
  1736. + {
  1737. + // Pattern ends with sign then none.
  1738. + if (__precedes)
  1739. + {
  1740. + __ret.field[0] = symbol;
  1741. + __ret.field[1] = value;
  1742. + }
  1743. + else
  1744. + {
  1745. + __ret.field[0] = value;
  1746. + __ret.field[1] = symbol;
  1747. + }
  1748. + __ret.field[2] = sign;
  1749. + __ret.field[3] = none;
  1750. + }
  1751. + break;
  1752. + case 3:
  1753. + // 3 The sign immediately precedes the symbol.
  1754. + if (__space)
  1755. + {
  1756. + // Have space.
  1757. + if (__precedes)
  1758. + {
  1759. + __ret.field[0] = sign;
  1760. + __ret.field[1] = symbol;
  1761. + __ret.field[2] = space;
  1762. + __ret.field[3] = value;
  1763. + }
  1764. + else
  1765. + {
  1766. + __ret.field[0] = value;
  1767. + __ret.field[1] = space;
  1768. + __ret.field[2] = sign;
  1769. + __ret.field[3] = symbol;
  1770. + }
  1771. + }
  1772. + else
  1773. + {
  1774. + // Have none.
  1775. + if (__precedes)
  1776. + {
  1777. + __ret.field[0] = sign;
  1778. + __ret.field[1] = symbol;
  1779. + __ret.field[2] = value;
  1780. + }
  1781. + else
  1782. + {
  1783. + __ret.field[0] = value;
  1784. + __ret.field[1] = sign;
  1785. + __ret.field[2] = symbol;
  1786. + }
  1787. + __ret.field[3] = none;
  1788. + }
  1789. + break;
  1790. + case 4:
  1791. + // 4 The sign immediately follows the symbol.
  1792. + if (__space)
  1793. + {
  1794. + // Have space.
  1795. + if (__precedes)
  1796. + {
  1797. + __ret.field[0] = symbol;
  1798. + __ret.field[1] = sign;
  1799. + __ret.field[2] = space;
  1800. + __ret.field[3] = value;
  1801. + }
  1802. + else
  1803. + {
  1804. + __ret.field[0] = value;
  1805. + __ret.field[1] = space;
  1806. + __ret.field[2] = symbol;
  1807. + __ret.field[3] = sign;
  1808. + }
  1809. + }
  1810. + else
  1811. + {
  1812. + // Have none.
  1813. + if (__precedes)
  1814. + {
  1815. + __ret.field[0] = symbol;
  1816. + __ret.field[1] = sign;
  1817. + __ret.field[2] = value;
  1818. + }
  1819. + else
  1820. + {
  1821. + __ret.field[0] = value;
  1822. + __ret.field[1] = symbol;
  1823. + __ret.field[2] = sign;
  1824. + }
  1825. + __ret.field[3] = none;
  1826. + }
  1827. + break;
  1828. + default:
  1829. + ;
  1830. + }
  1831. + return __ret;
  1832. + }
  1833. +
  1834. + template<>
  1835. + void
  1836. + moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
  1837. + const char*)
  1838. + {
  1839. + if (!__cloc)
  1840. + {
  1841. + // "C" locale
  1842. + _M_decimal_point = '.';
  1843. + _M_thousands_sep = ',';
  1844. + _M_grouping = "";
  1845. + _M_curr_symbol = "";
  1846. + _M_positive_sign = "";
  1847. + _M_negative_sign = "";
  1848. + _M_frac_digits = 0;
  1849. + _M_pos_format = money_base::_S_default_pattern;
  1850. + _M_neg_format = money_base::_S_default_pattern;
  1851. + }
  1852. + else
  1853. + {
  1854. + // Named locale.
  1855. + _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
  1856. + _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
  1857. + _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
  1858. + _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  1859. +
  1860. + char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
  1861. + if (!__nposn)
  1862. + _M_negative_sign = "()";
  1863. + else
  1864. + _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
  1865. +
  1866. + // _Intl == true
  1867. + _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
  1868. + _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
  1869. + char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
  1870. + char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
  1871. + char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
  1872. + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
  1873. + char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
  1874. + char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
  1875. + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
  1876. + }
  1877. + }
  1878. +
  1879. + template<>
  1880. + void
  1881. + moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
  1882. + const char*)
  1883. + {
  1884. + if (!__cloc)
  1885. + {
  1886. + // "C" locale
  1887. + _M_decimal_point = '.';
  1888. + _M_thousands_sep = ',';
  1889. + _M_grouping = "";
  1890. + _M_curr_symbol = "";
  1891. + _M_positive_sign = "";
  1892. + _M_negative_sign = "";
  1893. + _M_frac_digits = 0;
  1894. + _M_pos_format = money_base::_S_default_pattern;
  1895. + _M_neg_format = money_base::_S_default_pattern;
  1896. + }
  1897. + else
  1898. + {
  1899. + // Named locale.
  1900. + _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
  1901. + _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
  1902. + _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
  1903. + _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  1904. +
  1905. + char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
  1906. + if (!__nposn)
  1907. + _M_negative_sign = "()";
  1908. + else
  1909. + _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
  1910. +
  1911. + // _Intl == false
  1912. + _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
  1913. + _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
  1914. + char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
  1915. + char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
  1916. + char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
  1917. + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
  1918. + char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
  1919. + char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
  1920. + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
  1921. + }
  1922. + }
  1923. +
  1924. + template<>
  1925. + moneypunct<char, true>::~moneypunct()
  1926. + { }
  1927. +
  1928. + template<>
  1929. + moneypunct<char, false>::~moneypunct()
  1930. + { }
  1931. +
  1932. +#ifdef _GLIBCPP_USE_WCHAR_T
  1933. + template<>
  1934. + void
  1935. + moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
  1936. +#ifdef __UCLIBC_HAS_XLOCALE__
  1937. + const char*)
  1938. +#else
  1939. + const char* __name)
  1940. +#endif
  1941. + {
  1942. + if (!__cloc)
  1943. + {
  1944. + // "C" locale
  1945. + _M_decimal_point = L'.';
  1946. + _M_thousands_sep = L',';
  1947. + _M_grouping = "";
  1948. + _M_curr_symbol = L"";
  1949. + _M_positive_sign = L"";
  1950. + _M_negative_sign = L"";
  1951. + _M_frac_digits = 0;
  1952. + _M_pos_format = money_base::_S_default_pattern;
  1953. + _M_neg_format = money_base::_S_default_pattern;
  1954. + }
  1955. + else
  1956. + {
  1957. + // Named locale.
  1958. +#ifdef __UCLIBC_HAS_XLOCALE__
  1959. + __c_locale __old = __uselocale(__cloc);
  1960. +#else
  1961. + // Switch to named locale so that mbsrtowcs will work.
  1962. + char* __old = strdup(setlocale(LC_ALL, NULL));
  1963. + setlocale(LC_ALL, __name);
  1964. +#endif
  1965. +
  1966. +#ifdef __UCLIBC_MJN3_ONLY__
  1967. +#warning fix this
  1968. +#endif
  1969. +#ifdef __UCLIBC__
  1970. +# ifdef __UCLIBC_HAS_XLOCALE__
  1971. + _M_decimal_point = __cloc->decimal_point_wc;
  1972. + _M_thousands_sep = __cloc->thousands_sep_wc;
  1973. +# else
  1974. + _M_decimal_point = __global_locale->decimal_point_wc;
  1975. + _M_thousands_sep = __global_locale->thousands_sep_wc;
  1976. +# endif
  1977. +#else
  1978. + _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
  1979. +
  1980. + _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
  1981. +#endif
  1982. + _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
  1983. +
  1984. + const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  1985. + const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
  1986. + const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
  1987. +
  1988. + mbstate_t __state;
  1989. + size_t __len = strlen(__cpossign);
  1990. + if (__len)
  1991. + {
  1992. + ++__len;
  1993. + memset(&__state, 0, sizeof(mbstate_t));
  1994. + wchar_t* __wcs = new wchar_t[__len];
  1995. + mbsrtowcs(__wcs, &__cpossign, __len, &__state);
  1996. + _M_positive_sign = __wcs;
  1997. + }
  1998. + else
  1999. + _M_positive_sign = L"";
  2000. +
  2001. + char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
  2002. + __len = strlen(__cnegsign);
  2003. + if (!__nposn)
  2004. + _M_negative_sign = L"()";
  2005. + else if (__len)
  2006. + {
  2007. + ++__len;
  2008. + memset(&__state, 0, sizeof(mbstate_t));
  2009. + wchar_t* __wcs = new wchar_t[__len];
  2010. + mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
  2011. + _M_negative_sign = __wcs;
  2012. + }
  2013. + else
  2014. + _M_negative_sign = L"";
  2015. +
  2016. + // _Intl == true.
  2017. + __len = strlen(__ccurr);
  2018. + if (__len)
  2019. + {
  2020. + ++__len;
  2021. + memset(&__state, 0, sizeof(mbstate_t));
  2022. + wchar_t* __wcs = new wchar_t[__len];
  2023. + mbsrtowcs(__wcs, &__ccurr, __len, &__state);
  2024. + _M_curr_symbol = __wcs;
  2025. + }
  2026. + else
  2027. + _M_curr_symbol = L"";
  2028. +
  2029. + _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
  2030. + char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
  2031. + char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
  2032. + char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
  2033. + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
  2034. + char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
  2035. + char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
  2036. + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
  2037. +
  2038. +#ifdef __UCLIBC_HAS_XLOCALE__
  2039. + __uselocale(__old);
  2040. +#else
  2041. + setlocale(LC_ALL, __old);
  2042. + free(__old);
  2043. +#endif
  2044. + }
  2045. + }
  2046. +
  2047. + template<>
  2048. + void
  2049. + moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
  2050. +#ifdef __UCLIBC_HAS_XLOCALE__
  2051. + const char*)
  2052. +#else
  2053. + const char* __name)
  2054. +#endif
  2055. + {
  2056. + if (!__cloc)
  2057. + {
  2058. + // "C" locale
  2059. + _M_decimal_point = L'.';
  2060. + _M_thousands_sep = L',';
  2061. + _M_grouping = "";
  2062. + _M_curr_symbol = L"";
  2063. + _M_positive_sign = L"";
  2064. + _M_negative_sign = L"";
  2065. + _M_frac_digits = 0;
  2066. + _M_pos_format = money_base::_S_default_pattern;
  2067. + _M_neg_format = money_base::_S_default_pattern;
  2068. + }
  2069. + else
  2070. + {
  2071. + // Named locale.
  2072. +#ifdef __UCLIBC_HAS_XLOCALE__
  2073. + __c_locale __old = __uselocale(__cloc);
  2074. +#else
  2075. + // Switch to named locale so that mbsrtowcs will work.
  2076. + char* __old = strdup(setlocale(LC_ALL, NULL));
  2077. + setlocale(LC_ALL, __name);
  2078. +#endif
  2079. +
  2080. +#ifdef __UCLIBC_MJN3_ONLY__
  2081. +#warning fix this
  2082. +#endif
  2083. +#ifdef __UCLIBC__
  2084. +# ifdef __UCLIBC_HAS_XLOCALE__
  2085. + _M_decimal_point = __cloc->decimal_point_wc;
  2086. + _M_thousands_sep = __cloc->thousands_sep_wc;
  2087. +# else
  2088. + _M_decimal_point = __global_locale->decimal_point_wc;
  2089. + _M_thousands_sep = __global_locale->thousands_sep_wc;
  2090. +# endif
  2091. +#else
  2092. + _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
  2093. + _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
  2094. +#endif
  2095. + _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
  2096. +
  2097. + const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  2098. + const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
  2099. + const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
  2100. +
  2101. + mbstate_t __state;
  2102. + size_t __len;
  2103. + __len = strlen(__cpossign);
  2104. + if (__len)
  2105. + {
  2106. + ++__len;
  2107. + memset(&__state, 0, sizeof(mbstate_t));
  2108. + wchar_t* __wcs = new wchar_t[__len];
  2109. + mbsrtowcs(__wcs, &__cpossign, __len, &__state);
  2110. + _M_positive_sign = __wcs;
  2111. + }
  2112. + else
  2113. + _M_positive_sign = L"";
  2114. +
  2115. + char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
  2116. + __len = strlen(__cnegsign);
  2117. + if (!__nposn)
  2118. + _M_negative_sign = L"()";
  2119. + else if (__len)
  2120. + {
  2121. + ++__len;
  2122. + memset(&__state, 0, sizeof(mbstate_t));
  2123. + wchar_t* __wcs = new wchar_t[__len];
  2124. + mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
  2125. + _M_negative_sign = __wcs;
  2126. + }
  2127. + else
  2128. + _M_negative_sign = L"";
  2129. +
  2130. + // _Intl == true.
  2131. + __len = strlen(__ccurr);
  2132. + if (__len)
  2133. + {
  2134. + ++__len;
  2135. + memset(&__state, 0, sizeof(mbstate_t));
  2136. + wchar_t* __wcs = new wchar_t[__len];
  2137. + mbsrtowcs(__wcs, &__ccurr, __len, &__state);
  2138. + _M_curr_symbol = __wcs;
  2139. + }
  2140. + else
  2141. + _M_curr_symbol = L"";
  2142. +
  2143. + _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
  2144. + char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
  2145. + char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
  2146. + char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
  2147. + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
  2148. + char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
  2149. + char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
  2150. + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
  2151. +
  2152. +#ifdef __UCLIBC_HAS_XLOCALE__
  2153. + __uselocale(__old);
  2154. +#else
  2155. + setlocale(LC_ALL, __old);
  2156. + free(__old);
  2157. +#endif
  2158. + }
  2159. + }
  2160. +
  2161. + template<>
  2162. + moneypunct<wchar_t, true>::~moneypunct()
  2163. + {
  2164. + if (wcslen(_M_positive_sign))
  2165. + delete [] _M_positive_sign;
  2166. + if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
  2167. + delete [] _M_negative_sign;
  2168. + if (wcslen(_M_curr_symbol))
  2169. + delete [] _M_curr_symbol;
  2170. + }
  2171. +
  2172. + template<>
  2173. + moneypunct<wchar_t, false>::~moneypunct()
  2174. + {
  2175. + if (wcslen(_M_positive_sign))
  2176. + delete [] _M_positive_sign;
  2177. + if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
  2178. + delete [] _M_negative_sign;
  2179. + if (wcslen(_M_curr_symbol))
  2180. + delete [] _M_curr_symbol;
  2181. + }
  2182. +#endif
  2183. +}
  2184. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc
  2185. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
  2186. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2004-01-09 18:20:59.000000000 -0600
  2187. @@ -0,0 +1,129 @@
  2188. +// std::numpunct implementation details, GNU version -*- C++ -*-
  2189. +
  2190. +// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  2191. +//
  2192. +// This file is part of the GNU ISO C++ Library. This library is free
  2193. +// software; you can redistribute it and/or modify it under the
  2194. +// terms of the GNU General Public License as published by the
  2195. +// Free Software Foundation; either version 2, or (at your option)
  2196. +// any later version.
  2197. +
  2198. +// This library is distributed in the hope that it will be useful,
  2199. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2200. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2201. +// GNU General Public License for more details.
  2202. +
  2203. +// You should have received a copy of the GNU General Public License along
  2204. +// with this library; see the file COPYING. If not, write to the Free
  2205. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2206. +// USA.
  2207. +
  2208. +// As a special exception, you may use this file as part of a free software
  2209. +// library without restriction. Specifically, if other files instantiate
  2210. +// templates or use macros or inline functions from this file, or you compile
  2211. +// this file and link it with other files to produce an executable, this
  2212. +// file does not by itself cause the resulting executable to be covered by
  2213. +// the GNU General Public License. This exception does not however
  2214. +// invalidate any other reasons why the executable file might be covered by
  2215. +// the GNU General Public License.
  2216. +
  2217. +//
  2218. +// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
  2219. +//
  2220. +
  2221. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  2222. +
  2223. +#define _LIBC
  2224. +#include <locale>
  2225. +#undef _LIBC
  2226. +#include <bits/c++locale_internal.h>
  2227. +
  2228. +#ifdef __UCLIBC_MJN3_ONLY__
  2229. +#warning tailor for stub locale support
  2230. +#endif
  2231. +#ifndef __UCLIBC_HAS_XLOCALE__
  2232. +#define __nl_langinfo_l(N, L) nl_langinfo((N))
  2233. +#endif
  2234. +
  2235. +namespace std
  2236. +{
  2237. + template<>
  2238. + void
  2239. + numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
  2240. + {
  2241. + if (!__cloc)
  2242. + {
  2243. + // "C" locale
  2244. + _M_decimal_point = '.';
  2245. + _M_thousands_sep = ',';
  2246. + _M_grouping = "";
  2247. + }
  2248. + else
  2249. + {
  2250. + // Named locale.
  2251. + _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
  2252. + _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
  2253. + // Check for NUL, which implies no grouping.
  2254. + if (_M_thousands_sep == '\0')
  2255. + _M_grouping = "";
  2256. + else
  2257. + _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
  2258. + }
  2259. + // NB: There is no way to extact this info from posix locales.
  2260. + // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
  2261. + _M_truename = "true";
  2262. + // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
  2263. + _M_falsename = "false";
  2264. + }
  2265. +
  2266. + template<>
  2267. + numpunct<char>::~numpunct()
  2268. + { }
  2269. +
  2270. +#ifdef _GLIBCPP_USE_WCHAR_T
  2271. + template<>
  2272. + void
  2273. + numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
  2274. + {
  2275. + if (!__cloc)
  2276. + {
  2277. + // "C" locale
  2278. + _M_decimal_point = L'.';
  2279. + _M_thousands_sep = L',';
  2280. + _M_grouping = "";
  2281. + }
  2282. + else
  2283. + {
  2284. + // Named locale.
  2285. +#ifdef __UCLIBC_MJN3_ONLY__
  2286. +#warning fix this
  2287. +#endif
  2288. +#ifdef __UCLIBC__
  2289. +# ifdef __UCLIBC_HAS_XLOCALE__
  2290. + _M_decimal_point = __cloc->decimal_point_wc;
  2291. + _M_thousands_sep = __cloc->thousands_sep_wc;
  2292. +# else
  2293. + _M_decimal_point = __global_locale->decimal_point_wc;
  2294. + _M_thousands_sep = __global_locale->thousands_sep_wc;
  2295. +# endif
  2296. +#else
  2297. + _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
  2298. + _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
  2299. +#endif
  2300. + if (_M_thousands_sep == L'\0')
  2301. + _M_grouping = "";
  2302. + else
  2303. + _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
  2304. + }
  2305. + // NB: There is no way to extact this info from posix locales.
  2306. + // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
  2307. + _M_truename = L"true";
  2308. + // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
  2309. + _M_falsename = L"false";
  2310. + }
  2311. +
  2312. + template<>
  2313. + numpunct<wchar_t>::~numpunct()
  2314. + { }
  2315. + #endif
  2316. +}
  2317. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc
  2318. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
  2319. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc 2004-01-09 08:25:03.000000000 -0600
  2320. @@ -0,0 +1,341 @@
  2321. +// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
  2322. +
  2323. +// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  2324. +//
  2325. +// This file is part of the GNU ISO C++ Library. This library is free
  2326. +// software; you can redistribute it and/or modify it under the
  2327. +// terms of the GNU General Public License as published by the
  2328. +// Free Software Foundation; either version 2, or (at your option)
  2329. +// any later version.
  2330. +
  2331. +// This library is distributed in the hope that it will be useful,
  2332. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2333. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2334. +// GNU General Public License for more details.
  2335. +
  2336. +// You should have received a copy of the GNU General Public License along
  2337. +// with this library; see the file COPYING. If not, write to the Free
  2338. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2339. +// USA.
  2340. +
  2341. +// As a special exception, you may use this file as part of a free software
  2342. +// library without restriction. Specifically, if other files instantiate
  2343. +// templates or use macros or inline functions from this file, or you compile
  2344. +// this file and link it with other files to produce an executable, this
  2345. +// file does not by itself cause the resulting executable to be covered by
  2346. +// the GNU General Public License. This exception does not however
  2347. +// invalidate any other reasons why the executable file might be covered by
  2348. +// the GNU General Public License.
  2349. +
  2350. +//
  2351. +// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
  2352. +// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
  2353. +//
  2354. +
  2355. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  2356. +
  2357. +#include <locale>
  2358. +#include <bits/c++locale_internal.h>
  2359. +
  2360. +#ifdef __UCLIBC_MJN3_ONLY__
  2361. +#warning tailor for stub locale support
  2362. +#endif
  2363. +#ifndef __UCLIBC_HAS_XLOCALE__
  2364. +#define __nl_langinfo_l(N, L) nl_langinfo((N))
  2365. +#endif
  2366. +
  2367. +namespace std
  2368. +{
  2369. + template<>
  2370. + void
  2371. + __timepunct<char>::
  2372. + _M_put(char* __s, size_t __maxlen, const char* __format,
  2373. + const tm* __tm) const
  2374. + {
  2375. +#ifdef __UCLIBC_HAS_XLOCALE__
  2376. + __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
  2377. +#else
  2378. + char* __old = strdup(setlocale(LC_ALL, NULL));
  2379. + setlocale(LC_ALL, _M_name_timepunct);
  2380. + strftime(__s, __maxlen, __format, __tm);
  2381. + setlocale(LC_ALL, __old);
  2382. + free(__old);
  2383. +#endif
  2384. + }
  2385. +
  2386. + template<>
  2387. + void
  2388. + __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
  2389. + {
  2390. + if (!__cloc)
  2391. + {
  2392. + // "C" locale
  2393. + _M_c_locale_timepunct = _S_c_locale;
  2394. +
  2395. + _M_date_format = "%m/%d/%y";
  2396. + _M_date_era_format = "%m/%d/%y";
  2397. + _M_time_format = "%H:%M:%S";
  2398. + _M_time_era_format = "%H:%M:%S";
  2399. + _M_date_time_format = "";
  2400. + _M_date_time_era_format = "";
  2401. + _M_am = "AM";
  2402. + _M_pm = "PM";
  2403. + _M_am_pm_format = "";
  2404. +
  2405. + // Day names, starting with "C"'s Sunday.
  2406. + _M_day1 = "Sunday";
  2407. + _M_day2 = "Monday";
  2408. + _M_day3 = "Tuesday";
  2409. + _M_day4 = "Wednesday";
  2410. + _M_day5 = "Thursday";
  2411. + _M_day6 = "Friday";
  2412. + _M_day7 = "Saturday";
  2413. +
  2414. + // Abbreviated day names, starting with "C"'s Sun.
  2415. + _M_day_a1 = "Sun";
  2416. + _M_day_a2 = "Mon";
  2417. + _M_day_a3 = "Tue";
  2418. + _M_day_a4 = "Wed";
  2419. + _M_day_a5 = "Thu";
  2420. + _M_day_a6 = "Fri";
  2421. + _M_day_a7 = "Sat";
  2422. +
  2423. + // Month names, starting with "C"'s January.
  2424. + _M_month01 = "January";
  2425. + _M_month02 = "February";
  2426. + _M_month03 = "March";
  2427. + _M_month04 = "April";
  2428. + _M_month05 = "May";
  2429. + _M_month06 = "June";
  2430. + _M_month07 = "July";
  2431. + _M_month08 = "August";
  2432. + _M_month09 = "September";
  2433. + _M_month10 = "October";
  2434. + _M_month11 = "November";
  2435. + _M_month12 = "December";
  2436. +
  2437. + // Abbreviated month names, starting with "C"'s Jan.
  2438. + _M_month_a01 = "Jan";
  2439. + _M_month_a02 = "Feb";
  2440. + _M_month_a03 = "Mar";
  2441. + _M_month_a04 = "Apr";
  2442. + _M_month_a05 = "May";
  2443. + _M_month_a06 = "Jun";
  2444. + _M_month_a07 = "July";
  2445. + _M_month_a08 = "Aug";
  2446. + _M_month_a09 = "Sep";
  2447. + _M_month_a10 = "Oct";
  2448. + _M_month_a11 = "Nov";
  2449. + _M_month_a12 = "Dec";
  2450. + }
  2451. + else
  2452. + {
  2453. + _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
  2454. +
  2455. + _M_date_format = __nl_langinfo_l(D_FMT, __cloc);
  2456. + _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
  2457. + _M_time_format = __nl_langinfo_l(T_FMT, __cloc);
  2458. + _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
  2459. + _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
  2460. + _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
  2461. + _M_am = __nl_langinfo_l(AM_STR, __cloc);
  2462. + _M_pm = __nl_langinfo_l(PM_STR, __cloc);
  2463. + _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
  2464. +
  2465. + // Day names, starting with "C"'s Sunday.
  2466. + _M_day1 = __nl_langinfo_l(DAY_1, __cloc);
  2467. + _M_day2 = __nl_langinfo_l(DAY_2, __cloc);
  2468. + _M_day3 = __nl_langinfo_l(DAY_3, __cloc);
  2469. + _M_day4 = __nl_langinfo_l(DAY_4, __cloc);
  2470. + _M_day5 = __nl_langinfo_l(DAY_5, __cloc);
  2471. + _M_day6 = __nl_langinfo_l(DAY_6, __cloc);
  2472. + _M_day7 = __nl_langinfo_l(DAY_7, __cloc);
  2473. +
  2474. + // Abbreviated day names, starting with "C"'s Sun.
  2475. + _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc);
  2476. + _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc);
  2477. + _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc);
  2478. + _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc);
  2479. + _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc);
  2480. + _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc);
  2481. + _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc);
  2482. +
  2483. + // Month names, starting with "C"'s January.
  2484. + _M_month01 = __nl_langinfo_l(MON_1, __cloc);
  2485. + _M_month02 = __nl_langinfo_l(MON_2, __cloc);
  2486. + _M_month03 = __nl_langinfo_l(MON_3, __cloc);
  2487. + _M_month04 = __nl_langinfo_l(MON_4, __cloc);
  2488. + _M_month05 = __nl_langinfo_l(MON_5, __cloc);
  2489. + _M_month06 = __nl_langinfo_l(MON_6, __cloc);
  2490. + _M_month07 = __nl_langinfo_l(MON_7, __cloc);
  2491. + _M_month08 = __nl_langinfo_l(MON_8, __cloc);
  2492. + _M_month09 = __nl_langinfo_l(MON_9, __cloc);
  2493. + _M_month10 = __nl_langinfo_l(MON_10, __cloc);
  2494. + _M_month11 = __nl_langinfo_l(MON_11, __cloc);
  2495. + _M_month12 = __nl_langinfo_l(MON_12, __cloc);
  2496. +
  2497. + // Abbreviated month names, starting with "C"'s Jan.
  2498. + _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc);
  2499. + _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc);
  2500. + _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc);
  2501. + _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc);
  2502. + _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc);
  2503. + _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc);
  2504. + _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc);
  2505. + _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc);
  2506. + _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc);
  2507. + _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc);
  2508. + _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc);
  2509. + _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc);
  2510. + }
  2511. + }
  2512. +
  2513. +#ifdef _GLIBCPP_USE_WCHAR_T
  2514. + template<>
  2515. + void
  2516. + __timepunct<wchar_t>::
  2517. + _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
  2518. + const tm* __tm) const
  2519. + {
  2520. +#ifdef __UCLIBC_HAS_XLOCALE__
  2521. + __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
  2522. +#else
  2523. + char* __old = strdup(setlocale(LC_ALL, NULL));
  2524. + setlocale(LC_ALL, _M_name_timepunct);
  2525. + wcsftime(__s, __maxlen, __format, __tm);
  2526. + setlocale(LC_ALL, __old);
  2527. + free(__old);
  2528. +#endif
  2529. + }
  2530. +
  2531. + template<>
  2532. + void
  2533. + __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
  2534. + {
  2535. +#warning wide time stuff
  2536. +// if (!__cloc)
  2537. + {
  2538. + // "C" locale
  2539. + _M_c_locale_timepunct = _S_c_locale;
  2540. +
  2541. + _M_date_format = L"%m/%d/%y";
  2542. + _M_date_era_format = L"%m/%d/%y";
  2543. + _M_time_format = L"%H:%M:%S";
  2544. + _M_time_era_format = L"%H:%M:%S";
  2545. + _M_date_time_format = L"";
  2546. + _M_date_time_era_format = L"";
  2547. + _M_am = L"AM";
  2548. + _M_pm = L"PM";
  2549. + _M_am_pm_format = L"";
  2550. +
  2551. + // Day names, starting with "C"'s Sunday.
  2552. + _M_day1 = L"Sunday";
  2553. + _M_day2 = L"Monday";
  2554. + _M_day3 = L"Tuesday";
  2555. + _M_day4 = L"Wednesday";
  2556. + _M_day5 = L"Thursday";
  2557. + _M_day6 = L"Friday";
  2558. + _M_day7 = L"Saturday";
  2559. +
  2560. + // Abbreviated day names, starting with "C"'s Sun.
  2561. + _M_day_a1 = L"Sun";
  2562. + _M_day_a2 = L"Mon";
  2563. + _M_day_a3 = L"Tue";
  2564. + _M_day_a4 = L"Wed";
  2565. + _M_day_a5 = L"Thu";
  2566. + _M_day_a6 = L"Fri";
  2567. + _M_day_a7 = L"Sat";
  2568. +
  2569. + // Month names, starting with "C"'s January.
  2570. + _M_month01 = L"January";
  2571. + _M_month02 = L"February";
  2572. + _M_month03 = L"March";
  2573. + _M_month04 = L"April";
  2574. + _M_month05 = L"May";
  2575. + _M_month06 = L"June";
  2576. + _M_month07 = L"July";
  2577. + _M_month08 = L"August";
  2578. + _M_month09 = L"September";
  2579. + _M_month10 = L"October";
  2580. + _M_month11 = L"November";
  2581. + _M_month12 = L"December";
  2582. +
  2583. + // Abbreviated month names, starting with "C"'s Jan.
  2584. + _M_month_a01 = L"Jan";
  2585. + _M_month_a02 = L"Feb";
  2586. + _M_month_a03 = L"Mar";
  2587. + _M_month_a04 = L"Apr";
  2588. + _M_month_a05 = L"May";
  2589. + _M_month_a06 = L"Jun";
  2590. + _M_month_a07 = L"July";
  2591. + _M_month_a08 = L"Aug";
  2592. + _M_month_a09 = L"Sep";
  2593. + _M_month_a10 = L"Oct";
  2594. + _M_month_a11 = L"Nov";
  2595. + _M_month_a12 = L"Dec";
  2596. + }
  2597. +#if 0
  2598. + else
  2599. + {
  2600. + _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
  2601. +
  2602. + _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
  2603. + _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
  2604. + _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
  2605. + _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
  2606. + _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
  2607. + _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
  2608. + _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
  2609. + _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
  2610. + _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
  2611. +
  2612. + // Day names, starting with "C"'s Sunday.
  2613. + _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
  2614. + _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
  2615. + _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
  2616. + _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
  2617. + _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
  2618. + _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
  2619. + _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
  2620. +
  2621. + // Abbreviated day names, starting with "C"'s Sun.
  2622. + _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
  2623. + _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
  2624. + _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
  2625. + _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
  2626. + _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
  2627. + _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
  2628. + _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
  2629. +
  2630. + // Month names, starting with "C"'s January.
  2631. + _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
  2632. + _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
  2633. + _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
  2634. + _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
  2635. + _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
  2636. + _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
  2637. + _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
  2638. + _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
  2639. + _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
  2640. + _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
  2641. + _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
  2642. + _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
  2643. +
  2644. + // Abbreviated month names, starting with "C"'s Jan.
  2645. + _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
  2646. + _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
  2647. + _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
  2648. + _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
  2649. + _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
  2650. + _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
  2651. + _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
  2652. + _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
  2653. + _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
  2654. + _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
  2655. + _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
  2656. + _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
  2657. + }
  2658. +#endif // 0
  2659. + }
  2660. +#endif
  2661. +}
  2662. diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h
  2663. --- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
  2664. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h 2004-01-09 04:26:21.000000000 -0600
  2665. @@ -0,0 +1,68 @@
  2666. +// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
  2667. +
  2668. +// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  2669. +//
  2670. +// This file is part of the GNU ISO C++ Library. This library is free
  2671. +// software; you can redistribute it and/or modify it under the
  2672. +// terms of the GNU General Public License as published by the
  2673. +// Free Software Foundation; either version 2, or (at your option)
  2674. +// any later version.
  2675. +
  2676. +// This library is distributed in the hope that it will be useful,
  2677. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2678. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2679. +// GNU General Public License for more details.
  2680. +
  2681. +// You should have received a copy of the GNU General Public License along
  2682. +// with this library; see the file COPYING. If not, write to the Free
  2683. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2684. +// USA.
  2685. +
  2686. +// As a special exception, you may use this file as part of a free software
  2687. +// library without restriction. Specifically, if other files instantiate
  2688. +// templates or use macros or inline functions from this file, or you compile
  2689. +// this file and link it with other files to produce an executable, this
  2690. +// file does not by itself cause the resulting executable to be covered by
  2691. +// the GNU General Public License. This exception does not however
  2692. +// invalidate any other reasons why the executable file might be covered by
  2693. +// the GNU General Public License.
  2694. +
  2695. +//
  2696. +// ISO C++ 14882: 22.2.5.1.2 - time_get functions
  2697. +// ISO C++ 14882: 22.2.5.3.2 - time_put functions
  2698. +//
  2699. +
  2700. +// Written by Benjamin Kosnik <bkoz@redhat.com>
  2701. +
  2702. + template<typename _CharT>
  2703. + __timepunct<_CharT>::__timepunct(size_t __refs)
  2704. + : locale::facet(__refs)
  2705. + {
  2706. +#ifndef __UCLIBC_HAS_XLOCALE__
  2707. + _M_name_timepunct = _S_c_name;
  2708. +#endif
  2709. + _M_initialize_timepunct();
  2710. + }
  2711. +
  2712. + template<typename _CharT>
  2713. + __timepunct<_CharT>::__timepunct(__c_locale __cloc,
  2714. + const char* __s,
  2715. + size_t __refs)
  2716. + : locale::facet(__refs)
  2717. + {
  2718. +#ifndef __UCLIBC_HAS_XLOCALE__
  2719. + _M_name_timepunct = new char[strlen(__s) + 1];
  2720. + strcpy(_M_name_timepunct, __s);
  2721. +#endif
  2722. + _M_initialize_timepunct(__cloc);
  2723. + }
  2724. +
  2725. + template<typename _CharT>
  2726. + __timepunct<_CharT>::~__timepunct()
  2727. + {
  2728. +#ifndef __UCLIBC_HAS_XLOCALE__
  2729. + if (_S_c_name != _M_name_timepunct)
  2730. + delete [] _M_name_timepunct;
  2731. +#endif
  2732. + _S_destroy_c_locale(_M_c_locale_timepunct);
  2733. + }
  2734. diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h
  2735. --- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
  2736. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h 2004-01-09 02:54:54.000000000 -0600
  2737. @@ -0,0 +1,57 @@
  2738. +// Locale support -*- C++ -*-
  2739. +
  2740. +// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
  2741. +//
  2742. +// This file is part of the GNU ISO C++ Library. This library is free
  2743. +// software; you can redistribute it and/or modify it under the
  2744. +// terms of the GNU General Public License as published by the
  2745. +// Free Software Foundation; either version 2, or (at your option)
  2746. +// any later version.
  2747. +
  2748. +// This library is distributed in the hope that it will be useful,
  2749. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2750. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2751. +// GNU General Public License for more details.
  2752. +
  2753. +// You should have received a copy of the GNU General Public License along
  2754. +// with this library; see the file COPYING. If not, write to the Free
  2755. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2756. +// USA.
  2757. +
  2758. +// As a special exception, you may use this file as part of a free software
  2759. +// library without restriction. Specifically, if other files instantiate
  2760. +// templates or use macros or inline functions from this file, or you compile
  2761. +// this file and link it with other files to produce an executable, this
  2762. +// file does not by itself cause the resulting executable to be covered by
  2763. +// the GNU General Public License. This exception does not however
  2764. +// invalidate any other reasons why the executable file might be covered by
  2765. +// the GNU General Public License.
  2766. +
  2767. +//
  2768. +// ISO C++ 14882: 22.1 Locales
  2769. +//
  2770. +
  2771. +// Information as gleaned from /usr/include/ctype.h
  2772. +
  2773. + struct ctype_base
  2774. + {
  2775. + // Note: In uClibc, the following two types depend on configuration.
  2776. +
  2777. + // Non-standard typedefs.
  2778. + typedef const __ctype_touplow_t* __to_type;
  2779. + // NB: Offsets into ctype<char>::_M_table force a particular size
  2780. + // on the mask type. Because of this, we don't use an enum.
  2781. + typedef __ctype_mask_t mask;
  2782. +
  2783. + static const mask upper = _ISupper;
  2784. + static const mask lower = _ISlower;
  2785. + static const mask alpha = _ISalpha;
  2786. + static const mask digit = _ISdigit;
  2787. + static const mask xdigit = _ISxdigit;
  2788. + static const mask space = _ISspace;
  2789. + static const mask print = _ISprint;
  2790. + static const mask graph = _ISgraph;
  2791. + static const mask cntrl = _IScntrl;
  2792. + static const mask punct = _ISpunct;
  2793. + static const mask alnum = _ISalnum;
  2794. + };
  2795. diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h
  2796. --- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
  2797. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h 2002-06-24 00:49:19.000000000 -0500
  2798. @@ -0,0 +1,69 @@
  2799. +// Locale support -*- C++ -*-
  2800. +
  2801. +// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  2802. +//
  2803. +// This file is part of the GNU ISO C++ Library. This library is free
  2804. +// software; you can redistribute it and/or modify it under the
  2805. +// terms of the GNU General Public License as published by the
  2806. +// Free Software Foundation; either version 2, or (at your option)
  2807. +// any later version.
  2808. +
  2809. +// This library is distributed in the hope that it will be useful,
  2810. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2811. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2812. +// GNU General Public License for more details.
  2813. +
  2814. +// You should have received a copy of the GNU General Public License along
  2815. +// with this library; see the file COPYING. If not, write to the Free
  2816. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2817. +// USA.
  2818. +
  2819. +// As a special exception, you may use this file as part of a free software
  2820. +// library without restriction. Specifically, if other files instantiate
  2821. +// templates or use macros or inline functions from this file, or you compile
  2822. +// this file and link it with other files to produce an executable, this
  2823. +// file does not by itself cause the resulting executable to be covered by
  2824. +// the GNU General Public License. This exception does not however
  2825. +// invalidate any other reasons why the executable file might be covered by
  2826. +// the GNU General Public License.
  2827. +
  2828. +//
  2829. +// ISO C++ 14882: 22.1 Locales
  2830. +//
  2831. +
  2832. +// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
  2833. +// functions go in ctype.cc
  2834. +
  2835. + bool
  2836. + ctype<char>::
  2837. + is(mask __m, char __c) const
  2838. + { return _M_table[static_cast<unsigned char>(__c)] & __m; }
  2839. +
  2840. + const char*
  2841. + ctype<char>::
  2842. + is(const char* __low, const char* __high, mask* __vec) const
  2843. + {
  2844. + while (__low < __high)
  2845. + *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
  2846. + return __high;
  2847. + }
  2848. +
  2849. + const char*
  2850. + ctype<char>::
  2851. + scan_is(mask __m, const char* __low, const char* __high) const
  2852. + {
  2853. + while (__low < __high
  2854. + && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
  2855. + ++__low;
  2856. + return __low;
  2857. + }
  2858. +
  2859. + const char*
  2860. + ctype<char>::
  2861. + scan_not(mask __m, const char* __low, const char* __high) const
  2862. + {
  2863. + while (__low < __high
  2864. + && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
  2865. + ++__low;
  2866. + return __low;
  2867. + }
  2868. diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h
  2869. --- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
  2870. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2004-01-09 03:34:53.000000000 -0600
  2871. @@ -0,0 +1,90 @@
  2872. +// Locale support -*- C++ -*-
  2873. +
  2874. +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
  2875. +// Free Software Foundation, Inc.
  2876. +//
  2877. +// This file is part of the GNU ISO C++ Library. This library is free
  2878. +// software; you can redistribute it and/or modify it under the
  2879. +// terms of the GNU General Public License as published by the
  2880. +// Free Software Foundation; either version 2, or (at your option)
  2881. +// any later version.
  2882. +
  2883. +// This library is distributed in the hope that it will be useful,
  2884. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2885. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2886. +// GNU General Public License for more details.
  2887. +
  2888. +// You should have received a copy of the GNU General Public License along
  2889. +// with this library; see the file COPYING. If not, write to the Free
  2890. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2891. +// USA.
  2892. +
  2893. +// As a special exception, you may use this file as part of a free software
  2894. +// library without restriction. Specifically, if other files instantiate
  2895. +// templates or use macros or inline functions from this file, or you compile
  2896. +// this file and link it with other files to produce an executable, this
  2897. +// file does not by itself cause the resulting executable to be covered by
  2898. +// the GNU General Public License. This exception does not however
  2899. +// invalidate any other reasons why the executable file might be covered by
  2900. +// the GNU General Public License.
  2901. +
  2902. +//
  2903. +// ISO C++ 14882: 22.1 Locales
  2904. +//
  2905. +
  2906. +// Information as gleaned from /usr/include/ctype.h
  2907. +
  2908. + const ctype_base::mask*
  2909. + ctype<char>::classic_table() throw()
  2910. + {
  2911. + return __C_ctype_b;
  2912. + }
  2913. +
  2914. + ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
  2915. + size_t __refs)
  2916. + : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
  2917. + {
  2918. + _M_toupper = __C_ctype_toupper;
  2919. + _M_tolower = __C_ctype_tolower;
  2920. + _M_table = __table ? __table : __C_ctype_b;
  2921. + _M_c_locale_ctype = _S_c_locale;
  2922. + }
  2923. +
  2924. + ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) :
  2925. + __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
  2926. + {
  2927. + _M_toupper = __C_ctype_toupper;
  2928. + _M_tolower = __C_ctype_tolower;
  2929. + _M_table = __table ? __table : __C_ctype_b;
  2930. + _M_c_locale_ctype = _S_c_locale;
  2931. + }
  2932. +
  2933. + char
  2934. + ctype<char>::do_toupper(char __c) const
  2935. + { return _M_toupper[static_cast<unsigned char>(__c)]; }
  2936. +
  2937. + const char*
  2938. + ctype<char>::do_toupper(char* __low, const char* __high) const
  2939. + {
  2940. + while (__low < __high)
  2941. + {
  2942. + *__low = _M_toupper[static_cast<unsigned char>(*__low)];
  2943. + ++__low;
  2944. + }
  2945. + return __high;
  2946. + }
  2947. +
  2948. + char
  2949. + ctype<char>::do_tolower(char __c) const
  2950. + { return _M_tolower[static_cast<unsigned char>(__c)]; }
  2951. +
  2952. + const char*
  2953. + ctype<char>::do_tolower(char* __low, const char* __high) const
  2954. + {
  2955. + while (__low < __high)
  2956. + {
  2957. + *__low = _M_tolower[static_cast<unsigned char>(*__low)];
  2958. + ++__low;
  2959. + }
  2960. + return __high;
  2961. + }
  2962. diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h
  2963. --- gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
  2964. +++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h 2004-01-09 04:56:13.000000000 -0600
  2965. @@ -0,0 +1,56 @@
  2966. +// Specific definitions for GNU/Linux -*- C++ -*-
  2967. +
  2968. +// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
  2969. +//
  2970. +// This file is part of the GNU ISO C++ Library. This library is free
  2971. +// software; you can redistribute it and/or modify it under the
  2972. +// terms of the GNU General Public License as published by the
  2973. +// Free Software Foundation; either version 2, or (at your option)
  2974. +// any later version.
  2975. +
  2976. +// This library is distributed in the hope that it will be useful,
  2977. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2978. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2979. +// GNU General Public License for more details.
  2980. +
  2981. +// You should have received a copy of the GNU General Public License along
  2982. +// with this library; see the file COPYING. If not, write to the Free
  2983. +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2984. +// USA.
  2985. +
  2986. +// As a special exception, you may use this file as part of a free software
  2987. +// library without restriction. Specifically, if other files instantiate
  2988. +// templates or use macros or inline functions from this file, or you compile
  2989. +// this file and link it with other files to produce an executable, this
  2990. +// file does not by itself cause the resulting executable to be covered by
  2991. +// the GNU General Public License. This exception does not however
  2992. +// invalidate any other reasons why the executable file might be covered by
  2993. +// the GNU General Public License.
  2994. +
  2995. +#ifndef _GLIBCPP_OS_DEFINES
  2996. +#define _GLIBCPP_OS_DEFINES 1
  2997. +
  2998. +// System-specific #define, typedefs, corrections, etc, go here. This
  2999. +// file will come before all others.
  3000. +
  3001. +// This keeps isanum, et al from being propagated as macros.
  3002. +#define __NO_CTYPE 1
  3003. +
  3004. +#include <features.h>
  3005. +
  3006. +// These systems have declarations mismatching those in libio.h by
  3007. +// omitting throw qualifiers. Cleanest way out is to not provide
  3008. +// throw-qualifiers at all. Defining it as empty here will make libio.h
  3009. +// not define it.
  3010. +#undef __THROW
  3011. +#define __THROW
  3012. +
  3013. +// Tell Glibc not to try to provide its own inline versions of
  3014. +// some math functions. Those cause assembly-time clashes with
  3015. +// our definitions.
  3016. +#define __NO_MATH_INLINES
  3017. +
  3018. +// We must not see the optimized string functions GNU libc defines.
  3019. +#define __NO_STRING_INLINES
  3020. +
  3021. +#endif