static int get_image_info(const char *device, char **send_from_p, char **format_p, int *blocksize) { int top_level; if (ploop_get_attr(device, "top", &top_level)) { ploop_err(0, "Can't find top delta"); return SYSEXIT_SYSFS; } if (ploop_get_attr(device, "block_size", blocksize)) { ploop_err(0, "Can't find block size"); return SYSEXIT_SYSFS; } if (find_delta_names(device, top_level, top_level, send_from_p, format_p)) { ploop_err(errno, "find_delta_names"); return SYSEXIT_SYSFS; } return 0; }
static int open_top_delta(const char *device, struct delta *delta, int *lvl) { char *image = NULL; char *fmt = NULL; if (ploop_get_attr(device, "top", lvl)) { ploop_err(0, "Can't find top delta"); return(SYSEXIT_SYSFS); } if (find_delta_names(device, *lvl, *lvl, &image, &fmt)) return(SYSEXIT_SYSFS); if (strcmp(fmt, "raw") == 0) { ploop_err(0, "Ballooning for raw format is not supported"); return(SYSEXIT_PARAM); } if (open_delta(delta, image, O_RDONLY|O_DIRECT, OD_ALLOW_DIRTY)) { ploop_err(errno, "open_delta"); return(SYSEXIT_OPEN); } return 0; }