info-cvs
[Top][All Lists]
Advanced

[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!"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]