Tags: obarthel/amiga-smbfs
Tags
smbfs 2.23 (13.6.2021) - Small change to smb_discard_netbios_frames() for better debugging and profiling. - Integrated Tygre's proof-of-concept changes for much improved 16 bit Unicode drawer and file name support. Thank you very much! These changes allow for file and drawer names to be used which smbfs previously could not adapt for the Amiga (they would be omitted from drawer listings). Please note that this feature requires more memory since every such file or drawer name will have to be stored for reference. This memory will not be released until smbfs has shut down, even if the files or drawers on the server's side, corresponding to what smbfs remembers, have already been deleted or renamed. Also, if you rename or delete such files or drawers through smbfs, the memory allocated for them is not yet released (this will have to follow in another release). In order to make these file and drawer names accessible, smbfs will make it appear as if they had different names. These new names are "aliases" which only smbfs uses and likely will not match the originals.
Updated to version 2.22 The memory pool initialization should have happened after having initialized the command line argument data, not before it. I broke the automatic device name ("smbfs0:" .. "smbfs99:") initialization at some point. Ouch :-( The revised code now starts with "smbfs:", then tries "smbfs0:" through "smbfs99:" until it has picked a unique file system device name. This is consistent with the old behaviour of trying to use "smbfs:" if no device specific name has been requested.
Updated to version 2.21 Added more diagnostic output and debug functionality, e.g. regarding how many directory caches are currently being used. Long name directory scanning is a bit more paranoid when retrying a scan operation which might have been triggered by the server connection getting dropped. Added the new READONLY option (why stop at 47 options when you can have 48?) which makes the file system read-only by default and does not require you to use the "Lock" shell command to achieve the same effect. Note that the shell "Lock" command cannot be used to turn the read-only mode off again. Added support for the smb:// URI scheme, which means that instead of using "smbfs username=barney password=secret domain=workgroup //nas:445/share" you can now use "smbfs smb://workgroup;barney:secret@nas:445/share" instead. It is a bit shorter than the alternative and has an advantage in allowing you to reuse smb:// URLs which you know work well on other systems.
Updated to version 2.20 If the Examine/ExNext/ExAll functions need to restart directory scanning, the cache maintained by the smbfs directory reader is now always cleared. Removed the directory cache expiration time feature, along with the just-introduced CACHEEXPIRES option. The context in which the expiration time was used did not justify it as a feature. It looked more like a bug... Rewrote the smba_readdir() function to perform its only task in a much simpler manner. It now either fills the directory cache or retrieves the cache entries to be delivered to the caller, resuming the retrieval at a predefined position if required.
Updated to version 2.19 smb_proc_readdir_short() now updates the scan resume information for every directory entry it can process and actually uses the scan resume information when asked to resume scanning. If the directory cache becomes stale before the contents have been processed, scanning will have to be restarted. smbfs now tells the server that the scan operation has been aborted before it is started again. Directory scanning in combination with deletion operations can collapse if the directory cache becomes stale before all the relevant entries have been processed. You can now tune how long the cache will remain active, which previously was a period of 5 seconds. The current default is 10 seconds, which definitely helps. Use the new CACHEEXPIRES option to change how long the cache is considered good enough.
Updated to version 2.18 The ERROROUTPUT option as released in version 2.17 did not work at all. I wonder how I managed to test it successfully :-/ Rewrote the smb_proc_readdir_short() and smb_proc_readdir_long() functions so that they tell the server exactly how many directory entries they are able to receive. Previously, the server could deliver more, with interesting consequences. smb_proc_readdir_long() now verifies that the server's response parameter and data are in order, and it also makes sure not to read more from the response data buffer than there is available when decoding directory entries. smb_proc_readdir_long() now updates the scan resume information for every directory entry it can process. smb_proc_readdir_long() now actually uses the scan resume information when asked to resume scanning. This means, for example, if the directory cache only has room for 60 entries, then smb_proc_readdir_long() will read up to 60 entries, get called again, and resume filling the cache with the next entry provided by the server. This never worked anywhere near correctly before.
Updated to version 2.17 Simplified the cache table "aging", removing duplicate code. Verified that the CACHETABLE settings do have a positive effect on the problematic "delete directory-name all" case which almost always failed to delete the entire directory tree.
Updated to version 2.16 Simplified the directory cache size change functionality. Added the CACHETABLES option, which tells smbfs how many individual directory caches it should be using (default: 1). Each directory cache can be used by one directory at a time. If you are deleting a directory tree, including subdirectories, etc. then smbfs will be limited in keeping track of what it deleted, and what directory is next up for deletion. With only a single directory cache, it will be limited to deleting a subdirectory's contents, but forget about its parent directory, for example, and thereby end up skipping entries which should have been deleted. This can be annoying because you will have to repeat the delete operation several times over until everything has been deleted. Increasing the number of cache tables can help, at the expense of extra memory. Increasing the number of cache tables can also improve performance if several programs are examining the contents of directories at the same time.
Updated to version 2.14 Documented the directory cache a bit better, including the reason why the cache may have been invalidated while the directory contents were being read. The directory read operation now verifies that it does not run out of cache entries while it is processing new directory records it received from the server. The directory read operation now both detects whether or not the last entry has been read, this information is now also provided to the function which retrieved the directory entries. This change is in support of improved directory entry caching. The directory cache now keeps better track of what's actually in it. If a directory entry could not be extracted and decoded, the number of directory entries read would not match the number of entries available from the cache, for example. A flag now tracks if the directory cache is valid or not. Previously, checking for a valid cache involved looking at a NULL pointer. If allocating memory for the directory cache failed partly, then there may have been invalid string pointers in the cache table, leading to a crash when trying to release the cache. Fixed. Adding another entry to the cache, invalidating the cache or resetting the cache now all use dedicated functions instead of directly manipulating the assorted data structures.
PreviousNext