VirtualBox

Ignore:
Timestamp:
Jul 4, 2019 8:01:58 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
131793
Message:

Dhcpd: Eliminated use of std::string (probably my mistake in the original code). Various other cleanups. bugref:9288

Location:
trunk/src/VBox/NetworkServices/Dhcpd
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/NetworkServices/Dhcpd/Config.cpp

    r79509 r79514  
    1818#include "Config.h"
    1919
    20 #include <iprt/types.h>
     20#include <iprt/ctype.h>
    2121#include <iprt/net.h>           /* NB: must come before getopt.h */
    2222#include <iprt/getopt.h>
     
    8888
    8989
    90 void Config::setNetwork(const std::string &aStrNetwork)
    91 {
    92     AssertReturnVoid(m_strNetwork.empty());
     90void Config::setNetwork(const RTCString &aStrNetwork)
     91{
     92    AssertReturnVoid(m_strNetwork.isEmpty());
    9393
    9494    m_strNetwork = aStrNetwork;
     
    104104int Config::logInit()
    105105{
    106     int rc;
    107     size_t cch;
    108 
    109     if (m_strHome.empty() || m_strBaseName.empty())
    110         return VERR_GENERAL_FAILURE;
     106    if (m_strHome.isEmpty() || m_strBaseName.isEmpty())
     107        return VERR_PATH_ZERO_LENGTH;
    111108
    112109    /* default log file name */
    113110    char szLogFile[RTPATH_MAX];
    114     cch = RTStrPrintf(szLogFile, sizeof(szLogFile),
    115                       "%s%c%s-Dhcpd.log",
    116                       m_strHome.c_str(), RTPATH_DELIMITER, m_strBaseName.c_str());
    117     if (cch >= sizeof(szLogFile))
     111    ssize_t cch = RTStrPrintf2(szLogFile, sizeof(szLogFile),
     112                               "%s%c%s-Dhcpd.log",
     113                               m_strHome.c_str(), RTPATH_DELIMITER, m_strBaseName.c_str());
     114    if (cch <= 0)
    118115        return VERR_BUFFER_OVERFLOW;
    119116
    120 
    121     /* get a writable copy of the base name */
    122     char szBaseName[RTPATH_MAX];
    123     rc = RTStrCopy(szBaseName, sizeof(szBaseName), m_strBaseName.c_str());
    124     if (RT_FAILURE(rc))
    125         return rc;
    126 
    127     /* sanitize base name some more to be usable in an environment variable name */
    128     for (char *p = szBaseName; *p != '\0'; ++p)
    129     {
    130         if (   *p != '_'
    131             && (*p < '0' || '9' < *p)
    132             && (*p < 'a' || 'z' < *p)
    133             && (*p < 'A' || 'Z' < *p))
    134         {
     117    /* Sanitize base name some more to be usable in an environment variable name: */
     118    char szEnvVarBase[128];
     119    cch = RTStrPrintf(szEnvVarBase, sizeof(szEnvVarBase), "VBOXDHCP_%s_RELEASE_LOG", m_strBaseName.c_str());
     120    if (cch <= 0)
     121        return VERR_BUFFER_OVERFLOW;
     122    for (char *p = szEnvVarBase; *p != '\0'; ++p)
     123        if (*p != '_' && !RT_C_IS_ALNUM(*p))
    135124            *p = '_';
    136         }
    137     }
    138 
    139 
    140     /* name of the environment variable to control logging */
    141     char szEnvVarBase[128];
    142     cch = RTStrPrintf(szEnvVarBase, sizeof(szEnvVarBase),
    143                       "VBOXDHCP_%s_RELEASE_LOG", szBaseName);
    144     if (cch >= sizeof(szEnvVarBase))
    145         return VERR_BUFFER_OVERFLOW;
    146 
    147 
    148     rc = com::VBoxLogRelCreate("DHCP Server",
    149                                szLogFile,
    150                                RTLOGFLAGS_PREFIX_TIME_PROG,
    151                                "all all.restrict -default.restrict",
    152                                szEnvVarBase,
    153                                RTLOGDEST_FILE
     125
     126
     127    int rc = com::VBoxLogRelCreate("DHCP Server",
     128                                   szLogFile,
     129                                   RTLOGFLAGS_PREFIX_TIME_PROG,
     130                                   "all all.restrict -default.restrict",
     131                                   szEnvVarBase,
     132                                   RTLOGDEST_FILE
    154133#ifdef DEBUG
    155                                | RTLOGDEST_STDERR
     134                                   | RTLOGDEST_STDERR
    156135#endif
    157                                ,
    158                                32768 /* cMaxEntriesPerGroup */,
    159                                0 /* cHistory */,
    160                                0 /* uHistoryFileTime */,
    161                                0 /* uHistoryFileSize */,
    162                                NULL /* pErrInfo */);
     136                                   ,
     137                                   32768 /* cMaxEntriesPerGroup */,
     138                                   0 /* cHistory */,
     139                                   0 /* uHistoryFileTime */,
     140                                   0 /* uHistoryFileSize */,
     141                                   NULL /* pErrInfo */);
    163142
    164143    return rc;
     
    170149    int rc;
    171150
    172     if (m_strNetwork.empty())
     151    if (m_strNetwork.isEmpty())
    173152    {
    174153        LogDHCP(("network name is not specified\n"));
     
    212191
    213192    /* valid netmask */
    214     int iPrefixLengh;
    215     rc = RTNetMaskToPrefixIPv4(&m_IPv4Netmask, &iPrefixLengh);
    216     if (RT_FAILURE(rc) || iPrefixLengh == 0)
     193    int cPrefixBits;
     194    rc = RTNetMaskToPrefixIPv4(&m_IPv4Netmask, &cPrefixBits);
     195    if (RT_FAILURE(rc) || cPrefixBits == 0)
    217196    {
    218197        LogDHCP(("IP mask is not valid: %RTnaipv4\n", m_IPv4Netmask.u));
     
    224203    {
    225204        LogDHCP(("first pool address is outside the network %RTnaipv4/%d: %RTnaipv4\n",
    226                  (m_IPv4Address.u & m_IPv4Netmask.u), iPrefixLengh,
    227                  m_IPv4PoolFirst.u));
     205                 (m_IPv4Address.u & m_IPv4Netmask.u), cPrefixBits, m_IPv4PoolFirst.u));
    228206        return VERR_GENERAL_FAILURE;
    229207    }
     
    233211    {
    234212        LogDHCP(("last pool address is outside the network %RTnaipv4/%d: %RTnaipv4\n",
    235                  (m_IPv4Address.u & m_IPv4Netmask.u), iPrefixLengh,
    236                  m_IPv4PoolLast.u));
     213                 (m_IPv4Address.u & m_IPv4Netmask.u), cPrefixBits, m_IPv4PoolLast.u));
    237214        return VERR_GENERAL_FAILURE;
    238215    }
     
    257234    if (!fMACGenerated)
    258235        LogDHCP(("MAC address %RTmac\n", &m_MacAddress));
    259     LogDHCP(("IP address %RTnaipv4/%d\n", m_IPv4Address.u, iPrefixLengh));
     236    LogDHCP(("IP address %RTnaipv4/%d\n", m_IPv4Address.u, cPrefixBits));
    260237    LogDHCP(("address pool %RTnaipv4 - %RTnaipv4\n", m_IPv4PoolFirst.u, m_IPv4PoolLast.u));
    261238
     
    387364
    388365            case 'n': /* --network */
    389                 if (!config->m_strNetwork.empty())
     366                if (!config->m_strNetwork.isEmpty())
    390367                {
    391368                    RTMsgError("Duplicate --network option");
     
    396373
    397374            case 't': /* --trunk-name */
    398                 if (!config->m_strTrunk.empty())
     375                if (!config->m_strTrunk.isEmpty())
    399376                {
    400377                    RTMsgError("Duplicate --trunk-name option");
     
    641618        throw ConfigFileError("DHCPServer/@networkName missing");
    642619
    643     setNetwork(strNetworkName.c_str());
     620    setNetwork(strNetworkName);
    644621
    645622    RTCString strTrunkType;
     
    663640        if (!server->getAttributeValue("trunkName", &strTrunk))
    664641            throw ConfigFileError("DHCPServer/@trunkName missing");
    665         m_strTrunk = strTrunk.c_str();
     642        m_strTrunk = strTrunk;
    666643    }
    667644    else
     
    848825void Config::sanitizeBaseName()
    849826{
    850     int rc;
    851 
    852     if (m_strNetwork.empty())
    853         return;
    854 
    855     char szBaseName[RTPATH_MAX];
    856     rc = RTStrCopy(szBaseName, sizeof(szBaseName), m_strNetwork.c_str());
    857     if (RT_FAILURE(rc))
    858         return;
    859 
    860     char ch;
     827    if (m_strNetwork.isNotEmpty())
     828    {
     829        m_strBaseName = m_strNetwork;
     830
     831        char ch;
    861832#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
    862     static const char s_szIllegals[] = "/\\\"*:<>?|\t\v\n\r\f\a\b"; /** @todo all control chars... */
    863     for (char *p = szBaseName; (ch = *p) != '\0'; ++p)
    864         if (strchr(s_szIllegals, ch))
    865             *p = '_';
     833        static const char s_szIllegals[] = "/\\\"*:<>?|\t\v\n\r\f\a\b"; /** @todo all control chars... */
     834        for (char *psz = m_strBaseName.mutableRaw(); (ch = *psz) != '\0'; ++psz)
     835            if (strchr(s_szIllegals, ch))
     836                *psz = '_';
    866837#else
    867     for (char *p = szBaseName; (ch = *p) != '\0'; ++p)
    868         if (RTPATH_IS_SEP(ch))
    869             *p = '_';
     838        for (char *psz = m_strBaseName.mutableRaw(); (ch = *psz) != '\0'; ++psz)
     839            if (RTPATH_IS_SEP(ch))
     840                *psz = '_';
    870841#endif
    871 
    872     m_strBaseName.assign(szBaseName);
     842        m_strBaseName.jolt(); /* Not really necessary, but it's protocol. */
     843    }
     844    else
     845        m_strBaseName.setNull();
    873846}
    874847
  • trunk/src/VBox/NetworkServices/Dhcpd/Config.h

    r76576 r79514  
    2525#include <iprt/net.h>
    2626#include <iprt/cpp/xml.h>
     27#include <iprt/cpp/ministring.h>
    2728
    2829#include <VBox/intnet.h>
    2930
    30 #include <string>
    3131
    3232#include "Defs.h"
     
    3737class Config
    3838{
    39     /* XXX: TODO: also store fixed address assignments, etc? */
     39    /** XXX: TODO: also store fixed address assignments, etc? */
    4040    typedef std::map<RTMAC, optmap_t> vmmap_t;
    4141
    42     std::string m_strHome;   /* path of ~/.VirtualBox or equivalent */
     42    RTCString m_strHome;   /* path of ~/.VirtualBox or equivalent */
    4343
    44     std::string m_strNetwork;
    45     std::string m_strBaseName; /* m_strNetwork sanitized to be usable in a path component */
     44    RTCString m_strNetwork;
     45    RTCString m_strBaseName; /* m_strNetwork sanitized to be usable in a path component */
    4646
    47     std::string m_strTrunk;
     47    RTCString m_strTrunk;
    4848    INTNETTRUNKTYPE m_enmTrunkType;
    4949
     
    7373
    7474public: /* accessors */
    75     const std::string &getHome() const { return m_strHome; }
     75    const RTCString &getHome() const { return m_strHome; }
    7676
    77     const std::string &getNetwork() const { return m_strNetwork; }
    78     void setNetwork(const std::string &aStrNetwork);
     77    const RTCString &getNetwork() const { return m_strNetwork; }
     78    void setNetwork(const RTCString &aStrNetwork);
    7979
    80     const std::string &getBaseName() const { return m_strBaseName; }
    81     const std::string &getTrunk() const { return m_strTrunk; }
     80    const RTCString &getBaseName() const { return m_strBaseName; }
     81    const RTCString &getTrunk() const { return m_strTrunk; }
    8282    INTNETTRUNKTYPE getTrunkType() const { return m_enmTrunkType; }
    8383
  • trunk/src/VBox/NetworkServices/Dhcpd/DHCPD.h

    r76576 r79514  
    2222#endif
    2323
     24#include <iprt/cpp/ministring.h>
    2425#include "Defs.h"
    2526#include "Config.h"
     
    3132{
    3233    const Config *m_pConfig;
    33     std::string m_strLeasesFileName;
     34    RTCString m_strLeasesFileName;
    3435    Db m_db;
    3536
  • trunk/src/VBox/NetworkServices/Dhcpd/Db.cpp

    r79509 r79514  
    223223Binding *Binding::fromXML(const xml::ElementNode *ndLease)
    224224{
    225     int rc;
    226 
    227225    /* Lease/@network seems to always have bogus value, ignore it. */
    228226
     
    236234
    237235    RTMAC mac;
    238     rc = RTNetStrToMacAddr(strMac.c_str(), &mac);
     236    int rc = RTNetStrToMacAddr(strMac.c_str(), &mac);
    239237    if (RT_FAILURE(rc))
    240238        return NULL;
     
    640638
    641639
    642 int Db::writeLeases(const std::string &strFileName) const
     640int Db::writeLeases(const RTCString &strFileName) const
    643641{
    644642    LogDHCP(("writing leases to %s\n", strFileName.c_str()));
     
    684682
    685683
    686 int Db::loadLeases(const std::string &strFileName)
     684int Db::loadLeases(const RTCString &strFileName)
    687685{
    688686    LogDHCP(("loading leases from %s\n", strFileName.c_str()));
  • trunk/src/VBox/NetworkServices/Dhcpd/Db.h

    r76576 r79514  
    2424#include <iprt/net.h>
    2525
     26#include <iprt/cpp/ministring.h>
    2627#include <iprt/cpp/xml.h>
    2728
     
    145146
    146147public:
    147     int loadLeases(const std::string &strFileName);
     148    int loadLeases(const RTCString &strFileName);
    148149    void loadLease(const xml::ElementNode *ndLease);
    149150
    150     int writeLeases(const std::string &strFileName) const;
     151    int writeLeases(const RTCString &strFileName) const;
    151152
    152153private:
  • trunk/src/VBox/NetworkServices/Dhcpd/DhcpMessage.cpp

    r76553 r79514  
    102102    }
    103103
    104     int overload;
    105     overload = msg->parseOptions(&bp->bp_vend.Dhcp.dhcp_opts,
    106                                  buflen - RT_OFFSETOF(RTNETBOOTP, bp_vend.Dhcp.dhcp_opts));
    107     if (overload < 0)
     104    int fOptOverload = msg->parseOptions(&bp->bp_vend.Dhcp.dhcp_opts, buflen - RT_OFFSETOF(RTNETBOOTP, bp_vend.Dhcp.dhcp_opts));
     105    if (fOptOverload < 0)
    108106        return NULL;
    109107
    110108    /* "The 'file' field MUST be interpreted next ..." */
    111     if (overload & DHCP_OPTION_OVERLOAD_FILE) {
     109    if (fOptOverload & RTNET_DHCP_OPTION_OVERLOAD_FILE)
     110    {
    112111        int status = msg->parseOptions(bp->bp_file, sizeof(bp->bp_file));
    113112        if (status != 0)
     
    124123
    125124    /* "... followed by the 'sname' field." */
    126     if (overload & DHCP_OPTION_OVERLOAD_SNAME) {
     125    if (fOptOverload & RTNET_DHCP_OPTION_OVERLOAD_SNAME)
     126    {
    127127        int status = msg->parseOptions(bp->bp_sname, sizeof(bp->bp_sname));
    128128        if (status != 0) /* NB: this includes "nested" Option Overload */
     
    150150int DhcpClientMessage::parseOptions(const void *buf, size_t buflen)
    151151{
    152     uint8_t opt, optlen;
    153     const uint8_t *data;
    154     int overload;
    155 
    156     overload = 0;
    157 
    158     data = static_cast<const uint8_t *>(buf);
    159     while (buflen > 0) {
    160         opt = *data++;
     152    int            fOptOverload = 0;
     153    const uint8_t *data        = static_cast<const uint8_t *>(buf);
     154    while (buflen > 0)
     155    {
     156        uint8_t const opt = *data++;
    161157        --buflen;
    162158
    163         if (opt == RTNET_DHCP_OPT_PAD) {
     159        if (opt == RTNET_DHCP_OPT_PAD)
    164160            continue;
    165         }
    166 
    167         if (opt == RTNET_DHCP_OPT_END) {
    168             break;
    169         }
    170 
    171         if (buflen == 0) {
     161
     162        if (opt == RTNET_DHCP_OPT_END)
     163            break;
     164
     165        if (buflen == 0)
     166        {
    172167            RTPrintf("option %d has no length field\n", opt);
    173168            return -1;
    174169        }
    175170
    176         optlen = *data++;
     171        uint8_t optlen = *data++;
    177172        --buflen;
    178173
    179         if (optlen > buflen) {
    180             RTPrintf("option %d truncated (length %d, but only %lu bytes left)\n",
    181                   opt, optlen, (unsigned long)buflen);
     174        if (optlen > buflen)
     175        {
     176            RTPrintf("option %d truncated (length %d, but only %lu bytes left)\n", opt, optlen, (unsigned long)buflen);
    182177            return -1;
    183178        }
     
    188183            return -1;
    189184#endif
    190         if (opt == RTNET_DHCP_OPT_OPTION_OVERLOAD) {
    191             if (optlen != 1) {
    192                 RTPrintf("Overload Option (option %d) has invalid length %d\n",
    193                        opt, optlen);
     185        if (opt == RTNET_DHCP_OPT_OPTION_OVERLOAD)
     186        {
     187            if (optlen != 1)
     188            {
     189                RTPrintf("Overload Option (option %d) has invalid length %d\n", opt, optlen);
    194190                return -1;
    195191            }
    196192
    197             overload = *data;
    198 
    199             if ((overload & ~DHCP_OPTION_OVERLOAD_MASK) != 0) {
    200                 RTPrintf("Overload Option (option %d) has invalid value 0x%x\n",
    201                        opt, overload);
     193            fOptOverload = *data;
     194
     195            if ((fOptOverload & ~RTNET_DHCP_OPTION_OVERLOAD_MASK) != 0)
     196            {
     197                RTPrintf("Overload Option (option %d) has invalid value 0x%x\n", opt, fOptOverload);
    202198                return -1;
    203199            }
    204200        }
    205201        else
    206         {
    207202            m_rawopts.insert(std::make_pair(opt, octets_t(data, data + optlen)));
    208         }
    209 
    210         data += optlen;
     203
     204        data   += optlen;
    211205        buflen -= optlen;
    212206    }
    213207
    214     return overload;
     208    return fOptOverload;
    215209}
    216210
  • trunk/src/VBox/NetworkServices/Dhcpd/DhcpMessage.h

    r76576 r79514  
    2424#include "Defs.h"
    2525#include <iprt/net.h>
    26 #include <string>
     26#include <iprt/cpp/ministring.h>
    2727#include "ClientId.h"
    2828#include "DhcpOptions.h"
    2929
    30 
    31 /* move to <iptr/net.h>? */
    32 #define DHCP_OPTION_OVERLOAD_MASK  0x3
    33 #define DHCP_OPTION_OVERLOAD_FILE  0x1
    34 #define DHCP_OPTION_OVERLOAD_SNAME 0x2
    3530
    3631
     
    4843    RTNETADDRIPV4   m_giaddr;
    4944
    50     std::string m_sname;
    51     std::string m_file;
     45    RTCString m_sname;
     46    RTCString m_file;
    5247
    5348    OptMessageType m_optMessageType;
  • trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.h

    r76576 r79514  
    2424#include "Defs.h"
    2525
    26 #include <string.h>
    27 
     26#include <iprt/asm.h>
    2827#include <iprt/err.h>
    29 #include <iprt/types.h>
    30 #include <iprt/asm.h>
    31 #include <iprt/stdint.h>
    3228#include <iprt/net.h>
    33 
    34 #include <string>
     29#include <iprt/string.h>
     30#include <iprt/cpp/ministring.h>
     31
    3532
    3633class DhcpClientMessage;
     
    105102    }
    106103
    107     static void append(octets_t &aDst, const std::string &str)
    108     {
    109         append(aDst, str.c_str(), str.size());
     104    static void append(octets_t &aDst, const RTCString &str)
     105    {
     106        append(aDst, str.c_str(), str.length());
    110107    }
    111108
     
    148145    }
    149146
    150     static void extract(std::string &aString, octets_t::const_iterator &pos, size_t cb)
     147#if 0 /** @todo fix me */
     148    static void extract(RTCString &aString, octets_t::const_iterator &pos, size_t cb)
    151149    {
    152150        aString.replace(aString.begin(), aString.end(), &pos[0], &pos[cb]);
    153151        pos += cb;
    154152    }
     153#endif
    155154
    156155
     
    362361{
    363362  public:
    364     typedef std::string value_t;
    365 
    366   protected:
    367     std::string m_String;
     363    typedef RTCString value_t;
     364
     365  protected:
     366    RTCString m_String;
    368367
    369368    explicit OptStringBase(uint8_t aOptCode)
    370369      : DhcpOption(aOptCode, false), m_String() {}
    371370
    372     OptStringBase(uint8_t aOptCode, const std::string &aOptString)
     371    OptStringBase(uint8_t aOptCode, const RTCString &aOptString)
    373372      : DhcpOption(aOptCode), m_String(aOptString) {}
    374373
     
    386385
    387386  public:
    388     std::string &value() { return m_String; }
    389     const std::string &value() const { return m_String; }
     387    RTCString &value() { return m_String; }
     388    const RTCString &value() const { return m_String; }
    390389
    391390  protected:
    392391    virtual ssize_t encodeValue(octets_t &dst) const
    393392    {
    394         if (!isLengthValid(m_String.size()))
     393        if (!isLengthValid(m_String.length()))
    395394            return -1;
    396395
    397396        append(dst, m_String);
    398         return m_String.size();
     397        return m_String.length();
    399398    }
    400399
     
    410409            return VERR_INVALID_PARAMETER;
    411410
    412         octets_t::const_iterator pos(src.begin());
    413         extract(m_String, pos, cb);
     411        int rc = m_String.assignNoThrow((char *)&src.front(), cb); /** @todo encoding. */
    414412        m_fPresent = true;
    415         return VINF_SUCCESS;
     413        return rc;
    416414    }
    417415};
     
    427425      : OptStringBase(optcode) {}
    428426
    429     explicit OptString(const std::string &aOptString)
     427    explicit OptString(const RTCString &aOptString)
    430428      : OptStringBase(optcode, aOptString) {}
    431429
  • trunk/src/VBox/NetworkServices/Dhcpd/VBoxNetDhcpd.cpp

    r79509 r79514  
    119119    int vmmInit();
    120120
    121     int ifInit(const std::string &strNetwork,
    122                const std::string &strTrunk = std::string(),
     121    int ifInit(const RTCString &strNetwork,
     122               const RTCString &strTrunk = RTCString(),
    123123               INTNETTRUNKTYPE enmTrunkType = kIntNetTrunkType_WhateverNone);
    124     int ifOpen(const std::string &strNetwork,
    125                const std::string &strTrunk,
     124    int ifOpen(const RTCString &strNetwork,
     125               const RTCString &strTrunk,
    126126               INTNETTRUNKTYPE enmTrunkType);
    127127    int ifGetBuf();
     
    254254
    255255
    256 int VBoxNetDhcpd::ifInit(const std::string &strNetwork,
    257                          const std::string &strTrunk,
     256int VBoxNetDhcpd::ifInit(const RTCString &strNetwork,
     257                         const RTCString &strTrunk,
    258258                         INTNETTRUNKTYPE enmTrunkType)
    259259{
     
    276276
    277277
    278 int VBoxNetDhcpd::ifOpen(const std::string &strNetwork,
    279                          const std::string &strTrunk,
     278int VBoxNetDhcpd::ifOpen(const RTCString &strNetwork,
     279                         const RTCString &strTrunk,
    280280                         INTNETTRUNKTYPE enmTrunkType)
    281281{
     
    284284
    285285    INTNETOPENREQ OpenReq;
    286     int rc;
     286    RT_ZERO(OpenReq);
    287287
    288288    OpenReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC;
     
    290290    OpenReq.pSession = m_pSession;
    291291
    292     strncpy(OpenReq.szNetwork, strNetwork.c_str(), sizeof(OpenReq.szNetwork));
    293     OpenReq.szNetwork[sizeof(OpenReq.szNetwork) - 1] = '\0';
    294 
    295     strncpy(OpenReq.szTrunk, strTrunk.c_str(), sizeof(OpenReq.szTrunk));
    296     OpenReq.szTrunk[sizeof(OpenReq.szTrunk) - 1] = '\0';
     292    int rc = RTStrCopy(OpenReq.szNetwork, sizeof(OpenReq.szNetwork), strNetwork.c_str());
     293    AssertRCReturn(rc, rc);
     294
     295    rc = RTStrCopy(OpenReq.szTrunk, sizeof(OpenReq.szTrunk), strTrunk.c_str());
     296    AssertRCReturn(rc, rc);
    297297
    298298    if (enmTrunkType != kIntNetTrunkType_Invalid)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette