Ticket #8573: amigaos4-fs.patch
File amigaos4-fs.patch, 2.9 KB (added by , 18 years ago) |
---|
-
backends/fs/amigaos4/amigaos4-fs.cpp
103 103 104 104 int len = 0, offset = p.size(); 105 105 106 assert(offset > 0);106 //assert(offset > 0); 107 107 108 if (offset <= 0) { 109 debug(6, "Bad offset"); 110 return; 111 } 112 108 113 _sPath = p; 109 114 110 115 // Extract last component from path … … 148 153 _bIsValid = true; 149 154 } 150 155 } 156 157 IDOS->UnLock(pLock); 151 158 } 152 159 153 160 IDOS->FreeDosObject(DOS_FIB, fib); … … 329 336 } 330 337 331 338 AbstractFilesystemNode *AmigaOSFilesystemNode::child(const String &n) const { 332 assert(_bIsDirectory); 339 340 if (!_bIsDirectory) { 341 debug(6, "Not a directory"); 342 return 0; 343 } 344 333 345 String newPath(_sPath); 346 334 347 if (_sPath.lastChar() != '/') 335 348 newPath += '/'; 349 336 350 newPath += n; 351 352 BPTR lock = IDOS->Lock(newPath.c_str(), SHARED_LOCK); 353 354 if (!lock) { 355 debug(6, "Bad path"); 356 return 0; 357 } 358 359 IDOS->UnLock(lock); 360 337 361 return new AmigaOSFilesystemNode(newPath); 338 362 } 339 363 … … 343 367 AbstractFSList myList; 344 368 345 369 const uint32 kLockFlags = LDF_READ | LDF_VOLUMES; 346 char n[MAXPATHLEN];370 char buffer[MAXPATHLEN]; 347 371 348 372 struct DosList *dosList = IDOS->LockDosList(kLockFlags); 349 373 if (!dosList) { … … 352 376 return myList; 353 377 } 354 378 355 356 379 dosList = IDOS->NextDosEntry(dosList, LDF_VOLUMES); 357 380 while (dosList) { 358 381 if (dosList->dol_Type == DLT_VOLUME && 359 382 dosList->dol_Name && 360 383 dosList->dol_Task) { 361 const char *volName = (const char *)BADDR(dosList->dol_Name)+1; 362 const char *devName = (const char *)((struct Task *)dosList->dol_Task->mp_SigTask)->tc_Node.ln_Name; 384 //const char *volName = (const char *)BADDR(dosList->dol_Name)+1; 385 386 // Copy name to buffer 387 IDOS->CopyStringBSTRToC(dosList->dol_Name, buffer, MAXPATHLEN); 363 388 364 strcpy(n, volName); 365 strcat(n, ":"); 389 //const char *devName = (const char *)((struct Task *)dosList->dol_Task->mp_SigTask)->tc_Node.ln_Name; 366 390 367 BPTR volumeLock = IDOS->Lock((STRPTR)n, SHARED_LOCK); 391 // Volume name + '\0' 392 char *volName = new char [strlen(buffer) + 1]; 393 394 strcpy(volName, buffer); 395 396 strcat(buffer, ":"); 397 398 BPTR volumeLock = IDOS->Lock((STRPTR)buffer, SHARED_LOCK); 368 399 if (volumeLock) { 369 sprintf(n, "%s (%s)", volName, devName); 370 AmigaOSFilesystemNode *entry = new AmigaOSFilesystemNode(volumeLock, n); 400 401 char *devName = new char [MAXPATHLEN]; 402 403 // Find device name 404 IDOS->DevNameFromLock(volumeLock, devName, MAXPATHLEN, DN_DEVICEONLY); 405 406 sprintf(buffer, "%s (%s)", volName, devName); 407 408 delete [] devName; 409 410 AmigaOSFilesystemNode *entry = new AmigaOSFilesystemNode(volumeLock, buffer); 371 411 if (entry) { 372 412 if (entry->isValid()) 373 413 myList.push_back(entry); 374 414 else 375 415 delete entry; 376 416 } 417 377 418 IDOS->UnLock(volumeLock); 378 419 } 420 421 delete [] volName; 379 422 } 380 423 dosList = IDOS->NextDosEntry(dosList, LDF_VOLUMES); 381 424 }