Changeset 80764 in vbox for trunk/src/VBox
- Timestamp:
- Sep 13, 2019 6:52:50 AM (5 years ago)
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/generic/env-generic.cpp
r76553 r80764 452 452 453 453 454 RTDECL(int) RTEnvPutEx(RTENV Env, const char *pszVarEqualValue)455 {456 int rc;457 AssertPtrReturn(pszVarEqualValue, VERR_INVALID_POINTER);458 const char *pszEq = strchr(pszVarEqualValue, '=');459 if (!pszEq)460 rc = RTEnvUnsetEx(Env, pszVarEqualValue);461 else462 {463 /*464 * Make a copy of the variable name so we can terminate it465 * properly and then pass the request on to RTEnvSetEx.466 */467 const char *pszValue = pszEq + 1;468 469 size_t cchVar = pszEq - pszVarEqualValue;470 Assert(cchVar < 1024);471 char *pszVar = (char *)alloca(cchVar + 1);472 memcpy(pszVar, pszVarEqualValue, cchVar);473 pszVar[cchVar] = '\0';474 475 rc = RTEnvSetEx(Env, pszVar, pszValue);476 }477 return rc;478 }479 RT_EXPORT_SYMBOL(RTEnvPutEx);480 481 482 454 /** 483 455 * Appends an already allocated string to papszEnv. … … 521 493 522 494 523 RTDECL(int) RTEnvSetEx(RTENV Env, const char *pszVar, const char *pszValue) 524 { 525 AssertPtrReturn(pszVar, VERR_INVALID_POINTER); 526 AssertReturn(*pszVar, VERR_INVALID_PARAMETER); 527 AssertPtrReturn(pszValue, VERR_INVALID_POINTER); 528 AssertReturn(strchr(pszVar, '=') == NULL, VERR_ENV_INVALID_VAR_NAME); 529 495 /** 496 * Worker for RTEnvSetEx and RTEnvPutEx. 497 */ 498 static int rtEnvSetExWorker(RTENV Env, const char *pchVar, size_t cchVar, const char *pszValue) 499 { 530 500 int rc; 531 501 if (Env == RTENV_DEFAULT) 532 502 { 533 503 #ifdef RT_OS_WINDOWS 534 rc = RTEnvSetUtf8(pszVar, pszValue); 504 extern int rtEnvSetUtf8Worker(const char *pchVar, size_t cchVar, const char *pszValue); 505 rc = rtEnvSetUtf8Worker(pchVar, cchVar, pszValue); 535 506 #else 536 507 /* … … 540 511 */ 541 512 char *pszVarOtherCP; 542 rc = RTStrUtf8ToCurrentCP (&pszVarOtherCP, pszVar);513 rc = RTStrUtf8ToCurrentCPEx(&pszVarOtherCP, pchVar, cchVar); 543 514 if (RT_SUCCESS(rc)) 544 515 { … … 563 534 * Create the variable string. 564 535 */ 565 const size_t cchVar = strlen(pszVar);566 536 const size_t cchValue = strlen(pszValue); 567 537 char *pszEntry = (char *)RTMemAlloc(cchVar + cchValue + 2); 568 538 if (pszEntry) 569 539 { 570 memcpy(pszEntry, p szVar, cchVar);540 memcpy(pszEntry, pchVar, cchVar); 571 541 pszEntry[cchVar] = '='; 572 542 memcpy(&pszEntry[cchVar + 1], pszValue, cchValue + 1); … … 580 550 size_t iVar; 581 551 for (iVar = 0; iVar < pIntEnv->cVars; iVar++) 582 if ( !pIntEnv->pfnCompare(pIntEnv->papszEnv[iVar], p szVar, cchVar)552 if ( !pIntEnv->pfnCompare(pIntEnv->papszEnv[iVar], pchVar, cchVar) 583 553 && ( pIntEnv->papszEnv[iVar][cchVar] == '=' 584 554 || pIntEnv->papszEnv[iVar][cchVar] == '\0') ) … … 610 580 } 611 581 return rc; 582 } 583 584 585 RTDECL(int) RTEnvSetEx(RTENV Env, const char *pszVar, const char *pszValue) 586 { 587 AssertPtrReturn(pszVar, VERR_INVALID_POINTER); 588 AssertReturn(*pszVar, VERR_INVALID_PARAMETER); 589 AssertPtrReturn(pszValue, VERR_INVALID_POINTER); 590 size_t const cchVar = strlen(pszVar); 591 AssertReturn(memchr(pszVar, '=', cchVar) == NULL, VERR_ENV_INVALID_VAR_NAME); 592 593 return rtEnvSetExWorker(Env, pszVar, cchVar, pszValue); 612 594 } 613 595 RT_EXPORT_SYMBOL(RTEnvSetEx); … … 700 682 } 701 683 RT_EXPORT_SYMBOL(RTEnvUnsetEx); 684 685 686 RTDECL(int) RTEnvPutEx(RTENV Env, const char *pszVarEqualValue) 687 { 688 int rc; 689 AssertPtrReturn(pszVarEqualValue, VERR_INVALID_POINTER); 690 const char *pszEq = strchr(pszVarEqualValue, '='); 691 if (!pszEq) 692 rc = RTEnvUnsetEx(Env, pszVarEqualValue); 693 else 694 rc = rtEnvSetExWorker(Env, pszVarEqualValue, pszEq - pszVarEqualValue, pszEq + 1); 695 return rc; 696 } 697 RT_EXPORT_SYMBOL(RTEnvPutEx); 702 698 703 699 -
trunk/src/VBox/Runtime/r3/posix/utf8-posix.cpp
r76553 r80764 490 490 491 491 492 RTR3DECL(int) RTStr CurrentCPToUtf8Tag(char **ppszString, const char *pszString, const char *pszTag)492 RTR3DECL(int) RTStrUtf8ToCurrentCPExTag(char **ppszString, const char *pszString, size_t cchString, const char *pszTag) 493 493 { 494 494 Assert(ppszString); … … 497 497 498 498 /* 499 * A ttempt with UTF-8 length of 2x the native length.500 */ 501 size_t cch = strlen(pszString);502 if (cch <= 0)499 * Assume result string length is not longer than UTF-8 string. 500 */ 501 cchString = RTStrNLen(pszString, cchString); 502 if (cchString < 1) 503 503 { 504 504 /* zero length string passed. */ … … 508 508 return VERR_NO_TMP_MEMORY; 509 509 } 510 return rtStrConvertWrapper(pszString, cchString, "UTF-8", ppszString, 0, "", 1, RTSTRICONV_UTF8_TO_LOCALE); 511 } 512 513 514 RTR3DECL(int) RTStrCurrentCPToUtf8Tag(char **ppszString, const char *pszString, const char *pszTag) 515 { 516 Assert(ppszString); 517 Assert(pszString); 518 *ppszString = NULL; 519 520 /* 521 * Attempt with UTF-8 length of 2x the native length. 522 */ 523 size_t cch = strlen(pszString); 524 if (cch <= 0) 525 { 526 /* zero length string passed. */ 527 *ppszString = (char *)RTMemTmpAllocZTag(sizeof(char), pszTag); 528 if (*ppszString) 529 return VINF_SUCCESS; 530 return VERR_NO_TMP_MEMORY; 531 } 510 532 return rtStrConvertWrapper(pszString, cch, "", ppszString, 0, "UTF-8", 2, RTSTRICONV_LOCALE_TO_UTF8); 511 533 } -
trunk/src/VBox/Runtime/r3/win/env-win.cpp
r76553 r80764 173 173 } 174 174 175 RTDECL(int) RTEnvSetUtf8(const char *pszVar, const char *pszValue) 176 { 177 AssertReturn(strchr(pszVar, '=') == NULL, VERR_ENV_INVALID_VAR_NAME); 178 175 176 /** 177 * Worker common to RTEnvSetUtf8() and rtEnvSetExWorker(). 178 */ 179 int rtEnvSetUtf8Worker(const char *pchVar, size_t cchVar, const char *pszValue) 180 { 179 181 size_t cwcVar; 180 int rc = RTStrCalcUtf16LenEx(p szVar, RTSTR_MAX, &cwcVar);182 int rc = RTStrCalcUtf16LenEx(pchVar, cchVar, &cwcVar); 181 183 if (RT_SUCCESS(rc)) 182 184 { 183 185 size_t cwcValue; 184 rc = RTStrCalcUtf16LenEx(pszVa r, RTSTR_MAX, &cwcValue);186 rc = RTStrCalcUtf16LenEx(pszValue, RTSTR_MAX, &cwcValue); 185 187 if (RT_SUCCESS(rc)) 186 188 { … … 188 190 if (pwszTmp) 189 191 { 190 rc = RTStrToUtf16Ex(p szVar, RTSTR_MAX, &pwszTmp, cwcVar + 1, NULL);192 rc = RTStrToUtf16Ex(pchVar, cchVar, &pwszTmp, cwcVar + 1, NULL); 191 193 if (RT_SUCCESS(rc)) 192 194 { … … 212 214 213 215 216 RTDECL(int) RTEnvSetUtf8(const char *pszVar, const char *pszValue) 217 { 218 size_t cchVar = strlen(pszVar); 219 AssertReturn(memchr(pszVar, '=', cchVar) == NULL, VERR_ENV_INVALID_VAR_NAME); 220 return rtEnvSetUtf8Worker(pszVar, cchVar, pszValue); 221 } 222 223 214 224 RTDECL(int) RTEnvUnsetBad(const char *pszVar) 215 225 { -
trunk/src/VBox/Runtime/r3/win/utf8-win.cpp
r76553 r80764 39 39 40 40 41 41 42 RTR3DECL(int) RTStrUtf8ToCurrentCPTag(char **ppszString, const char *pszString, const char *pszTag) 43 { 44 return RTStrUtf8ToCurrentCPExTag(ppszString, pszString, RTSTR_MAX, pszTag); 45 } 46 47 48 RTR3DECL(int) RTStrUtf8ToCurrentCPExTag(char **ppszString, const char *pszString, size_t cchString, const char *pszTag) 42 49 { 43 50 Assert(ppszString); … … 47 54 * Check for zero length input string. 48 55 */ 49 if ( !*pszString)56 if (cchString < 1 || !*pszString) 50 57 { 51 58 *ppszString = (char *)RTMemTmpAllocZTag(sizeof(char), pszTag); … … 61 68 */ 62 69 PRTUTF16 pwszString = NULL; 63 int rc = RTStrToUtf16 (pszString, &pwszString);70 int rc = RTStrToUtf16Ex(pszString, cchString, &pwszString, 0, NULL); 64 71 if (RT_FAILURE(rc)) 65 72 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.