- /*
- * Keep these in sync with bytes_to_write assignment
- * in write_batch_flist_info()
- */
- read_batch_flist_file((char *) &file->modtime, sizeof(time_t));
- read_batch_flist_file((char *) &file->length, sizeof(OFF_T));
- read_batch_flist_file((char *) &file->mode, sizeof(mode_t));
- read_batch_flist_file((char *) &file->inode, sizeof(INO64_T));
- read_batch_flist_file((char *) &file->dev, sizeof(DEV64_T));
- read_batch_flist_file((char *) &file->rdev, sizeof(DEV64_T));
- read_batch_flist_file((char *) &file->uid, sizeof(uid_t));
- read_batch_flist_file((char *) &file->gid, sizeof(gid_t));
- read_batch_flist_file(char_str_len, sizeof(char_str_len));
- int_str_len = IVAL(char_str_len, 0);
- if (int_str_len > 0) {
- read_batch_flist_file(buff, int_str_len);
- buff[int_str_len] = '\0';
- file->basename = strdup(buff);
- } else {
- file->basename = NULL;
- }
-
- read_batch_flist_file(char_str_len, sizeof(char_str_len));
- int_str_len = IVAL(char_str_len, 0);
- if (int_str_len > 0) {
- read_batch_flist_file(buff, int_str_len);
- buff[int_str_len] = '\0';
- file[0].dirname = strdup(buff);
- } else {
- file[0].dirname = NULL;
- }
-
- read_batch_flist_file(char_str_len, sizeof(char_str_len));
- int_str_len = IVAL(char_str_len, 0);
- if (int_str_len > 0) {
- read_batch_flist_file(buff, int_str_len);
- buff[int_str_len] = '\0';
- file[0].basedir = strdup(buff);
- } else {
- file[0].basedir = NULL;
- }
-
- read_batch_flist_file(char_str_len, sizeof(char_str_len));
- int_str_len = IVAL(char_str_len, 0);
- if (int_str_len > 0) {
- read_batch_flist_file(buff, int_str_len);
- buff[int_str_len] = '\0';
- file[0].link = strdup(buff);
- } else {
- file[0].link = NULL;
- }
-
- read_batch_flist_file(char_str_len, sizeof(char_str_len));
- int_str_len = IVAL(char_str_len, 0);
- if (int_str_len > 0) {
- read_batch_flist_file(buff, int_str_len);
- buff[int_str_len] = '\0';
- file[0].sum = strdup(buff);
- } else {
- file[0].sum = NULL;
- }
-}
-
-void write_batch_csums_file(void *buff, int bytes_to_write)
-{
- static int fdb_open = 1;
- char filename[MAXPATHLEN];
-
- if (fdb_open) {
- /* Set up file extension */
- strlcpy(filename, batch_prefix, sizeof(filename));
- strlcat(filename, rsync_csums_file, sizeof(filename));
-
- /*
- * Open batch csums file for writing;
- * create it if it doesn't exist
- */
- fdb = do_open(filename, O_WRONLY | O_CREAT | O_TRUNC,
- S_IREAD | S_IWRITE);
- if (fdb == -1) {
- rprintf(FERROR, "Batch file %s open error: %s\n",
- filename, strerror(errno));
- close(fdb);
- exit_cleanup(1);
- }
- fdb_open = 0;
- }
-
- /* Write buffer to batch csums file */
-
- if (write(fdb, buff, bytes_to_write) == -1) {
- rprintf(FERROR, "Batch file %s write error: %s\n",
- filename, strerror(errno));
- close(fdb);