VirtualBox

Changeset 45350 in vbox for trunk/src/VBox/Runtime/r3


Ignore:
Timestamp:
Apr 4, 2013 8:22:25 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
84766
Message:

More ntBldSymDb.cpp work.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/init.cpp

    r44528 r45350  
    276276            return VERR_NO_MEMORY;
    277277
    278         for (int i = 0; i < cArgs; i++)
     278#ifdef RT_OS_WINDOWS
     279        /* HACK ALERT! Try convert from unicode versions if possible.
     280           Unfortunately for us, __wargv is only initialized if we have a
     281           unicode main function.  So, we have to use CommandLineToArgvW to get
     282           something similar. It should do the same conversion... :-) */
     283        int    cArgsW     = -1;
     284        PWSTR *papwszArgs = NULL;
     285        if (   papszOrgArgs == __argv
     286            && cArgs        == __argc
     287            && (papwszArgs = CommandLineToArgvW(GetCommandLineW(), &cArgsW)) != NULL )
    279288        {
    280             int rc = RTStrCurrentCPToUtf8(&papszArgs[i], papszOrgArgs[i]);
    281             if (RT_FAILURE(rc))
     289            AssertMsg(cArgsW == cArgs, ("%d vs %d\n", cArgsW, cArgs));
     290            for (int i = 0; i < cArgs; i++)
    282291            {
    283                 while (i--)
    284                     RTStrFree(papszArgs[i]);
    285                 RTMemFree(papszArgs);
    286                 return rc;
     292                int rc = RTUtf16ToUtf8(papwszArgs[i], &papszArgs[i]);
     293                if (RT_FAILURE(rc))
     294                {
     295                    while (i--)
     296                        RTStrFree(papszArgs[i]);
     297                    RTMemFree(papszArgs);
     298                    LocalFree(papwszArgs);
     299                    return rc;
     300                }
     301            }
     302            LocalFree(papwszArgs);
     303        }
     304        else
     305#endif
     306        {
     307            for (int i = 0; i < cArgs; i++)
     308            {
     309                int rc = RTStrCurrentCPToUtf8(&papszArgs[i], papszOrgArgs[i]);
     310                if (RT_FAILURE(rc))
     311                {
     312                    while (i--)
     313                        RTStrFree(papszArgs[i]);
     314                    RTMemFree(papszArgs);
     315                    return rc;
     316                }
    287317            }
    288318        }
     319
    289320        papszArgs[cArgs] = NULL;
    290321
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