| /* |
| * Virtio 9p |
| * |
| * Copyright IBM, Corp. 2010 |
| * |
| * Authors: |
| * Gautham R Shenoy <ego@in.ibm.com> |
| * |
| * This work is licensed under the terms of the GNU GPL, version 2. See |
| * the COPYING file in the top-level directory. |
| * |
| */ |
| #include <stdio.h> |
| #include <string.h> |
| #include "qemu-fsdev.h" |
| #include "qemu-queue.h" |
| #include "osdep.h" |
| #include "qemu-common.h" |
| |
| static QTAILQ_HEAD(FsTypeEntry_head, FsTypeListEntry) fstype_entries = |
| QTAILQ_HEAD_INITIALIZER(fstype_entries); |
| |
| static FsTypeTable FsTypes[] = { |
| { .name = "local", .ops = &local_ops}, |
| }; |
| |
| int qemu_fsdev_add(QemuOpts *opts) |
| { |
| struct FsTypeListEntry *fsle; |
| int i; |
| |
| if (qemu_opts_id(opts) == NULL) { |
| fprintf(stderr, "fsdev: No id specified\n"); |
| return -1; |
| } |
| |
| for (i = 0; i < ARRAY_SIZE(FsTypes); i++) { |
| if (strcmp(FsTypes[i].name, qemu_opt_get(opts, "fstype")) == 0) { |
| break; |
| } |
| } |
| |
| if (i == ARRAY_SIZE(FsTypes)) { |
| fprintf(stderr, "fsdev: fstype %s not found\n", |
| qemu_opt_get(opts, "fstype")); |
| return -1; |
| } |
| |
| if (qemu_opt_get(opts, "security_model") == NULL) { |
| fprintf(stderr, "fsdev: No security_model specified.\n"); |
| return -1; |
| } |
| |
| fsle = qemu_malloc(sizeof(*fsle)); |
| |
| fsle->fse.fsdev_id = qemu_strdup(qemu_opts_id(opts)); |
| fsle->fse.path = qemu_strdup(qemu_opt_get(opts, "path")); |
| fsle->fse.security_model = qemu_strdup(qemu_opt_get(opts, |
| "security_model")); |
| fsle->fse.ops = FsTypes[i].ops; |
| |
| QTAILQ_INSERT_TAIL(&fstype_entries, fsle, next); |
| return 0; |
| |
| } |
| |
| FsTypeEntry *get_fsdev_fsentry(char *id) |
| { |
| struct FsTypeListEntry *fsle; |
| |
| QTAILQ_FOREACH(fsle, &fstype_entries, next) { |
| if (strcmp(fsle->fse.fsdev_id, id) == 0) { |
| return &fsle->fse; |
| } |
| } |
| return NULL; |
| } |