Changeset 1200
- Timestamp:
- Dec 13, 2006, 9:32:54 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/io/libtransmission/fdlimit.c
r1199 r1200 61 61 * Local prototypes 62 62 **********************************************************************/ 63 static int ErrorFromErrno(); 63 64 static void CloseFile( tr_fd_t * f, int i ); 64 static int Check CanOpen( char * folder, char * name, int write );65 static int CheckFolder( char * folder, char * name, int write ); 65 66 66 67 … … 151 152 152 153 /* We'll need to open it, make sure that we can */ 153 if( ( ret = Check CanOpen( folder, name, write ) ) )154 if( ( ret = CheckFolder( folder, name, write ) ) ) 154 155 { 155 156 tr_err( "Can not open %s in %s (%d)", name, folder, ret ); … … 206 207 if( f->open[winner].file < 0 ) 207 208 { 208 tr_err( "Could not open %s in %s (%d)", name, folder, errno);209 ret = ErrorFromErrno(); 209 210 tr_lockUnlock( &f->lock ); 210 return TR_ERROR_IO_OTHER; 211 tr_err( "Could not open %s in %s (%d)", name, folder, ret ); 212 return ret; 211 213 } 212 214 snprintf( f->open[winner].folder, MAX_PATH_LENGTH, "%s", folder ); … … 339 341 * Local functions 340 342 **********************************************************************/ 343 344 /*********************************************************************** 345 * ErrorFromErrno 346 **********************************************************************/ 347 static int ErrorFromErrno() 348 { 349 if( errno == EACCES || errno == EROFS ) 350 return TR_ERROR_IO_PERMISSIONS; 351 return TR_ERROR_IO_OTHER; 352 } 341 353 342 354 /*********************************************************************** … … 363 375 364 376 /*********************************************************************** 365 * Check CanOpen377 * CheckFolder 366 378 *********************************************************************** 367 379 * 368 380 **********************************************************************/ 369 static int CheckCanOpen( char * folder, char * name, int write ) 370 { 371 return 0; 372 } 381 static int CheckFolder( char * folder, char * name, int write ) 382 { 383 struct stat sb; 384 char * path, * p, * s; 385 int ret = 0; 386 387 if( stat( folder, &sb ) || !S_ISDIR( sb.st_mode ) ) 388 { 389 return TR_ERROR_IO_PARENT; 390 } 391 392 asprintf( &path, "%s/%s", folder, name ); 393 394 p = path + strlen( folder ) + 1;; 395 while( ( s = strchr( p, '/' ) ) ) 396 { 397 *s = '\0'; 398 if( stat( folder, &sb ) ) 399 { 400 /* Sub-folder does not exist */ 401 if( !write ) 402 { 403 ret = TR_ERROR_IO_OTHER; 404 break; 405 } 406 if( mkdir( path, 0777 ) ) 407 { 408 ret = ErrorFromErrno(); 409 break; 410 } 411 } 412 else 413 { 414 if( !S_ISDIR( sb.st_mode ) ) 415 { 416 ret = TR_ERROR_IO_OTHER; 417 break; 418 } 419 } 420 *s = '/'; 421 } 422 free( path ); 423 424 return ret; 425 }
Note: See TracChangeset
for help on using the changeset viewer.