smbfs patch for 2.1.60

Bill Hawes (whawes@star.net)
Thu, 30 Oct 1997 14:05:10 -0500


This is a multi-part message in MIME format.
--------------77EAB167EDB4461C89B29289
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I've finally resolved the problems with smbfs and Win 95 directories,
and the attached patch should work well with all Win* (and Samba)
servers.

The problem turned out to be with one of the performance changes I made:
to avoid repeatedly copying name strings, I returned a reference to the
name in the message packet, rather than copying it to a temporary
buffer. But the old code was adding a null byte to the names, even
though we already know its length. For certain name lengths there isn't
any room in the SMB message packet for a null, so it was overwriting the
length of the next entry. This then caused the directory scan to
repeatedly return the next name entry.

Enticement to beta testers: with this version you should note markedly
better performance, especially on directory scans.

Regards,
Bill
--------------77EAB167EDB4461C89B29289
Content-Type: application/x-gzip; name="smbfs_60-patch.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="smbfs_60-patch.gz"

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
--------------77EAB167EDB4461C89B29289--