unicode_symbian.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  3. * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. */
  19. #include <pj/unicode.h>
  20. #include "os_symbian.h"
  21. /*
  22. * Convert ANSI strings to Unicode strings.
  23. */
  24. PJ_DEF(wchar_t*) pj_ansi_to_unicode( const char *str, pj_size_t len,
  25. wchar_t *wbuf, pj_size_t wbuf_count)
  26. {
  27. TPtrC8 aForeign((const TUint8*)str, (TInt)len);
  28. TPtr16 aUnicode((TUint16*)wbuf, (TInt)(wbuf_count-1));
  29. TInt left;
  30. left = PjSymbianOS::Instance()->ConvertToUnicode(aUnicode, aForeign);
  31. if (left != 0) {
  32. // Error, or there are unconvertable characters
  33. *wbuf = 0;
  34. } else {
  35. if (len < wbuf_count)
  36. wbuf[len] = 0;
  37. else
  38. wbuf[len-1] = 0;
  39. }
  40. return wbuf;
  41. }
  42. /*
  43. * Convert Unicode string to ANSI string.
  44. */
  45. PJ_DEF(char*) pj_unicode_to_ansi( const wchar_t *wstr, pj_size_t len,
  46. char *buf, pj_size_t buf_size)
  47. {
  48. TPtrC16 aUnicode((const TUint16*)wstr, (TInt)len);
  49. TPtr8 aForeign((TUint8*)buf, (TInt)(buf_size-1));
  50. TInt left;
  51. left = PjSymbianOS::Instance()->ConvertFromUnicode(aForeign, aUnicode);
  52. if (left != 0) {
  53. // Error, or there are unconvertable characters
  54. buf[0] = '\0';
  55. } else {
  56. if (len < buf_size)
  57. buf[len] = '\0';
  58. else
  59. buf[len-1] = '\0';
  60. }
  61. return buf;
  62. }