Changeset 3017 in kBuild
- Timestamp:
- Jan 7, 2017 12:06:03 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/dir-nt-bird.c
r2948 r3017 456 456 457 457 458 /* duplicated in kWorker.c */ 458 /* duplicated in kWorker.c 459 * Note! Tries avoid to produce a result with spaces since they aren't supported by makefiles. */ 459 460 void nt_fullpath_cached(const char *pszPath, char *pszFull, size_t cbFull) 460 461 { … … 471 472 PKFSDIR pAncestor; 472 473 473 pszFull[off + pPathObj->cchName] = '\0';474 pszFull[offEnd] = '\0'; 474 475 memcpy(&pszFull[off], pPathObj->pszName, pPathObj->cchName); 475 476 … … 480 481 kHlpAssert(pAncestor->Obj.cchName > 0); 481 482 pszFull[--off] = '/'; 482 off -= pAncestor->Obj.cchName; 483 kHlpAssert(pAncestor->Obj.cchParent == off); 484 memcpy(&pszFull[off], pAncestor->Obj.pszName, pAncestor->Obj.cchName); 483 #ifdef KFSCACHE_CFG_SHORT_NAMES 484 if ( pAncestor->Obj.pszName == pAncestor->Obj.pszShortName 485 || memchr(pAncestor->Obj.pszName, ' ', pAncestor->Obj.cchName) == NULL) 486 #endif 487 { 488 off -= pAncestor->Obj.cchName; 489 kHlpAssert(pAncestor->Obj.cchParent == off); 490 memcpy(&pszFull[off], pAncestor->Obj.pszName, pAncestor->Obj.cchName); 491 } 492 #ifdef KFSCACHE_CFG_SHORT_NAMES 493 else 494 { 495 /* 496 * The long name constains a space, so use the alternative name instead. 497 * Most likely the alternative name differs in length, usually it's shorter, 498 * so we have to shift the part of the path we've already assembled 499 * accordingly. 500 */ 501 KSSIZE cchDelta = (KSSIZE)pAncestor->Obj.cchShortName - (KSSIZE)pAncestor->Obj.cchName; 502 if (cchDelta != 0) 503 { 504 if ((KSIZE)(offEnd + cchDelta) >= cbFull) 505 goto l_fallback; 506 memmove(&pszFull[off + cchDelta], &pszFull[off], offEnd + 1 - off); 507 off += cchDelta; 508 offEnd += cchDelta; 509 } 510 off -= pAncestor->Obj.cchShortName; 511 kHlpAssert(pAncestor->Obj.cchParent == off); 512 memcpy(&pszFull[off], pAncestor->Obj.pszShortName, pAncestor->Obj.cchShortName); 513 } 514 #endif 485 515 } 486 516 kFsCacheObjRelease(g_pFsCache, pPathObj); … … 492 522 if ((size_t)pPathObj->cchName + 1 < cbFull) 493 523 { 524 /* Assume no spaces here. */ 494 525 memcpy(pszFull, pPathObj->pszName, pPathObj->cchName); 495 526 pszFull[pPathObj->cchName] = '/'; … … 502 533 503 534 /* do fallback. */ 535 #ifdef KFSCACHE_CFG_SHORT_NAMES 536 l_fallback: 537 #endif 504 538 kHlpAssertFailed(); 505 539 kFsCacheObjRelease(g_pFsCache, pPathObj);
Note:
See TracChangeset
for help on using the changeset viewer.