[BACK]Return to sftp-client.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/sftp-client.c between version 1.79 and 1.80

version 1.79, 2008/01/19 22:04:57 version 1.80, 2008/01/21 19:20:17
Line 987 
Line 987 
 do_upload(struct sftp_conn *conn, char *local_path, char *remote_path,  do_upload(struct sftp_conn *conn, char *local_path, char *remote_path,
     int pflag)      int pflag)
 {  {
         int local_fd, status;          int local_fd;
           int status = SSH2_FX_OK;
         u_int handle_len, id, type;          u_int handle_len, id, type;
         off_t offset;          off_t offset;
         char *handle, *data;          char *handle, *data;
Line 1049 
Line 1050 
         if (handle == NULL) {          if (handle == NULL) {
                 close(local_fd);                  close(local_fd);
                 buffer_free(&msg);                  buffer_free(&msg);
                 return(-1);                  return -1;
         }          }
   
         startid = ackid = id + 1;          startid = ackid = id + 1;
Line 1069 
Line 1070 
                  * Simulate an EOF on interrupt, allowing ACKs from the                   * Simulate an EOF on interrupt, allowing ACKs from the
                  * server to drain.                   * server to drain.
                  */                   */
                 if (interrupted)                  if (interrupted || status != SSH2_FX_OK)
                         len = 0;                          len = 0;
                 else do                  else do
                         len = read(local_fd, data, conn->transfer_buflen);                          len = read(local_fd, data, conn->transfer_buflen);
Line 1125 
Line 1126 
                         if (ack == NULL)                          if (ack == NULL)
                                 fatal("Can't find request for ID %u", r_id);                                  fatal("Can't find request for ID %u", r_id);
                         TAILQ_REMOVE(&acks, ack, tq);                          TAILQ_REMOVE(&acks, ack, tq);
   
                         if (status != SSH2_FX_OK) {  
                                 error("Couldn't write to remote file \"%s\": %s",  
                                     remote_path, fx2txt(status));  
                                 if (showprogress)  
                                         stop_progress_meter();  
                                 do_close(conn, handle, handle_len);  
                                 close(local_fd);  
                                 xfree(data);  
                                 xfree(ack);  
                                 status = -1;  
                                 goto done;  
                         }  
                         debug3("In write loop, ack for %u %u bytes at %lld",                          debug3("In write loop, ack for %u %u bytes at %lld",
                             ack->id, ack->len, (long long)ack->offset);                              ack->id, ack->len, (long long)ack->offset);
                         ++ackid;                          ++ackid;
Line 1147 
Line 1135 
                 if (offset < 0)                  if (offset < 0)
                         fatal("%s: offset < 0", __func__);                          fatal("%s: offset < 0", __func__);
         }          }
           buffer_free(&msg);
   
         if (showprogress)          if (showprogress)
                 stop_progress_meter();                  stop_progress_meter();
         xfree(data);          xfree(data);
   
           if (status != SSH2_FX_OK) {
                   error("Couldn't write to remote file \"%s\": %s",
                       remote_path, fx2txt(status));
                   status = -1;
           }
   
         if (close(local_fd) == -1) {          if (close(local_fd) == -1) {
                 error("Couldn't close local file \"%s\": %s", local_path,                  error("Couldn't close local file \"%s\": %s", local_path,
                     strerror(errno));                      strerror(errno));
                 do_close(conn, handle, handle_len);  
                 status = -1;                  status = -1;
                 goto done;  
         }          }
   
         /* Override umask and utimes if asked */          /* Override umask and utimes if asked */
         if (pflag)          if (pflag)
                 do_fsetstat(conn, handle, handle_len, &a);                  do_fsetstat(conn, handle, handle_len, &a);
   
         status = do_close(conn, handle, handle_len);          if (do_close(conn, handle, handle_len) != SSH2_FX_OK)
                   status = -1;
 done:  
         xfree(handle);          xfree(handle);
         buffer_free(&msg);  
         return(status);          return status;
 }  }

Legend:
Removed from v.1.79  
changed lines
  Added in v.1.80