static void run_dedupe_gc(const char* other_sd) { ensure_path_mounted("/sdcard"); nandroid_dedupe_gc("/sdcard/clockworkmod/blobs"); if (other_sd) { ensure_path_mounted(other_sd); char tmp[PATH_MAX]; sprintf(tmp, "%s/clockworkmod/blobs", other_sd); nandroid_dedupe_gc(tmp); } }
static int dedupe_compress_wrapper(const char* backup_path, const char* backup_file_image, int callback) { char tmp[PATH_MAX]; char blob_dir[PATH_MAX]; strcpy(blob_dir, backup_file_image); char *d = dirname(blob_dir); strcpy(blob_dir, d); d = dirname(blob_dir); strcpy(blob_dir, d); d = dirname(blob_dir); strcpy(blob_dir, d); strcat(blob_dir, "/blobs"); ensure_directory(blob_dir); if (!(nandroid_backup_bitfield & NANDROID_FIELD_DEDUPE_CLEARED_SPACE)) { nandroid_backup_bitfield |= NANDROID_FIELD_DEDUPE_CLEARED_SPACE; nandroid_dedupe_gc(blob_dir); } sprintf(tmp, "dedupe c %s %s %s.dup %s", backup_path, blob_dir, backup_file_image, strcmp(backup_path, "/data") == 0 && is_data_media() ? "./media" : ""); FILE *fp = __popen(tmp, "r"); if (fp == NULL) { ui_print("Unable to execute dedupe.\n"); return -1; } while (fgets(tmp, PATH_MAX, fp) != NULL) { tmp[PATH_MAX - 1] = NULL; if (callback) nandroid_callback(tmp); } return __pclose(fp); }