unsigned int rawfile_rename(const char *src_name, const char *dst_name, const char *path) { char *complete_src, *complete_dst; int rc; if (path == NULL) { complete_src = lib_stralloc(src_name); complete_dst = lib_stralloc(dst_name); } else { complete_src = util_concat(path, FSDEV_DIR_SEP_STR, src_name, NULL); complete_dst = util_concat(path, FSDEV_DIR_SEP_STR, dst_name, NULL); } /*ioutil_remove(dst_name);*/ rc = ioutil_rename(complete_src, complete_dst); lib_free(complete_src); lib_free(complete_dst); if (rc < 0) { if (ioutil_errno(IOUTIL_ERRNO_EPERM)) return FILEIO_FILE_PERMISSION; return FILEIO_FILE_NOT_FOUND; } return FILEIO_FILE_OK; }
/* Compress `src' into `dest' using algorithm `type'. */ static int zfile_compress(const char *src, const char *dest, enum compression_type type) { char *dest_backup_name; int retval; /* This shouldn't happen */ if (type == COMPR_ARCHIVE) { log_error(zlog, "compress: trying to compress archive-file."); return -1; } /* This shouldn't happen */ if (type == COMPR_ZIPCODE) { log_error(zlog, "compress: trying to compress zipcode-file."); return -1; } /* This shouldn't happen */ if (type == COMPR_LYNX) { log_error(zlog, "compress: trying to compress lynx-file."); return -1; } /* This shouldn't happen */ if (type == COMPR_TZX) { log_error(zlog, "compress: trying to compress tzx-file."); return -1; } /* Check whether `compression_type' is a known one. */ if (type != COMPR_GZIP && type != COMPR_BZIP) { log_error(zlog, "compress: unknown compression type"); return -1; } /* If we have no write permissions for `dest', give up. */ if (ioutil_access(dest, IOUTIL_ACCESS_W_OK) < 0) { ZDEBUG(("compress: no write permissions for `%s'", dest)); return -1; } if (ioutil_access(dest, IOUTIL_ACCESS_R_OK) < 0) { ZDEBUG(("compress: no read permissions for `%s'", dest)); dest_backup_name = NULL; } else { /* If `dest' exists, make a backup first. */ dest_backup_name = archdep_make_backup_filename(dest); if (dest_backup_name != NULL) { ZDEBUG(("compress: making backup %s... ", dest_backup_name)); } #ifdef WIN32 if (dest_backup_name != NULL) { ioutil_remove(dest_backup_name); } #endif if (dest_backup_name != NULL && ioutil_rename(dest, dest_backup_name) < 0) { ZDEBUG(("failed.")); log_error(zlog, "Could not make pre-compression backup."); return -1; } else { ZDEBUG(("OK.")); } } switch (type) { case COMPR_GZIP: retval = compress_with_gzip(src, dest); break; case COMPR_BZIP: retval = compress_with_bzip(src, dest); break; default: retval = -1; } if (retval == -1) { /* Compression failed: restore original file. */ #ifdef WIN32 if (dest_backup_name != NULL) { ioutil_remove(dest); } #endif if (dest_backup_name != NULL && ioutil_rename(dest_backup_name, dest) < 0) { log_error(zlog, "Could not restore backup file after failed compression."); } } else { /* Compression succeeded: remove backup file. */ if (dest_backup_name != NULL && ioutil_remove(dest_backup_name) < 0) { log_error(zlog, "Warning: could not remove backup file."); /* Do not return an error anyway (no data is lost). */ } } if (dest_backup_name) { lib_free(dest_backup_name); } return retval; }