Commit dcfb0939 authored by Kevin Wolf's avatar Kevin Wolf
Browse files

qemu-config: qemu_read_config_file() reads the normal config file



Introduce a new function qemu_read_config_file which reads the VM configuration
from a config file. Unlike qemu_config_parse it doesn't take a open file but a
filename and reduces code duplication as a side effect.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 6c557ab9
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -488,3 +488,18 @@ out:
    loc_pop(&loc);
    return res;
}

int qemu_read_config_file(const char *filename)
{
    FILE *f = fopen(filename, "r");
    if (f == NULL) {
        return -errno;
    }

    if (qemu_config_parse(f, filename) != 0) {
        return -EINVAL;
    }
    fclose(f);

    return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -19,4 +19,6 @@ void qemu_add_globals(void);
void qemu_config_write(FILE *fp);
int qemu_config_parse(FILE *fp, const char *fname);

int qemu_read_config_file(const char *filename);

#endif /* QEMU_CONFIG_H */
+11 −24
Original line number Diff line number Diff line
@@ -2653,26 +2653,17 @@ int main(int argc, char **argv, char **envp)
    }

    if (defconfig) {
        const char *fname;
        FILE *fp;
        int ret;

        fname = CONFIG_QEMU_CONFDIR "/qemu.conf";
        fp = fopen(fname, "r");
        if (fp) {
            if (qemu_config_parse(fp, fname) != 0) {
        ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf");
        if (ret == -EINVAL) {
            exit(1);
        }
            fclose(fp);
        }

        fname = arch_config_name;
        fp = fopen(fname, "r");
        if (fp) {
            if (qemu_config_parse(fp, fname) != 0) {
        ret = qemu_read_config_file(arch_config_name);
        if (ret == -EINVAL) {
            exit(1);
        }
            fclose(fp);
        }
    }
    cpudef_init();

@@ -3327,16 +3318,12 @@ int main(int argc, char **argv, char **envp)
                break;
            case QEMU_OPTION_readconfig:
                {
                    FILE *fp;
                    fp = fopen(optarg, "r");
                    if (fp == NULL) {
                        fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
                        exit(1);
                    }
                    if (qemu_config_parse(fp, optarg) != 0) {
                    int ret = qemu_read_config_file(optarg);
                    if (ret < 0) {
                        fprintf(stderr, "read config %s: %s\n", optarg,
                            strerror(-ret));
                        exit(1);
                    }
                    fclose(fp);
                    break;
                }
            case QEMU_OPTION_writeconfig: