/* These receive_a_file() and send_file() functions are for use by extra_comms and the CA stuff, rather than backups/restores. */ int receive_a_file(const char *path, struct cntr *p1cntr) { int c=0; int ret=0; #ifdef HAVE_WIN32 BFILE bfd; #else FILE *fp=NULL; #endif unsigned long long rcvdbytes=0; unsigned long long sentbytes=0; #ifdef HAVE_WIN32 binit(&bfd, 0); bfd.use_backup_api=0; //set_win32_backup(&bfd); if(bopen(&bfd, path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, S_IRUSR | S_IWUSR, 0)<=0) { berrno be; logp("Could not open for writing %s: %s\n", path, be.bstrerror(errno)); ret=-1; goto end; } #else if(!(fp=open_file(path, "wb"))) { ret=-1; goto end; } #endif #ifdef HAVE_WIN32 ret=transfer_gzfile_in(NULL, path, &bfd, NULL, &rcvdbytes, &sentbytes, NULL, 0, p1cntr, NULL); c=bclose(&bfd); #else ret=transfer_gzfile_in(NULL, path, NULL, fp, &rcvdbytes, &sentbytes, NULL, 0, p1cntr, NULL); c=close_fp(&fp); #endif end: if(c) { logp("error closing %s in receive_a_file\n", path); ret=-1; } if(!ret) logp("Received: %s\n", path); return ret; }
/* These receive_a_file() and send_file() functions are for use by extra_comms and the CA stuff, rather than backups/restores. */ int receive_a_file(struct asfd *asfd, const char *path, struct conf **confs) { int ret=-1; BFILE *bfd=NULL; unsigned long long rcvdbytes=0; unsigned long long sentbytes=0; if(!(bfd=bfile_alloc())) goto end; bfile_init(bfd, 0, confs); #ifdef HAVE_WIN32 bfd->set_win32_api(bfd, 0); #endif if(bfd->open(bfd, asfd, path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, S_IRUSR | S_IWUSR)) { berrno be; berrno_init(&be); logp("Could not open for writing %s: %s\n", path, berrno_bstrerror(&be, errno)); goto end; } ret=transfer_gzfile_in(asfd, path, bfd, &rcvdbytes, &sentbytes, confs); if(bfd->close(bfd, asfd)) { logp("error closing %s in receive_a_file\n", path); goto end; } logp("Received: %s\n", path); ret=0; end: bfd->close(bfd, asfd); bfile_free(&bfd); return ret; }