aboutsummaryrefslogtreecommitdiff
path: root/include/hw/usb/chipidea.h
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2021-02-26 12:08:16 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2021-03-06 11:41:54 +0100
commitf7544edcd32e602af1aae86714dc7c32350d5d7c (patch)
tree22185cf2eae0045437bd608fcb3d367a7a8a4162 /include/hw/usb/chipidea.h
parente20e182ea0ab5c16557603f457fe0db445b63726 (diff)
downloadqemu-f7544edcd32e602af1aae86714dc7c32350d5d7c.zip
qemu-f7544edcd32e602af1aae86714dc7c32350d5d7c.tar.gz
qemu-f7544edcd32e602af1aae86714dc7c32350d5d7c.tar.bz2
qemu-config: add error propagation to qemu_config_parse
This enables some simplification of vl.c via error_fatal, and improves error messages. Before: $ ./qemu-system-x86_64 -readconfig . qemu-system-x86_64: error reading file qemu-system-x86_64: -readconfig .: read config .: Invalid argument $ /usr/libexec/qemu-kvm -readconfig foo qemu-kvm: -readconfig foo: read config foo: No such file or directory After: $ ./qemu-system-x86_64 -readconfig . qemu-system-x86_64: -readconfig .: Cannot read config file: Is a directory $ ./qemu-system-x86_64 -readconfig foo qemu-system-x86_64: -readconfig foo: Could not open 'foo': No such file or directory Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20210226170816.231173-1-pbonzini@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'include/hw/usb/chipidea.h')
0 files changed, 0 insertions, 0 deletions
Unnamed repository; edit this file 'description' to name the repository.root
aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules/keyval.py
blob: b5608fe879c0233589b25686b5bc289b8d6f25df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# SPDX-License-Identifier: Apache-2.0
# Copyright 2017, 2019 The Meson development team

from __future__ import annotations

import os
import typing as T

from . import ExtensionModule, ModuleInfo
from .. import mesonlib
from ..interpreterbase import noKwargs, typed_pos_args

if T.TYPE_CHECKING:
    from ..interpreter import Interpreter
    from . import ModuleState

class KeyvalModule(ExtensionModule):

    INFO = ModuleInfo('keyval', '0.55.0', stabilized='0.56.0')

    def __init__(self, interp: 'Interpreter'):
        super().__init__(interp)
        self.methods.update({
            'load': self.load,
        })

    @staticmethod
    def _load_file(path_to_config: str) -> T.Dict[str, str]:
        result: T.Dict[str, str] = {}
        try:
            with open(path_to_config, encoding='utf-8') as f:
                for line in f:
                    if '#' in line:
                        comment_idx = line.index('#')
                        line = line[:comment_idx]
                    line = line.strip()
                    try:
                        name, val = line.split('=', 1)
                    except ValueError:
                        continue
                    result[name.strip()] = val.strip()
        except OSError as e:
            raise mesonlib.MesonException(f'Failed to load {path_to_config}: {e}')

        return result

    @noKwargs
    @typed_pos_args('keyval.load', (str, mesonlib.File))
    def load(self, state: 'ModuleState', args: T.Tuple['mesonlib.FileOrString'], kwargs: T.Dict[str, T.Any]) -> T.Dict[str, str]:
        s = args[0]
        is_built = False
        if isinstance(s, mesonlib.File):
            is_built = is_built or s.is_built
            s = s.absolute_path(self.interpreter.environment.source_dir, self.interpreter.environment.build_dir)
        else:
            s = os.path.join(self.interpreter.environment.source_dir, s)

        if not is_built:
            self.interpreter.build_def_files.add(s)

        return self._load_file(s)


def initialize(interp: 'Interpreter') -> KeyvalModule:
    return KeyvalModule(interp)