[BACK]Return to remote.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / cvs

Diff for /src/usr.bin/cvs/remote.c between version 1.5 and 1.6

version 1.5, 2007/01/03 19:27:28 version 1.6, 2007/01/13 15:29:34
Line 117 
Line 117 
         return (ldata);          return (ldata);
 }  }
   
 BUF *  void
 cvs_remote_receive_file(size_t len)  cvs_remote_receive_file(int fd, size_t len)
 {  {
         BUF *bp;  
         FILE *in;          FILE *in;
         size_t ret;  
         char *data;          char *data;
           size_t nread, nwrite, nleft, toread;
   
         if (cvs_server_active)          if (cvs_server_active)
                 in = stdin;                  in = stdin;
         else          else
                 in = current_cvsroot->cr_srvout;                  in = current_cvsroot->cr_srvout;
   
         bp = cvs_buf_alloc(len, BUF_AUTOEXT);          data = xmalloc(MAXBSIZE);
           nleft = len;
   
         if (len != 0) {          while (nleft > 0) {
                 data = xmalloc(len);                  toread = MIN(nleft, MAXBSIZE);
                 ret = fread(data, sizeof(char), len, in);  
                 if (ret != len)  
                         fatal("length mismatch, expected %ld, got %ld",  
                             len, ret);  
                 cvs_buf_set(bp, data, len, 0);  
                 xfree(data);  
         }  
   
         if (cvs_server_active == 0 && cvs_client_outlog_fd != -1) {                  nread = fread(data, sizeof(char), toread, in);
                 if (cvs_buf_write_fd(bp, cvs_client_outlog_fd) < 0)                  if (nread == 0)
                         fatal("cvs_remote_receive_file: cvs_buf_write_fd");                          fatal("error receiving file");
   
                   nwrite = write(fd, data, nread);
                   if (nwrite != nread)
                           fatal("failed to write %ld bytes", nread);
   
                   if (cvs_server_active == 0 &&
                       cvs_client_outlog_fd != -1)
                           (void)write(cvs_client_outlog_fd, data, nread);
   
                   nleft -= nread;
         }          }
   
         return (bp);          xfree(data);
 }  }
   
 void  void
 cvs_remote_send_file(const char *path)  cvs_remote_send_file(const char *path)
 {  {
         BUF *bp;  
         int l, fd;          int l, fd;
         FILE *out;          FILE *out, *in;
         size_t ret;          size_t ret, rw, total;
         struct stat st;          struct stat st;
         char buf[16], *fcont;          char buf[16], *data;
   
         if (cvs_server_active)          if (cvs_server_active)
                 out = stdout;                  out = stdout;
Line 179 
Line 181 
                 fatal("cvs_remote_send_file: overflow");                  fatal("cvs_remote_send_file: overflow");
         cvs_remote_output(buf);          cvs_remote_output(buf);
   
         bp = cvs_buf_load_fd(fd, BUF_AUTOEXT);          if ((in = fdopen(fd, "r")) == NULL)
                   fatal("cvs_remote_send_file: fdopen %s", strerror(errno));
   
         if (cvs_server_active == 0 && cvs_client_inlog_fd != -1) {          total = 0;
                 if (cvs_buf_write_fd(bp, cvs_client_inlog_fd) < 0)          data = xmalloc(MAXBSIZE);
                         fatal("cvs_remote_send_file: cvs_buf_write");          while ((ret = fread(data, sizeof(char), MAXBSIZE, in)) != 0) {
         }                  rw = fwrite(data, sizeof(char), ret, out);
                   if (rw != ret)
                           fatal("failed to write %ld bytes", ret);
   
         fcont = cvs_buf_release(bp);                  if (cvs_server_active == 0 &&
                       cvs_client_outlog_fd != -1)
                           (void)write(cvs_client_outlog_fd, data, ret);
   
         if (fcont != NULL) {                  total += ret;
                 ret = fwrite(fcont, sizeof(char), st.st_size, out);  
                 if (ret != st.st_size)  
                         fatal("tried to write %lld only wrote %ld",  
                             st.st_size, ret);  
                 xfree(fcont);  
         }          }
   
         (void)close(fd);          xfree(data);
   
           if (total != st.st_size)
                   fatal("length mismatch, %ld vs %ld", total, st.st_size);
   
           (void)fclose(in);
 }  }
   
 void  void

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6