vms_tdb.c modifications
John E. Malmberg
malmberg at Encompasserve.org
Fri Jun 27 14:24:04 GMT 2003
On Thu, 26 Jun 2003, Dave Jones wrote:
> The port will be different in the approach taken to resolve incompatibilities
> the Samba code has with the VMS environment.
A wrapper shared image can be used with more than just SAMBA if it is done
correctly.
> For example, the Samba code
> assumes the st_dev and st_ino is a stat struct fields are scalars, but in VMS
> they area char pointer and an array.
The last time I looked at the SAMBA code, st_dev was not supposed to be
used as a type, it was suppose to be using a SAMBA specific typedef or
macro that was defined in config.h.
If you only want to support current and future ALPHA/IPF, you can have
st_ino as a compile time option with the current C RTL. This is the same
for supporting the large files.
> The traditional approach is to locate all the places throughout the
> code with this assumption and apply an approriate
> work-around with #ifdef's. Another approach is to adjust the
> environment so the stat struct has compatible data types that require no
> changes to the C source module itself. In this case, the stat wrapper for
> VMS would stuff the 48 bits of file ID into a 64 bit integer and dynamically
> build a shared, persistent table to map device names to unique 32-bit
> integers.
Or tell SAMBA that the ino_t type is 64 bits in the ino_t, but that will
only work for Alpha.
I ended up with a TPU macro that will replace the references to the ino_t
with a couple of C macros. For OpenVMS the macro would use memset() and
memcpy(), otherwise it used = or ==. The SAMBA technical team seemed to
be willing to put that type of macro in their code and let a test in the
configure script manage it. But so far the TPU macro seems to do a good
job. It has done the right thing on every release of the SAMBA and RSYNC
modules that I have run through it.
I use a search list for local source/objects, cms reference for OpenVMS
modules, and then readonly access to the UNIX source.
What I need is RSYNC to work so that I do not have to periodically replace
the UNIX source with fresh FTP copies.
The other thing that I do is that in the CC compile statement, I define a
macro that is "MOD_FOO" where "FOO" is the module name.
Then in the config.h file, I can put:
#ifdef MOD_FOO
#define load_params vms_load_params
#endif
This changes module foo and only module foo to call the VMS specific
routine with out modifying either the FOO.C or the module that load_params
is in.
It is a way of making code patches with out editing the code.
> Another area where it is different is that I'm not defining a TCPIP service
> to start the samba processes. I have my own listener daemon that manages a
> pool of processes that are handed connections when they come in (similar to
> the way Apache 1.x works). In development mode, the workers are spawned,
> rather than created detached, so I see the tracebacks on the screen
> immediately when it crashes. (BTW is it possible with "$ TCPIP show
> device/full" to verify that the NODELAY socket option is in effect?).
That should be a big speed up for connections.
I do not know about the NODELAY socket option.
-John
wb8tyw at qsl.network
Personal Opinion Only
More information about the samba-vms
mailing list