Overview
Comment: | Added support for accessProc and mapped X_OK to directories |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
12ff77016f31b9a37c074390ed6cdd1b |
User & Date: | rkeene on 2019-09-14 04:56:19 |
Other Links: | manifest | tags |
Context
2019-09-14
| ||
05:24 | A bit of work on reference counting check-in: 5ae034e55e user: rkeene tags: trunk | |
04:56 | Added support for accessProc and mapped X_OK to directories check-in: 12ff77016f user: rkeene tags: trunk | |
03:59 | Added matchInDir support check-in: 5583d77f1c user: rkeene tags: trunk | |
Changes
Modified example/main.tcl from [575385fd45] to [4af4948972].
︙ | ︙ | |||
102 103 104 105 106 107 108 109 110 | error "EXPECTED \"$dir/*\", GOT $check" } set check [glob_verify -type d *] if {[llength $check] != 1} { error "EXPECTED 1, GOT [llength $check] ($check)" } puts "ALL TESTS PASSED" | > > > > > > > > > > > > > | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | error "EXPECTED \"$dir/*\", GOT $check" } set check [glob_verify -type d *] if {[llength $check] != 1} { error "EXPECTED 1, GOT [llength $check] ($check)" } set check [glob_verify -type d lib/*] if {[llength $check] != 1} { error "EXPECTED 1, GOT [llength $check] ($check)" } cd $dir cd lib glob * lappend auto_path ${dir}/lib package require hello puts "ALL TESTS PASSED" |
Modified xvfs-core.c from [46e5437872] to [102d0f3049].
︙ | ︙ | |||
27 28 29 30 31 32 33 34 | * Internal Core Utilities */ static const char *xvfs_relativePath(Tcl_Obj *path, struct xvfs_tclfs_instance_info *info) { const char *pathStr, *rootStr; const char *pathFinal; int pathLen, rootLen; pathStr = Tcl_GetStringFromObj(path, &pathLen); | > > > | > | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | * Internal Core Utilities */ static const char *xvfs_relativePath(Tcl_Obj *path, struct xvfs_tclfs_instance_info *info) { const char *pathStr, *rootStr; const char *pathFinal; int pathLen, rootLen; rootStr = Tcl_GetStringFromObj(info->mountpoint, &rootLen); pathStr = Tcl_GetStringFromObj(path, &pathLen); if (pathStr[0] != '/') { path = Tcl_ObjPrintf("%s/%s", Tcl_GetString(Tcl_FSGetCwd(NULL)), pathStr); pathStr = Tcl_GetStringFromObj(path, &pathLen); } if (pathLen < rootLen) { return(NULL); } if (memcmp(pathStr, rootStr, rootLen) != 0) { return(NULL); |
︙ | ︙ | |||
393 394 395 396 397 398 399 400 401 402 403 404 405 406 | retval = instanceInfo->fsInfo->getStatProc(pathStr, statBuf); if (retval < 0) { retval = -1; } return(retval); } static Tcl_Obj *xvfs_tclfs_listVolumes(struct xvfs_tclfs_instance_info *instanceInfo) { return(NULL); } static Tcl_Channel xvfs_tclfs_openFileChannel(Tcl_Interp *interp, Tcl_Obj *path, int mode, int permissions, struct xvfs_tclfs_instance_info *instanceInfo) { const char *pathStr; | > > > > > > > > > > > > > > > > > > > > > > > > > | 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 | retval = instanceInfo->fsInfo->getStatProc(pathStr, statBuf); if (retval < 0) { retval = -1; } return(retval); } static int xvfs_tclfs_access(Tcl_Obj *path, int mode, struct xvfs_tclfs_instance_info *instanceInfo) { const char *pathStr; Tcl_StatBuf fileInfo; int statRetVal; pathStr = xvfs_relativePath(path, instanceInfo); if (mode & W_OK) { return(-1); } statRetVal = instanceInfo->fsInfo->getStatProc(pathStr, &fileInfo); if (statRetVal < 0) { return(-1); } if (mode & X_OK) { if (!(fileInfo.st_mode & 040000)) { return(-1); } } return(0); } static Tcl_Obj *xvfs_tclfs_listVolumes(struct xvfs_tclfs_instance_info *instanceInfo) { return(NULL); } static Tcl_Channel xvfs_tclfs_openFileChannel(Tcl_Interp *interp, Tcl_Obj *path, int mode, int permissions, struct xvfs_tclfs_instance_info *instanceInfo) { const char *pathStr; |
︙ | ︙ | |||
425 426 427 428 429 430 431 | } if (!types) { return(1); } if (types->perm != TCL_GLOB_PERM_RONLY) { | | > > > > > > | 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 | } if (!types) { return(1); } if (types->perm != TCL_GLOB_PERM_RONLY) { if (types->perm & (TCL_GLOB_PERM_W | TCL_GLOB_PERM_HIDDEN)) { return(0); } if ((types->perm & TCL_GLOB_PERM_X) == TCL_GLOB_PERM_X) { if (!(fileInfo.st_mode & 040000)) { return(0); } } } if (types->type & (TCL_GLOB_TYPE_BLOCK | TCL_GLOB_TYPE_CHAR | TCL_GLOB_TYPE_PIPE | TCL_GLOB_TYPE_SOCK | TCL_GLOB_TYPE_LINK)) { return(0); } if ((types->type & TCL_GLOB_TYPE_DIR) == TCL_GLOB_TYPE_DIR) { |
︙ | ︙ | |||
535 536 537 538 539 540 541 542 543 544 545 546 547 548 | static int xvfs_tclfs_standalone_pathInFilesystem(Tcl_Obj *path, ClientData *dataPtr) { return(xvfs_tclfs_pathInFilesystem(path, dataPtr, &xvfs_tclfs_standalone_info)); } static int xvfs_tclfs_standalone_stat(Tcl_Obj *path, Tcl_StatBuf *statBuf) { return(xvfs_tclfs_stat(path, statBuf, &xvfs_tclfs_standalone_info)); } static Tcl_Obj *xvfs_tclfs_standalone_listVolumes(void) { return(xvfs_tclfs_listVolumes(&xvfs_tclfs_standalone_info)); } static Tcl_Channel xvfs_tclfs_standalone_openFileChannel(Tcl_Interp *interp, Tcl_Obj *path, int mode, int permissions) { return(xvfs_tclfs_openFileChannel(interp, path, mode, permissions, &xvfs_tclfs_standalone_info)); | > > > > | 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 | static int xvfs_tclfs_standalone_pathInFilesystem(Tcl_Obj *path, ClientData *dataPtr) { return(xvfs_tclfs_pathInFilesystem(path, dataPtr, &xvfs_tclfs_standalone_info)); } static int xvfs_tclfs_standalone_stat(Tcl_Obj *path, Tcl_StatBuf *statBuf) { return(xvfs_tclfs_stat(path, statBuf, &xvfs_tclfs_standalone_info)); } static int xvfs_tclfs_standalone_access(Tcl_Obj *path, int mode) { return(xvfs_tclfs_access(path, mode, &xvfs_tclfs_standalone_info)); } static Tcl_Obj *xvfs_tclfs_standalone_listVolumes(void) { return(xvfs_tclfs_listVolumes(&xvfs_tclfs_standalone_info)); } static Tcl_Channel xvfs_tclfs_standalone_openFileChannel(Tcl_Interp *interp, Tcl_Obj *path, int mode, int permissions) { return(xvfs_tclfs_openFileChannel(interp, path, mode, permissions, &xvfs_tclfs_standalone_info)); |
︙ | ︙ | |||
597 598 599 600 601 602 603 | xvfs_tclfs_standalone_fs.freeInternalRepProc = NULL; xvfs_tclfs_standalone_fs.internalToNormalizedProc = NULL; xvfs_tclfs_standalone_fs.createInternalRepProc = NULL; xvfs_tclfs_standalone_fs.normalizePathProc = NULL; xvfs_tclfs_standalone_fs.filesystemPathTypeProc = NULL; xvfs_tclfs_standalone_fs.filesystemSeparatorProc = NULL; xvfs_tclfs_standalone_fs.statProc = xvfs_tclfs_standalone_stat; | | | 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 | xvfs_tclfs_standalone_fs.freeInternalRepProc = NULL; xvfs_tclfs_standalone_fs.internalToNormalizedProc = NULL; xvfs_tclfs_standalone_fs.createInternalRepProc = NULL; xvfs_tclfs_standalone_fs.normalizePathProc = NULL; xvfs_tclfs_standalone_fs.filesystemPathTypeProc = NULL; xvfs_tclfs_standalone_fs.filesystemSeparatorProc = NULL; xvfs_tclfs_standalone_fs.statProc = xvfs_tclfs_standalone_stat; xvfs_tclfs_standalone_fs.accessProc = xvfs_tclfs_standalone_access; xvfs_tclfs_standalone_fs.openFileChannelProc = xvfs_tclfs_standalone_openFileChannel; xvfs_tclfs_standalone_fs.matchInDirectoryProc = xvfs_tclfs_standalone_matchInDir; xvfs_tclfs_standalone_fs.utimeProc = NULL; xvfs_tclfs_standalone_fs.linkProc = NULL; xvfs_tclfs_standalone_fs.listVolumesProc = xvfs_tclfs_standalone_listVolumes; xvfs_tclfs_standalone_fs.fileAttrStringsProc = NULL; xvfs_tclfs_standalone_fs.fileAttrsGetProc = NULL; |
︙ | ︙ |