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>