Changeset 21916 for trunk/src/kernel32/handlenames.cpp
- Timestamp:
- Dec 18, 2011, 10:28:22 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:ignore
-
old new 1 bin 2 Makefile.inc 1 env.cmd 2 LocalConfig.kmk
-
-
Property svn:mergeinfo
set to
/branches/gcc-kmk merged eligible
- Property svn:ignore
-
trunk/src/kernel32/handlenames.cpp
r21302 r21916 27 27 #define INCL_DOSSEMAPHORES 28 28 #define INCL_DOSERRORS 29 #include <os2 .h>29 #include <os2wrap.h> 30 30 31 31 #include <stdlib.h> … … 53 53 PSZ pszTarget; 54 54 ULONG ulTargetLength; 55 55 56 56 // the alias prefix 57 57 PSZ pszSymbolicLink; … … 65 65 VMutex mtxHandleNameMgr; 66 66 CLinearList* pSymbolicLinks; 67 68 PHANDLENAME findSymbolicLink(P SZ pszSymbolicLink,67 68 PHANDLENAME findSymbolicLink(PCSZ pszSymbolicLink, 69 69 BOOL fCaseInsensitive); 70 71 PHANDLENAME findSymbolicLinkExact(P SZ pszSymbolicLink);72 70 71 PHANDLENAME findSymbolicLinkExact(PCSZ pszSymbolicLink); 72 73 73 public: 74 74 HandleNames(void); 75 75 ~HandleNames(); 76 77 BOOL addSymbolicLink(P SZ pszSymbolicLink,78 P SZ pszTarget);79 80 BOOL removeSymbolicLink(P SZ pszSymbolicLink);81 82 BOOL removeTarget(P SZ pszTarget);83 84 BOOL resolveName(P SZ pszName,85 PSZ pszTarget, 86 ULONG ulTargetLength, 76 77 BOOL addSymbolicLink(PCSZ pszSymbolicLink, 78 PCSZ pszTarget); 79 80 BOOL removeSymbolicLink(PCSZ pszSymbolicLink); 81 82 BOOL removeTarget(PCSZ pszTarget); 83 84 BOOL resolveName(PCSZ pszName, 85 PSZ pszTarget, 86 ULONG ulTargetLength, 87 87 BOOL fCaseInsensitive); 88 88 }; … … 107 107 * Name : HandleNames::HandleNames 108 108 * Purpose : Constructor for handle name mapper 109 * Parameters: 110 * Variables : 111 * Result : 109 * Parameters: 110 * Variables : 111 * Result : 112 112 * Remark : 113 113 * Status : … … 127 127 * Name : HandleNames::~HandleNames 128 128 * Purpose : destructor for handle name mapper 129 * Parameters: 130 * Variables : 131 * Result : 129 * Parameters: 130 * Variables : 131 * Result : 132 132 * Remark : 133 133 * Status : … … 148 148 * BOOL fCaseInsensitive - TRUE for a case-insensitive lookup 149 149 * Variables : 150 * Result : 150 * Result : 151 151 * Remark : The comparison here is not meant to be "identity" but 152 152 * "startsWith" because for the name resolver, the first … … 161 161 *****************************************************************************/ 162 162 163 PHANDLENAME HandleNames::findSymbolicLink(P SZ pszSymbolicLink,163 PHANDLENAME HandleNames::findSymbolicLink(PCSZ pszSymbolicLink, 164 164 BOOL fCaseInsensitive) 165 165 { … … 170 170 PHANDLENAME pHandleName = (PHANDLENAME)pLE->pObject; 171 171 int cch = pHandleName->ulSymbolicLinkLength; //strlen(pHandleName->pszSymbolicLink); 172 172 173 173 /* pszSymbolicLink must end a path component at cch. */ 174 174 if ( cch <= cchSymbolicLink … … 186 186 } 187 187 } 188 188 189 189 // skip to the next entry 190 190 pLE = pSymbolicLinks->getNext(pLE); 191 191 } 192 192 193 193 // not found 194 194 return NULL; … … 202 202 * BOOL fCaseInsensitive - TRUE for a case-insensitive lookup 203 203 * Variables : 204 * Result : 204 * Result : 205 205 * Remark : The comparison here is not meant to be "identity" but 206 206 * "startsWith" because for the name resolver, the first … … 215 215 *****************************************************************************/ 216 216 217 PHANDLENAME HandleNames::findSymbolicLinkExact(P SZ pszSymbolicLink)217 PHANDLENAME HandleNames::findSymbolicLinkExact(PCSZ pszSymbolicLink) 218 218 { 219 219 PLINEARLISTENTRY pLE = pSymbolicLinks->getFirst(); … … 221 221 { 222 222 PHANDLENAME pHandleName = (PHANDLENAME)pLE->pObject; 223 223 224 224 if (strcmp(pHandleName->pszSymbolicLink, pszSymbolicLink) == 0) 225 225 return pHandleName; 226 226 227 227 // skip to the next entry 228 228 pLE = pSymbolicLinks->getNext(pLE); 229 229 } 230 230 231 231 // not found 232 232 return NULL; … … 248 248 *****************************************************************************/ 249 249 250 BOOL HandleNames::addSymbolicLink(P SZ pszSymbolicLink,251 P SZ pszTarget)250 BOOL HandleNames::addSymbolicLink(PCSZ pszSymbolicLink, 251 PCSZ pszTarget) 252 252 { 253 253 BOOL rc = TRUE; 254 254 255 255 mtxHandleNameMgr.enter(); 256 256 257 257 // 1 - find symbolic link with same name 258 258 PHANDLENAME pHandleName = findSymbolicLinkExact(pszSymbolicLink); 259 260 // 2 - if found 259 260 // 2 - if found 261 261 if (NULL != pHandleName) 262 262 { … … 264 264 if (strcmp(pszTarget, pHandleName->pszTarget) == 0) 265 265 rc = TRUE; 266 266 267 267 // 2.2 - and targets are identical, return TRUE 268 268 else … … 297 297 pHandleName->ulTargetLength = strlen(pszTarget); 298 298 pHandleName->ulSymbolicLinkLength = strlen(pszSymbolicLink); 299 299 300 300 // OK, finally add to the list 301 301 pSymbolicLinks->addFirst(pHandleName); … … 304 304 } 305 305 } 306 306 307 307 mtxHandleNameMgr.leave(); 308 308 309 309 return rc; 310 310 } … … 312 312 313 313 /***************************************************************************** 314 * Name : 315 * Purpose : 316 * Parameters: 314 * Name : 315 * Purpose : 316 * Parameters: 317 317 * Variables : 318 318 * Result : TRUE if successful, FALSE if otherwise … … 323 323 *****************************************************************************/ 324 324 325 BOOL HandleNames::removeSymbolicLink(P SZ pszSymbolicLink)325 BOOL HandleNames::removeSymbolicLink(PCSZ pszSymbolicLink) 326 326 { 327 327 BOOL rc = TRUE; 328 328 329 329 mtxHandleNameMgr.enter(); 330 330 331 331 // 1 - find symbolic name 332 332 PHANDLENAME pHandleName = findSymbolicLinkExact(pszSymbolicLink); … … 337 337 // 2 - remove the link 338 338 pSymbolicLinks->removeObject(pHandleName); 339 339 340 340 if (NULL != pHandleName->pszSymbolicLink ) 341 341 free( pHandleName->pszSymbolicLink ); 342 342 343 343 if (NULL != pHandleName->pszTarget ) 344 344 free( pHandleName->pszTarget ); 345 345 346 346 free( pHandleName ); 347 347 } 348 348 349 349 mtxHandleNameMgr.leave(); 350 350 351 351 return rc; 352 352 } … … 365 365 *****************************************************************************/ 366 366 367 BOOL HandleNames::removeTarget(P SZ pszTarget)367 BOOL HandleNames::removeTarget(PCSZ pszTarget) 368 368 { 369 369 BOOL rc = FALSE; 370 370 371 371 mtxHandleNameMgr.enter(); 372 372 373 373 // iterate over all registered symbolic links 374 374 PLINEARLISTENTRY pLE = pSymbolicLinks->getFirst(); … … 376 376 { 377 377 PHANDLENAME pHandleName = (PHANDLENAME)pLE->pObject; 378 378 379 379 // check the name 380 380 if (strcmp(pszTarget, pHandleName->pszTarget) == 0) 381 381 { 382 382 pSymbolicLinks->removeElement(pLE); 383 383 384 384 // at least one removal succeeded 385 385 rc = TRUE; 386 386 } 387 387 } 388 388 389 389 mtxHandleNameMgr.leave(); 390 390 391 391 return rc; 392 392 } … … 403 403 * Variables : 404 404 * Result : FALSE if name was not modified, TRUE if name was resolved 405 * Remark : This is a very easy, cheesy implementation of a pathname 405 * Remark : This is a very easy, cheesy implementation of a pathname 406 406 * cracker. Should be sufficient at the moment though. 407 407 * Status : … … 410 410 *****************************************************************************/ 411 411 412 BOOL HandleNames::resolveName(P SZ pszName,413 PSZ pszTarget, 412 BOOL HandleNames::resolveName(PCSZ pszName, 413 PSZ pszTarget, 414 414 ULONG ulTargetLength, 415 415 BOOL fCaseInsensitive) 416 416 { 417 417 BOOL rc = FALSE; 418 418 419 419 mtxHandleNameMgr.enter(); 420 420 421 421 // scan through the names (case-insensitive) 422 422 PHANDLENAME pHandleName = findSymbolicLink(pszName, fCaseInsensitive); … … 425 425 // rebuild the target name 426 426 int iNameLength = strlen(pszName); 427 427 428 428 // first copy the resolved target name fragment 429 429 strncpy(pszTarget, 430 430 pHandleName->pszTarget, 431 431 ulTargetLength); 432 432 433 433 // now append the rest of the specified name with the 434 434 // now resolved symbolic cut away … … 437 437 pszName + pHandleName->ulSymbolicLinkLength, 438 438 ulTargetLength - pHandleName->ulTargetLength); 439 439 440 440 // tell caller the name has been resolved 441 441 // (is different from the source name) 442 442 rc = TRUE; 443 443 } 444 444 445 445 mtxHandleNameMgr.leave(); 446 446 447 447 return rc; 448 448 } … … 454 454 * Exported Wrapper Functions 455 455 *****************************************************************************/ 456 457 BOOL HandleNamesResolveName(P SZ pszName,456 457 BOOL HandleNamesResolveName(PCSZ pszName, 458 458 PSZ pszTarget, 459 459 ULONG ulTargetLength, … … 467 467 468 468 469 BOOL HandleNamesAddSymbolicLink(P SZ pszSymbolicLink,470 P SZ pszTarget)469 BOOL HandleNamesAddSymbolicLink(PCSZ pszSymbolicLink, 470 PCSZ pszTarget) 471 471 { 472 472 return pHandleNameMgr->addSymbolicLink(pszSymbolicLink, 473 473 pszTarget); 474 474 } 475 476 477 BOOL HandleNamesRemoveSymbolicLink(P SZ pszSymbolicLink)475 476 477 BOOL HandleNamesRemoveSymbolicLink(PCSZ pszSymbolicLink) 478 478 { 479 479 return pHandleNameMgr->removeSymbolicLink(pszSymbolicLink); 480 480 } 481 482 483 BOOL HandleNamesRemoveTarget(P SZ pszTarget)481 482 483 BOOL HandleNamesRemoveTarget(PCSZ pszTarget) 484 484 { 485 485 return pHandleNameMgr->removeTarget(pszTarget);
Note:
See TracChangeset
for help on using the changeset viewer.