proposal: libsmbclient functionality addition

Andrew Bartlett abartlet at samba.org
Wed Jun 19 05:44:04 GMT 2002


Tom Jansen wrote:
> 
> > > o Will all smbc_* functions get the handle when called ?
> >
> > Yes, they have to be given the file handle.
> >
> > The major issue here is that this will break all existing programs. I
> > have spent some time trying to think of a way to avoid this breakage, but
> > fear that I cannot do it easily.
> 
> Ehm... I've given it some thought too and came up with the following:
> 
> smbc_set_client(struct smbc_handle * handle)
> {
>   current_handle = handle;
> }
> 
> and make all the functions use current_handle as the handle.

NO.

Please NO.  I *really* would like to see this move in the opposite
direction - with all function taking a context and using it.  It
*really* isn't that hard to change and it eliminates all sorts of bugs.

The problem is that libraries should not maintain 'magic state'.  'magic
state' causes bugs - and nasty bugs too.  By ensureing that all state is
maintined on a context pointer, we *know* that shutting down one context
can't affect another etc.

Yes, I can see why you might like this approch, but I am strongly
opposed do it.  Furthermore I think constructs like this:

> /* open using client 1 */
> smbc_set_client(handle1);
> fd1 = smbc_open("smb://puter/share/file1.txt",mode);
> 
> /* open using client 1 */
> smbc_set_client(handle2);
> fd2 = smbc_open("smb://puter/share/file2.txt",mode);

are just *asking* for bugs.

The original design was flawed.  Posix is flawed (and the idea was to
emulate posix, and I can understand that), but *please* don't use that
as an excuse to for substandard interfaces a second time around.

If you want to know the kind of code I like, see the passdb subsystem. 
It is complex, but I really like code that has only one entrypoint
(think namespace pollution), and puts the rest of the functions on a
struct, as function pointers.  Each funciton takes the struct as an arg,
(becouse C doesn't have 'Current').

Andrew Bartlett

-- 
Andrew Bartlett                                 abartlet at pcug.org.au
Manager, Authentication Subsystems, Samba Team  abartlet at samba.org
Student Network Administrator, Hawker College   abartlet at hawkerc.net
http://samba.org     http://build.samba.org     http://hawkerc.net




More information about the samba-technical mailing list