[samba3] lib/util_file.c unused functions?

John E. Malmberg wb8tyw at qsl.net
Thu Aug 17 14:49:47 GMT 2006


Because OpenVMS does some file operations different than UNIX, it 
appears that I need to replace some of routines in util_file.c with ones 
  specific to OpenVMS.

In looking at some of the routines that I would need to replace, I can 
not find that SAMBA V3 is currently even using them.

These routines are:

     file_lock, file_unlock, startfilepwent, and endfilepwent.

And the routine do_file_lock appears to be only used by 
passdb/pdb_smbpasswd.c.

I would appreciate if someone could let me know if I have missed any 
other usages of these routines.


For some background on the differences:

On OpenVMS, the older C library that I need to use does not support 
fcntl() style locking.

For locking an entire file, as pdb_smbpasswd does, this can be done on 
the call to open() or fopen() through extensions where on OpenVMS these 
calls take additional arguments.  This difference can be hidden from the 
UNIX code in pdb_smbpasswd by compile time macros.

The other issues with the util_file routines is that stat()/fstat() 
return the number of bytes that the file takes up, which on OpenVMS may 
be more bytes than the amount of data that would be read from the file, 
and that read() will stop at record boundaries for some file organizations.

OpenVMS editors output text files like smb.conf as a collection of 
records, not as a stream of bytes.  And each record contains meta-data 
bytes.  Unless the file is opened in binary mode, this meta-data is not 
read.

[Having that meta-data is a useful speedup on CPUs with block move 
instructions like VAX]

OpenVMS also supports files that are just streams of bytes, but it would 
be a major inconvenience to the user base to force them to convert their 
files after leaving their favorite editor.

Which means that a stat() on the smb.conf (or other text file) on 
OpenVMS will always show a larger byte count than what is present.

And for what ever reasons have been lost to time, but are likely related 
to taking advantage of block move instructions, when the OpenVMS C 
library issues a read() to a file in "record" format, it will only read 
a single record.

Also, for record formated files, On OpenVMS the record delimiter of a \n 
or other value is not stored in the file data.  Instead there is are 
flags in the file header which indicate what delimiter(s) if any to add 
to the file when outputting it to a display or a printer.

OpenVMS text files get tagged to be terminated with a '\r'.  And when
the OpenVMS C library issues a read() for a record from such a file, it 
appends a '\r' to the record.

So while it is not a lot of code to change, it still is a difference 
that I need to track.

-John
wb8tyw at qsl.net
Personal Opinion Only



More information about the samba-technical mailing list