int devmapper_stop(struct devmapping *dm) { int rc; LOG_VOL("devmapper_stop():"); if ((rc = destroy_devmapping(dm))) return rc; if (dm->src_type == dmsrc_loopback) { if ((rc = loopback_stop(dm))) return rc; } else if (dm->src_type == dmsrc_partition) { LOGE("partition maps not yet supported"); return -ENOSYS; } return 0; }
static int do_set_ums_enable(char *cmd) { #ifdef ADD_ISO static struct devmapping *loop = NULL; static struct devmapping loopback; static char devpath[4096]; // TODO: lun_syspath を変更する必要がある。 static char *lun_syspath = "/sys/devices/platform/s3c-usbgadget/gadget/lun0/file"; LOG_VOL("do_set_ums_enable:%s:%s\n", cmd, lun_syspath); if (!strcmp(cmd, VOLD_CMD_ENABLE_UMS_SD)) { loop = NULL; LOG_VOL("do_set_ums_enable:%s\n", VOLD_CMD_ENABLE_UMS_SD); return volmgr_enable_ums(true); } else if (!strncmp(cmd, VOLD_CMD_ENABLE_UMS_CD, strlen(VOLD_CMD_ENABLE_UMS_CD))) { /* ループバックデバイスパスの取得 */ LOG_VOL("do_set_ums_enable:%s\n", VOLD_CMD_ENABLE_UMS_CD); int rc = 0; memset(devpath, 0, 4096); memcpy(devpath, &cmd[strlen(VOLD_CMD_ENABLE_UMS_CD)], strlen(&cmd[strlen(VOLD_CMD_ENABLE_UMS_CD)])); LOG_VOL("do_set_ums_enable devpath=%s\n", devpath); /* ループバックデバイスの登録 */ loopback.src_type = dmsrc_loopback; loopback.type_data.loop.loop_src = devpath; loopback.type_data.loop.loop_dev = NULL; rc = loopback_start(&loopback); if (rc) { LOGE("loopback_start err=%d\n", rc); } /* ループバックデバイスパスをカーネルに追加する */ /* カーネルにはloopback dev登録であることを知らせナイトね */ rc = ums_enable(loopback.type_data.loop.loop_dev, lun_syspath, false); if (rc) { LOGE("ums_enable err=%d\n", rc); } loop = &loopback; return 0; } else { int ret = 0; LOG_VOL("do_set_ums_enable:%s\n", "disable_ums\n"); if (loop) { int rc; rc = ums_disable(lun_syspath); if (rc) { LOGE("ums_enable err=%d\n", rc); } /* ループバックデバイスの解除 */ rc = loopback_stop(loop); if (rc) { LOGE("loopback_stop err=%d\n", rc); } else { free(loopback.type_data.loop.loop_dev); loopback.type_data.loop.loop_dev = NULL; } } else { ret = volmgr_enable_ums(false); } loop = NULL; return ret; } #else if (!strcmp(cmd, VOLD_CMD_ENABLE_UMS)) return volmgr_enable_ums(true); return volmgr_enable_ums(false); #endif /* ADD_ISO */ }