Return to com_olechar.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / com_dotnet |
1.1 ! misho 1: /* ! 2: +----------------------------------------------------------------------+ ! 3: | PHP Version 5 | ! 4: +----------------------------------------------------------------------+ ! 5: | Copyright (c) 1997-2012 The PHP Group | ! 6: +----------------------------------------------------------------------+ ! 7: | This source file is subject to version 3.01 of the PHP license, | ! 8: | that is bundled with this package in the file LICENSE, and is | ! 9: | available through the world-wide-web at the following url: | ! 10: | http://www.php.net/license/3_01.txt | ! 11: | If you did not receive a copy of the PHP license and are unable to | ! 12: | obtain it through the world-wide-web, please send a note to | ! 13: | license@php.net so we can mail you a copy immediately. | ! 14: +----------------------------------------------------------------------+ ! 15: | Author: Wez Furlong <wez@thebrainroom.com> | ! 16: | Harald Radi <h.radi@nme.at> | ! 17: +----------------------------------------------------------------------+ ! 18: */ ! 19: ! 20: /* $Id: com_olechar.c 321634 2012-01-01 13:15:04Z felipe $ */ ! 21: ! 22: #ifdef HAVE_CONFIG_H ! 23: #include "config.h" ! 24: #endif ! 25: ! 26: #include "php.h" ! 27: #include "php_ini.h" ! 28: #include "ext/standard/info.h" ! 29: #include "php_com_dotnet.h" ! 30: #include "php_com_dotnet_internal.h" ! 31: ! 32: ! 33: PHPAPI OLECHAR *php_com_string_to_olestring(char *string, uint string_len, int codepage TSRMLS_DC) ! 34: { ! 35: OLECHAR *olestring = NULL; ! 36: DWORD flags = codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS; ! 37: BOOL ok; ! 38: ! 39: if (string_len == -1) { ! 40: /* determine required length for the buffer (includes NUL terminator) */ ! 41: string_len = MultiByteToWideChar(codepage, flags, string, -1, NULL, 0); ! 42: } else { ! 43: /* allow room for NUL terminator */ ! 44: string_len++; ! 45: } ! 46: ! 47: if (string_len > 0) { ! 48: olestring = (OLECHAR*)safe_emalloc(string_len, sizeof(OLECHAR), 0); ! 49: ok = MultiByteToWideChar(codepage, flags, string, string_len, olestring, string_len); ! 50: } else { ! 51: ok = FALSE; ! 52: olestring = (OLECHAR*)emalloc(sizeof(OLECHAR)); ! 53: *olestring = 0; ! 54: } ! 55: ! 56: if (!ok) { ! 57: char *msg = php_win_err(GetLastError()); ! 58: ! 59: php_error_docref(NULL TSRMLS_CC, E_WARNING, ! 60: "Could not convert string to unicode: `%s'", msg); ! 61: ! 62: LocalFree(msg); ! 63: } ! 64: ! 65: return olestring; ! 66: } ! 67: ! 68: PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring, uint *string_len, int codepage TSRMLS_DC) ! 69: { ! 70: char *string; ! 71: uint length = 0; ! 72: BOOL ok; ! 73: ! 74: length = WideCharToMultiByte(codepage, 0, olestring, -1, NULL, 0, NULL, NULL); ! 75: ! 76: if (length) { ! 77: string = (char*)safe_emalloc(length, sizeof(char), 0); ! 78: length = WideCharToMultiByte(codepage, 0, olestring, -1, string, length, NULL, NULL); ! 79: ok = length > 0; ! 80: } else { ! 81: string = (char*)emalloc(sizeof(char)); ! 82: *string = '\0'; ! 83: ok = FALSE; ! 84: length = 0; ! 85: } ! 86: ! 87: if (!ok) { ! 88: char *msg = php_win_err(GetLastError()); ! 89: ! 90: php_error_docref(NULL TSRMLS_CC, E_WARNING, ! 91: "Could not convert string from unicode: `%s'", msg); ! 92: ! 93: LocalFree(msg); ! 94: } ! 95: ! 96: if (string_len) { ! 97: *string_len = length-1; ! 98: } ! 99: ! 100: return string; ! 101: }