~ubuntu-branches/ubuntu/gutsy/virtualbox-ose/gutsy

« back to all changes in this revision

Viewing changes to src/VBox/Runtime/string.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Steve Kowalik
  • Date: 2007-09-08 16:44:58 UTC
  • Revision ID: james.westby@ubuntu.com-20070908164458-wao29470vqtr8ksy
Tags: upstream-1.5.0-dfsg2
ImportĀ upstreamĀ versionĀ 1.5.0-dfsg2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $Id: string.cpp 4071 2007-08-07 17:07:59Z vboxsync $ */
 
2
/** @file
 
3
 * innotek Portable Runtime - String Manipulation.
 
4
 */
 
5
 
 
6
/*
 
7
 * Copyright (C) 2006-2007 innotek GmbH
 
8
 *
 
9
 * This file is part of VirtualBox Open Source Edition (OSE), as
 
10
 * available from http://www.virtualbox.org. This file is free software;
 
11
 * you can redistribute it and/or modify it under the terms of the GNU
 
12
 * General Public License as published by the Free Software Foundation,
 
13
 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
 
14
 * distribution. VirtualBox OSE is distributed in the hope that it will
 
15
 * be useful, but WITHOUT ANY WARRANTY of any kind.
 
16
 */
 
17
 
 
18
 
 
19
/*******************************************************************************
 
20
*   Header Files                                                               *
 
21
*******************************************************************************/
 
22
#include <iprt/string.h>
 
23
#include <iprt/alloc.h>
 
24
#include <iprt/assert.h>
 
25
#include <iprt/err.h>
 
26
#include "internal/string.h"
 
27
 
 
28
#include <locale.h>
 
29
 
 
30
 
 
31
/**
 
32
 * Init C runtime locale
 
33
 * note: actually where is no need in this global var, use it only for
 
34
 * auto run of setlocale() func.
 
35
 */
 
36
/** @todo rewrite this to do setlocale() from some proper init function. */
 
37
static int g_RTLocaleInited = (setlocale(LC_CTYPE, "") != NULL);
 
38
 
 
39
 
 
40
/**
 
41
 * Free string allocated by any of the non-UCS-2 string functions.
 
42
 *
 
43
 * @returns iprt status code.
 
44
 * @param   pszString      Pointer to buffer with string to free.
 
45
 *                         NULL is accepted.
 
46
 */
 
47
RTR3DECL(void)  RTStrFree(char *pszString)
 
48
{
 
49
    if (pszString)
 
50
        RTMemTmpFree(pszString);
 
51
}
 
52
 
 
53
 
 
54
/**
 
55
 * Allocates a new copy of the given UTF-8 string.
 
56
 *
 
57
 * @returns Pointer to the allocated UTF-8 string.
 
58
 * @param   pszString       UTF-8 string to duplicate.
 
59
 */
 
60
RTR3DECL(char *) RTStrDup(const char *pszString)
 
61
{
 
62
    Assert(VALID_PTR(pszString));
 
63
    size_t cch = strlen(pszString) + 1;
 
64
    char *psz = (char *)RTMemAlloc(cch);
 
65
    if (psz)
 
66
        memcpy(psz, pszString, cch);
 
67
    return psz;
 
68
}
 
69
 
 
70
 
 
71
/**
 
72
 * Allocates a new copy of the given UTF-8 string.
 
73
 *
 
74
 * @returns iprt status code.
 
75
 * @param   ppszString      Receives pointer of the allocated UTF-8 string.
 
76
 *                          The returned pointer must be freed using RTStrFree().
 
77
 * @param   pszString       UTF-8 string to duplicate.
 
78
 */
 
79
RTR3DECL(int)  RTStrDupEx(char **ppszString, const char *pszString)
 
80
{
 
81
    Assert(VALID_PTR(ppszString));
 
82
    Assert(VALID_PTR(pszString));
 
83
 
 
84
    size_t cch = strlen(pszString) + 1;
 
85
    char *psz = (char *)RTMemAlloc(cch);
 
86
    if (psz)
 
87
    {
 
88
        memcpy(psz, pszString, cch);
 
89
        *ppszString = psz;
 
90
        return VINF_SUCCESS;
 
91
    }
 
92
    return VERR_NO_MEMORY;
 
93
}
 
94