[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Info-cvs] Binary mode version of CVS for Windows NT
From: |
Tony Lill |
Subject: |
Re: [Info-cvs] Binary mode version of CVS for Windows NT |
Date: |
Mon, 25 Sep 2000 19:12:04 EDT |
To re-create this version, all you need to is change all the
places where it opens a file to use O_BINARY instead of trying to
choose the correct mode. The patch follows, you can ignore the
buf_mem_error stuff.
When a client of mine ported CVS to dos many years ago, they chose
the same route, and now must maintain it because the repository is
"polluted" with \n\r.
Index: dev/cvs/src/client.c
diff -c dev/cvs/src/client.c:1.1.1.5 dev/cvs/src/client.c:1.12
*** dev/cvs/src/client.c:1.1.1.5 Tue Jul 14 17:10:52 1998
--- dev/cvs/src/client.c Thu Aug 20 16:08:48 1998
***************
*** 134,139 ****
--- 134,140 ----
static void handle_f PROTO((char *, int));
static void handle_notified PROTO((char *, int));
+ static void buf_memory_error PROTO((struct buffer *));
static size_t try_read_from_server PROTO ((char *, size_t));
#endif /* CLIENT_SUPPORT */
***************
*** 318,323 ****
--- 319,334 ----
static int rsh_pid = -1;
+ /* This routine is called when one of the buffer routines runs out of
+ memory. */
+
+ static void
+ buf_memory_error (buf)
+ struct buffer *buf;
+ {
+ error (1, 0, "out of memory");
+ }
+
/* We want to be able to log data sent between us and the server. We
do it using log buffers. Each log buffer has another buffer which
handles the actual I/O, and a file to log information to.
***************
*** 1659,1669 ****
else
{
int fd;
! fd = CVS_OPEN (temp_filename,
(O_WRONLY | O_CREAT | O_TRUNC
| (bin ? OPEN_BINARY : 0)),
0777);
if (fd < 0)
{
--- 1670,1689 ----
else
{
int fd;
+
+ #ifdef WIN32
+ /* always open in binary mode... */
!
! fd = CVS_OPEN (temp_filename,
! (O_WRONLY | O_CREAT | O_TRUNC | OPEN_BINARY),
! 0777);
! #else
! fd = CVS_OPEN (temp_filename,
(O_WRONLY | O_CREAT | O_TRUNC
| (bin ? OPEN_BINARY : 0)),
0777);
+ #endif
if (fd < 0)
{
***************
*** 4014,4022 ****
if (use_socket_style)
{
to_server = socket_buffer_initialize (server_sock, 0,
! (BUFMEMERRPROC) NULL);
from_server = socket_buffer_initialize (server_sock, 1,
! (BUFMEMERRPROC) NULL);
}
else
#endif /* NO_SOCKET_TO_FD */
--- 4034,4042 ----
if (use_socket_style)
{
to_server = socket_buffer_initialize (server_sock, 0,
! buf_memory_error);
from_server = socket_buffer_initialize (server_sock, 1,
! buf_memory_error);
}
else
#endif /* NO_SOCKET_TO_FD */
***************
*** 4040,4052 ****
if (to_server_fp == NULL)
error (1, errno, "cannot fdopen %d for write", tofd);
to_server = stdio_buffer_initialize (to_server_fp, 0,
! (BUFMEMERRPROC) NULL);
from_server_fp = fdopen (fromfd, FOPEN_BINARY_READ);
if (from_server_fp == NULL)
error (1, errno, "cannot fdopen %d for read", fromfd);
from_server = stdio_buffer_initialize (from_server_fp, 1,
! (BUFMEMERRPROC) NULL);
}
/* Set up logfiles, if any. */
--- 4060,4072 ----
if (to_server_fp == NULL)
error (1, errno, "cannot fdopen %d for write", tofd);
to_server = stdio_buffer_initialize (to_server_fp, 0,
! buf_memory_error);
from_server_fp = fdopen (fromfd, FOPEN_BINARY_READ);
if (from_server_fp == NULL)
error (1, errno, "cannot fdopen %d for read", fromfd);
from_server = stdio_buffer_initialize (from_server_fp, 1,
! buf_memory_error);
}
/* Set up logfiles, if any. */
***************
*** 4073,4079 ****
error (0, errno, "opening to-server logfile %s", buf);
else
to_server = log_buffer_initialize (to_server, fp, 0,
! (BUFMEMERRPROC) NULL);
strcpy (p, ".out");
fp = open_file (buf, "wb");
--- 4093,4099 ----
error (0, errno, "opening to-server logfile %s", buf);
else
to_server = log_buffer_initialize (to_server, fp, 0,
! buf_memory_error);
strcpy (p, ".out");
fp = open_file (buf, "wb");
***************
*** 4081,4087 ****
error (0, errno, "opening from-server logfile %s", buf);
else
from_server = log_buffer_initialize (from_server, fp, 1,
! (BUFMEMERRPROC) NULL);
free (buf);
}
--- 4101,4107 ----
error (0, errno, "opening from-server logfile %s", buf);
else
from_server = log_buffer_initialize (from_server, fp, 1,
! buf_memory_error);
free (buf);
}
***************
*** 4242,4251 ****
send_to_server ("Kerberos-encrypt\012", 0);
to_server = krb_encrypt_buffer_initialize (to_server, 0, sched,
kblock,
! (BUFMEMERRPROC) NULL);
from_server = krb_encrypt_buffer_initialize (from_server, 1,
sched, kblock,
! (BUFMEMERRPROC) NULL);
}
else
#endif /* HAVE_KERBEROS */
--- 4262,4271 ----
send_to_server ("Kerberos-encrypt\012", 0);
to_server = krb_encrypt_buffer_initialize (to_server, 0, sched,
kblock,
! buf_memory_error);
from_server = krb_encrypt_buffer_initialize (from_server, 1,
sched, kblock,
! buf_memory_error);
}
else
#endif /* HAVE_KERBEROS */
***************
*** 4257,4268 ****
send_to_server ("Gssapi-encrypt\012", 0);
to_server = cvs_gssapi_wrap_buffer_initialize (to_server, 0,
gcontext,
! ((BUFMEMERRPROC)
! NULL));
from_server = cvs_gssapi_wrap_buffer_initialize (from_server, 1,
gcontext,
! ((BUFMEMERRPROC)
! NULL));
cvs_gssapi_encrypt = 1;
}
else
--- 4277,4286 ----
send_to_server ("Gssapi-encrypt\012", 0);
to_server = cvs_gssapi_wrap_buffer_initialize (to_server, 0,
gcontext,
! buf_memory_error);
from_server = cvs_gssapi_wrap_buffer_initialize (from_server, 1,
gcontext,
! buf_memory_error);
cvs_gssapi_encrypt = 1;
}
else
***************
*** 4287,4296 ****
compressed. */
to_server = compress_buffer_initialize (to_server, 0, gzip_level,
! (BUFMEMERRPROC) NULL);
from_server = compress_buffer_initialize (from_server, 1,
gzip_level,
! (BUFMEMERRPROC) NULL);
}
#ifndef NO_CLIENT_GZIP_PROCESS
else if (supported_request ("gzip-file-contents"))
--- 4305,4314 ----
compressed. */
to_server = compress_buffer_initialize (to_server, 0, gzip_level,
! buf_memory_error);
from_server = compress_buffer_initialize (from_server, 1,
gzip_level,
! buf_memory_error);
}
#ifndef NO_CLIENT_GZIP_PROCESS
else if (supported_request ("gzip-file-contents"))
***************
*** 4331,4342 ****
send_to_server ("Gssapi-authenticate\012", 0);
to_server = cvs_gssapi_wrap_buffer_initialize (to_server, 0,
gcontext,
! ((BUFMEMERRPROC)
! NULL));
from_server = cvs_gssapi_wrap_buffer_initialize (from_server, 1,
gcontext,
! ((BUFMEMERRPROC)
! NULL));
}
else
error (1, 0, "Stream authentication is only supported when using
GSSAPI");
--- 4349,4358 ----
send_to_server ("Gssapi-authenticate\012", 0);
to_server = cvs_gssapi_wrap_buffer_initialize (to_server, 0,
gcontext,
! buf_memory_error);
from_server = cvs_gssapi_wrap_buffer_initialize (from_server, 1,
gcontext,
! buf_memory_error);
}
else
error (1, 0, "Stream authentication is only supported when using
GSSAPI");
***************
*** 4619,4625 ****
--- 4635,4651 ----
else
fd = CVS_OPEN (file, O_RDONLY | OPEN_BINARY);
#else
+ #ifdef WIN32
+ /*
+ * ALWAYS open files in binary mode, since they may be stored in the
+ * repository with CRLF (ie DOS-mode) text line terminations...they need
+ * to be transmitted this way, too!
+ */
+
+ fd = CVS_OPEN (file, O_RDONLY | OPEN_BINARY);
+ #else
fd = CVS_OPEN (file, O_RDONLY | (bin ? OPEN_BINARY : 0));
+ #endif
#endif
if (fd < 0)
--
Tony Lill, address@hidden
President, A. J. Lill Consultants fax/data (519) 650 3571
539 Grand Valley Dr., Cambridge, Ont. N3H 2S2 (519) 241 2461
--------------- http://www.ajlc.waterloo.on.ca/ ----------------
"Welcome to All Things UNIX, where if it's not UNIX, it's CRAP!"