This area is an archive and is no longer actively maintained. Information found on this page is likely to be extremely out of date and therefore highly inaccurate. We recommend the Ximbiot - CVS Wiki for up-to-date information about CVS and its associtated tools.

If you do find anything useful on this page that is not yet in the Ximbiot - CVS Wiki and you have the time, please add it!

Portability patches to CVS

Portability patches to CVS

This page is for unofficial patches which concern CVS running on a particular operating system (or family of operating systems).

Namespace conflicts

NT server

The ntserver.zip patch is for running a CVS server on Windows NT. It is based on CVS 1.9 and requires a shareware rshd (details are with the patch). One additional note: one user reports having to configure rshd as follows: "under the rsh options tab, tick redirect stdout/stderr."

The pserverd patch takes another approach. Most of the portability issues (e.g. threads instead of fork) which are handled by ntserver.zip in CVS are here handled by the gnu-win32 environment. The patch mainly concerns providing the equivalent to inetd/rshd. Also see Andy Piper's page which includes prebuilt executables and documentation.

There's another patch for cygwin from Tim Taylor.

Here's a tip which opens up various other options (such as writing or finding a freeware inetd): to pass a socket (not a file descriptor) from parent to child, mark it as inheritable (via "win32 magic"), and then pass the number to the child (for example, via an environment variable or command line argument). Rumor has it that the inetd which comes with OS/2 uses this technique (with the socket number as the last argument). Here are some further tips.

Windows and filenames

In Windows, filenames like aux.h for example are special and trying to create a file with those names will access a device instead. Here is a patch which causes CVS to give an error instead of doing strange things.

The goal is for CVS to accept either "/" or "\" to separate directories in filenames. However, there seems to be at least one bug in this area.

More Windows

Delays on startup have at least two known causes: (1) gethostname() and other WinSock calls - the fix would be for CVS to refrain from calling WinSock until it knows that it is not dealing with :local: (and fall back to GetComputerName for a host name if :local:); (2) if CVSROOT has a trailing slash (e.g. "c:/"), then this can lead to pathnames like c://ccvs/src which is a network drive.

OS/2

Here are some patches which are said to be for compiling CVS 1.9.26 with IBM's ICC compiler. There is also a brief note regarding EMX (which is a separate issue).

Here are some notes about chmod() and the CHMOD_BROKEN ifdefs, which should affect mainly compiling with the IBM compiler, rather than EMX.

The OS/2 port (both os2/filesubr.c and emx/filesubr.c) has a horrible kludgy implementation of xchmod() which functions by calling the "attrib" command line program. This is slow, ugly, and user visible (the title of the window flashes back and forth between "cvs" and "attrib"). Here is a patch. Here is another one for more recent versions of EMX.

Also see Andreas Huber's OS/2 patches to CVS 1.9.27. There are some patches for binary files. He has also written patches for CVS 1.9.29 (including Murray Bishop's changes and various other enhancements) and uploaded the result to Hobbes.

Murray Bishop has submitted a June 1998 set of patches to run sanity.sh on OS/2, and for other purposes. And a July 1998 set for Windows as well.

Watcom on NT

Here are some patches for compiling CVS on Windows NT with the Watcom compiler. There are also some OS/2 patches there too.

Non-unix systems and commit -F

When "commit -F" reads a log message it is apparently using binary mode instead of text mode, bogusly. Here is another report, for a problem which is at least somewhat related, with a patch.

VMS

Richard Levitte has sent some patches for VMS. Here is one for wildcards and other purposes.

Another issue here is what if you have a file such as FTP and a logical name FTP, for example. For supplying a filename to VMS, one might have the client call such a file "FTP." which disables logical name expansion, but to still call it "FTP" when talking to the server.

Here are lstat and ascdates patches from Colin R. Blake.

As for the future of the VMS port, you're probably better off talking to Richard Levitte (or someone else besides me). I'm not really doing anything with VMS myself these days, so don't expect me to do much :-) -kingdon.

IBM mainframes

NFS

There are a number of issues with the Networked File System (NFS). These are most relevant for unix (because NFS is most widely used on unix) although some also might exist on other operating systems.

AFS

AFS is another networked file system particularly found on unix. Here is some information on a kludge for some broken AFS implementations.

Symbolic Links (unix)

CVS apparently follows symbolic links when it shouldn't.

Rhapsody

Rhapsody is/was an Apple operating system project. Here are the patches from Apple for CVS on Rhapsody. The change to rcs.c was made official 14 Apr 1998; the other changes are also available broken down into Kerberos, makefile, and remote -t/-f wrappers patches.

We also have a Macintosh page.

Unix Permissions

If the PreservePermissions option is enabled, CVS stores (among other things) file permissions in the repository. When you check in a file, the permissions in the repository are updated, and when you update a file, the permissions in your working directory are updated.

OK, now the question is whether this is a good idea, and in particular, what the behavior should be for the non-PreservePermissions case. In this case the permissions being stored are a more limited set (principally, the execute bit). But the historical behavior of CVS is that to set the permissions in the repository, one must manually change the permissions on the RCS file in the repository; and to set the permissions in the working directory, one must delete the file and then run update. That is, both checkin and update have implemented the opposite behavior from PreservePermissions. (Might want to look more carefully at the historical behavior to make sure I've described it right, both for CVS 1.9 (RCS 5.7) and for CVS 1.9.28 and such).

Obsolete Patches

The patches in this section are no longer considered relevant (usually because the problem has been solved some other way or the patch has been made official). They are subject to disappear at any time; if you know of some reason why they might want to stick around, let us know.
  • Jun 1999: Alexy Milov's page doesn't seem to be up any more. It was described as "makefile fixes and patches for Windows" so some of it might be taken care of by the 1999-04-26 checkins to the Visual C++ makefiles.
  • This patch might affect behavior of the Windows client when connecting to a CVS 1.9 and older server, if one updates certain filenames (8 character filenames, I suspect). Made obsolete by 1999-05-25 change to never call an external patch program.
  • This patch is an effort to fix symptoms such as "cannot bind to socket: Invalid argument" when running CVS for the second and subsequent times (similar patch checked in 1998-10-02).
  • The error reporting fix if CVS cannot find a home directory was checked in on 1998-10-09 (it was on this page because this is mainly an issue on Windows).
  • On 28 Sep 1998, checked in a patch similar to this one for not trying to rename read-only files.
  • On 1 Jul 1998, Noel Cragg checked in a patch similar to Gordon Chaffee's patch for CVS and SSH on Windows.
  • A patch similar to the file permissions for unix client patch was made official on 16 Feb 1998.

[Cyclic Home]

Derek Price, CVS developer and technical editor of Essential CVS (Essentials line from O'Reilly Press) , and others offer consulting services and training through Ximbiot.