Annotation of embedaddon/php/ext/com_dotnet/com_olechar.c, revision 1.1
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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>