diff -Nru libxmlb-0.1.15/contrib/ci/abidiff.suppr libxmlb-0.1.8/contrib/ci/abidiff.suppr --- libxmlb-0.1.15/contrib/ci/abidiff.suppr 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/abidiff.suppr 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -[suppress_type] - type_kind = enum - changed_enumerators = XB_BUILDER_NODE_FLAG_LAST,XB_BUILDER_SOURCE_FLAG_LAST,XB_BUILDER_COMPILE_FLAG_LAST,XB_MACHINE_DEBUG_FLAG_LAST,XB_MACHINE_PARSE_FLAG_LAST,XB_NODE_EXPORT_FLAG_LAST,XB_OPCODE_FLAG_LAST,XB_OPCODE_KIND_LAST,XB_SILO_QUERY_KIND_LAST,XB_QUERY_FLAG_LAST,XB_SILO_LOAD_FLAG_LAST,XB_SILO_PROFILE_FLAG_LAST diff -Nru libxmlb-0.1.15/contrib/ci/build_and_test.sh libxmlb-0.1.8/contrib/ci/build_and_test.sh --- libxmlb-0.1.15/contrib/ci/build_and_test.sh 1970-01-01 00:00:00.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/build_and_test.sh 2019-03-26 10:04:46.000000000 +0000 @@ -0,0 +1,15 @@ +#!/bin/sh +set -e +export LC_ALL=C.UTF-8 +mkdir -p build && cd build +rm * -rf +meson .. \ + -Db_coverage=true \ + -Dgtkdoc=true \ + -Dtests=true $@ +ninja -v || bash +ninja test -v +ninja coverage-text +cat meson-logs/coverage.txt +DESTDIR=/tmp/install-ninja ninja install +cd .. diff -Nru libxmlb-0.1.15/contrib/ci/build-debian.sh libxmlb-0.1.8/contrib/ci/build-debian.sh --- libxmlb-0.1.15/contrib/ci/build-debian.sh 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/build-debian.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -#!/bin/sh -set -e -export LC_ALL=C.UTF-8 -mkdir -p build && cd build -rm * -rf -meson .. \ - -Dgtkdoc=true \ - -Dtests=true $@ -ninja -v || bash -ninja test -v -DESTDIR=/tmp/install-ninja ninja install -cd .. diff -Nru libxmlb-0.1.15/contrib/ci/build-fedora.sh libxmlb-0.1.8/contrib/ci/build-fedora.sh --- libxmlb-0.1.15/contrib/ci/build-fedora.sh 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/build-fedora.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -#!/bin/sh -set -e -export LC_ALL=C.UTF-8 -mkdir -p build && cd build -rm * -rf -meson .. \ - -Db_coverage=true \ - -Dgtkdoc=true \ - -Dtests=true $@ -ninja -v || bash -ninja test -v -ninja coverage-text -cat meson-logs/coverage.txt -DESTDIR=/tmp/install-ninja ninja install -cd .. diff -Nru libxmlb-0.1.15/contrib/ci/build-fedora-w64.sh libxmlb-0.1.8/contrib/ci/build-fedora-w64.sh --- libxmlb-0.1.15/contrib/ci/build-fedora-w64.sh 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/build-fedora-w64.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -#!/bin/sh -set -e -export LC_ALL=C.UTF-8 -mkdir -p build && cd build -rm * -rf -meson .. \ - --cross-file=../contrib/mingw64.cross \ - -Dintrospection=false \ - -Dgtkdoc=false \ - -Dtests=true $@ -ninja -v || bash -wine reg add "HKEY_CURRENT_USER\Environment" /v PATH /d /usr/x86_64-w64-mingw32/sys-root/mingw/bin -ninja test -v -DESTDIR=/tmp/install-ninja ninja install -cd .. diff -Nru libxmlb-0.1.15/contrib/ci/check-abi libxmlb-0.1.8/contrib/ci/check-abi --- libxmlb-0.1.15/contrib/ci/check-abi 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/check-abi 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -#!/usr/bin/python3 - - -import argparse -import contextlib -import os -import shutil -import subprocess -import sys - - -def format_title(title): - box = { - 'tl': '╔', 'tr': '╗', 'bl': '╚', 'br': '╝', 'h': '═', 'v': '║', - } - hline = box['h'] * (len(title) + 2) - - return '\n'.join([ - f"{box['tl']}{hline}{box['tr']}", - f"{box['v']} {title} {box['v']}", - f"{box['bl']}{hline}{box['br']}", - ]) - - -def rm_rf(path): - try: - shutil.rmtree(path) - except FileNotFoundError: - pass - - -def sanitize_path(name): - return name.replace('/', '-') - - -def get_current_revision(): - revision = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], - encoding='utf-8').strip() - - if revision == 'HEAD': - # This is a detached HEAD, get the commit hash - revision = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('utf-8') - - return revision - - -@contextlib.contextmanager -def checkout_git_revision(revision): - current_revision = get_current_revision() - subprocess.check_call(['git', 'checkout', '-q', revision]) - - try: - yield - finally: - subprocess.check_call(['git', 'checkout', '-q', current_revision]) - - -def build_install(revision): - build_dir = '_build' - dest_dir = os.path.abspath(sanitize_path(revision)) - print(format_title(f'# Building and installing {revision} in {dest_dir}'), - end='\n\n', flush=True) - - with checkout_git_revision(revision): - rm_rf(build_dir) - rm_rf(revision) - - subprocess.check_call(['meson', build_dir, - '--prefix=/usr', '--libdir=lib', - '-Db_coverage=false', '-Dgtkdoc=false', '-Dtests=false']) - subprocess.check_call(['ninja', '-v', '-C', build_dir]) - subprocess.check_call(['ninja', '-v', '-C', build_dir, 'install'], - env={'DESTDIR': dest_dir}) - - return dest_dir - - -def compare(old_tree, new_tree): - print(format_title(f'# Comparing the two ABIs'), end='\n\n', flush=True) - - old_headers = os.path.join(old_tree, 'usr', 'include') - old_lib = os.path.join(old_tree, 'usr', 'lib', 'libxmlb.so') - - new_headers = os.path.join(new_tree, 'usr', 'include') - new_lib = os.path.join(new_tree, 'usr', 'lib', 'libxmlb.so') - - subprocess.check_call([ - 'abidiff', '--headers-dir1', old_headers, '--headers-dir2', new_headers, - '--drop-private-types', '--suppressions', 'contrib/ci/abidiff.suppr', - '--fail-no-debug-info', '--no-added-syms', old_lib, new_lib]) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - - parser.add_argument('old', help='the previous revision, considered the reference') - parser.add_argument('new', help='the new revision, to compare to the reference') - - args = parser.parse_args() - - if args.old == args.new: - print("Let's not waste time comparing something to itself") - sys.exit(0) - - old_tree = build_install(args.old) - new_tree = build_install(args.new) - - try: - compare(old_tree, new_tree) - - except Exception: - sys.exit(1) - - print(f'Hurray! {args.old} and {args.new} are ABI-compatible!') diff -Nru libxmlb-0.1.15/contrib/ci/Dockerfile-debian libxmlb-0.1.8/contrib/ci/Dockerfile-debian --- libxmlb-0.1.15/contrib/ci/Dockerfile-debian 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/Dockerfile-debian 2019-03-26 10:04:46.000000000 +0000 @@ -6,18 +6,11 @@ gobject-introspection \ gtk-doc-tools \ libgirepository1.0-dev \ - libglib2.0-bin \ libglib2.0-dev \ libstemmer-dev \ - ninja-build \ - python3-pip \ - python3-setuptools \ - python3-wheel \ shared-mime-info \ uuid-dev \ + meson \ pkg-config - -# Meson is too old in unstable, and that won't change until Buster is released -RUN pip3 install meson - +RUN mkdir /build WORKDIR /build diff -Nru libxmlb-0.1.15/contrib/ci/Dockerfile-fedora libxmlb-0.1.8/contrib/ci/Dockerfile-fedora --- libxmlb-0.1.15/contrib/ci/Dockerfile-fedora 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/Dockerfile-fedora 2019-03-26 10:04:46.000000000 +0000 @@ -1,18 +1,16 @@ -FROM fedora:31 +FROM fedora:28 RUN dnf -y update RUN dnf -y install \ - diffutils \ gcovr \ - git-core \ glib2-devel \ gobject-introspection-devel \ gtk-doc \ - libabigail \ libstemmer-devel \ libuuid-devel \ meson \ shared-mime-info \ redhat-rpm-config +RUN mkdir /build WORKDIR /build diff -Nru libxmlb-0.1.15/contrib/ci/Dockerfile-fedora-w64 libxmlb-0.1.8/contrib/ci/Dockerfile-fedora-w64 --- libxmlb-0.1.15/contrib/ci/Dockerfile-fedora-w64 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/ci/Dockerfile-fedora-w64 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -FROM fedora:31 - -RUN dnf -y update -RUN dnf -y install \ - diffutils \ - gcc \ - git-core \ - meson \ - mingw64-gcc \ - mingw64-glib2 \ - mingw64-pkg-config \ - redhat-rpm-config \ - shared-mime-info \ - wine-core - -WORKDIR /build diff -Nru libxmlb-0.1.15/contrib/libxmlb.spec.in libxmlb-0.1.8/contrib/libxmlb.spec.in --- libxmlb-0.1.15/contrib/libxmlb.spec.in 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/libxmlb.spec.in 2019-03-26 10:04:46.000000000 +0000 @@ -13,13 +13,9 @@ BuildRequires: glib2-devel >= %{glib2_version} BuildRequires: gtk-doc BuildRequires: libstemmer-devel +BuildRequires: libuuid-devel BuildRequires: meson BuildRequires: gobject-introspection-devel -%if 0%{?rhel} == 7 -BuildRequires: python36-setuptools -%else -BuildRequires: python-setuptools -%endif # needed for the self tests BuildRequires: shared-mime-info @@ -90,9 +86,8 @@ %{_libdir}/pkgconfig/xmlb.pc %files tests -%{_libexecdir}/installed-tests/libxmlb/xb-self-test +%{_libexecdir}/xb-self-test %{_datadir}/installed-tests/libxmlb/libxmlb.test -%{_datadir}/installed-tests/libxmlb/test.xml.gz.gz.gz %dir %{_datadir}/installed-tests/libxmlb %changelog diff -Nru libxmlb-0.1.15/contrib/mingw64.cross libxmlb-0.1.8/contrib/mingw64.cross --- libxmlb-0.1.15/contrib/mingw64.cross 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/contrib/mingw64.cross 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -[binaries] -c = '/usr/bin/x86_64-w64-mingw32-gcc' -cpp = '/usr/bin/x86_64-w64-mingw32-g++' -ar = '/usr/bin/x86_64-w64-mingw32-ar' -strip = '/usr/bin/x86_64-w64-mingw32-strip' -pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config' -exe_wrapper = 'wine' - -[host_machine] -system = 'windows' -cpu_family = 'x86_64' -cpu = 'i686' -endian = 'little' diff -Nru libxmlb-0.1.15/data/libxmlb.test.in libxmlb-0.1.8/data/libxmlb.test.in --- libxmlb-0.1.15/data/libxmlb.test.in 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/data/libxmlb.test.in 2019-03-26 10:04:46.000000000 +0000 @@ -1,3 +1,3 @@ [Test] Type=session -Exec=@installed_test_bindir@/xb-self-test +Exec=@libexecdir@/xb-self-test diff -Nru libxmlb-0.1.15/data/meson.build libxmlb-0.1.8/data/meson.build --- libxmlb-0.1.15/data/meson.build 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/data/meson.build 2019-03-26 10:04:46.000000000 +0000 @@ -1,13 +1,7 @@ -if get_option('tests') and host_machine.system() != 'windows' - configure_file( - input : 'libxmlb.test.in', - output : 'libxmlb.test', - configuration : conf, - install: true, - install_dir: installed_test_datadir, - ) - - install_data(['test.xml.gz.gz.gz'], - install_dir: installed_test_datadir, - ) -endif +configure_file( + input : 'libxmlb.test.in', + output : 'libxmlb.test', + configuration : conf, + install: true, + install_dir: join_paths('share', 'installed-tests', 'libxmlb'), +) diff -Nru libxmlb-0.1.15/debian/changelog libxmlb-0.1.8/debian/changelog --- libxmlb-0.1.15/debian/changelog 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/changelog 2020-06-09 17:21:18.000000000 +0000 @@ -1,47 +1,18 @@ -libxmlb (0.1.15-2) unstable; urgency=medium +libxmlb (0.1.8-1~ubuntu18.04.2) bionic-security; urgency=medium - * Team upload. - * Bump debhelper compatibility to 12 - * debian/control: Bump Standards-Version to 4.5.0 (no further changes) - * debian/control: Add libglib2.0-doc to the BD to fix the links between the - gtk-doc files - * debian/libxmlb-dev.install: Install the .gir file and add the proper - dependencies - * debian/rules: Run the gir sequence - * Ship the installed-tests in new libxmlb-tests package - * debian/control: Build gir1.2-xmlb-1.0 on all architectures - * d/p/tests-Make-the-build-reproducible.patch: Make the installed tests - reproductible - * debian/libxmlb1.symbols: Add the Build-Depends-Package field - * debian/control: Drop uuid-dev BD, this is not needed since 0.1.14 - * debian/control: Fix the short description of gir1.2-xmlb-1.0 - (Closes: #921833) + * No changes rebuild - -- Laurent Bigonville Thu, 02 Apr 2020 19:39:22 +0200 + -- Leonidas S. Barbosa Tue, 09 Jun 2020 14:21:18 -0300 -libxmlb (0.1.15-1) unstable; urgency=medium +libxmlb (0.1.8-1~ubuntu18.04.1) bionic; urgency=medium - * New upstream version (0.1.15) + * Upload of libxmlb to bionic, it's needed to update fwupd to the + current upstream version (lp: #1820768) + * debian/patches/old_meson_build.patch: + - don't require a newer-than-bionic meson version to build, + thanks Mario Limonciello - -- Mario Limonciello Wed, 04 Mar 2020 11:51:10 -0600 - -libxmlb (0.1.14-1) unstable; urgency=medium - - * New upstream version (0.1.14) - - -- Mario Limonciello Tue, 03 Dec 2019 10:22:05 -0600 - -libxmlb (0.1.13-2) unstable; urgency=medium - - * Add debian/symbols (Closes: #945204) - - -- Mario Limonciello Thu, 21 Nov 2019 13:29:23 -0600 - -libxmlb (0.1.13-1) unstable; urgency=medium - - * New upstream version (0.1.13) - - -- Mario Limonciello Thu, 17 Oct 2019 06:31:23 -0500 + -- Sebastien Bacher Thu, 09 May 2019 16:50:27 +0200 libxmlb (0.1.8-1) unstable; urgency=medium diff -Nru libxmlb-0.1.15/debian/compat libxmlb-0.1.8/debian/compat --- libxmlb-0.1.15/debian/compat 1970-01-01 00:00:00.000000000 +0000 +++ libxmlb-0.1.8/debian/compat 2019-03-26 20:45:02.000000000 +0000 @@ -0,0 +1 @@ +9 diff -Nru libxmlb-0.1.15/debian/control libxmlb-0.1.8/debian/control --- libxmlb-0.1.15/debian/control 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/control 2020-06-09 17:21:18.000000000 +0000 @@ -1,32 +1,33 @@ Source: libxmlb Section: libs Priority: optional -Maintainer: Debian EFI team +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian EFI team Uploaders: Steve McIntyre <93sam@debian.org>, Matthias Klumpp , Mario Limonciello -Build-Depends: debhelper-compat (=12), +Build-Depends: debhelper (>=9), gir1.2-glib-2.0, gobject-introspection, gtk-doc-tools, libglib2.0-dev, - libglib2.0-doc, libgirepository1.0-dev, - meson (>= 0.52.0), + meson, shared-mime-info, -Standards-Version: 4.5.0 + uuid-dev, +Standards-Version: 4.3.0 Homepage: https://github.com/hughsie/libxmlb Vcs-Git: https://salsa.debian.org/efi-team/libxmlb.git Vcs-Browser: https://salsa.debian.org/efi-team/libxmlb Package: gir1.2-xmlb-1.0 -Architecture: any +Architecture: linux-any Multi-Arch: same Depends: ${misc:Depends}, ${gir:Depends} Section: introspection Description: GObject introspection data for libxmlb - This package provides the introspection data for libxmlb. + This package provides the introspection data for libfwupd. . It can be used by packages using the GIRepository format to generate dynamic bindings. @@ -36,7 +37,7 @@ Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} -Depends: ${misc:Depends}, ${shlibs:Depends}, gir1.2-xmlb-1.0 (= ${binary:Version}) +Depends: ${misc:Depends}, ${shlibs:Depends} Description: development files for libxmlb This package provides development libraryes for libxmlb. . @@ -62,20 +63,3 @@ This allows an application to mmap the binary XML file, do an XPath query and return some strings without actually parsing the entire document. This is all done using (almost) zero allocations and no actual copying of the binary data. - -Package: libxmlb-tests -Architecture: any -Depends: libxmlb1 (= ${binary:Version}), - shared-mime-info, - ${misc:Depends}, - ${shlibs:Depends} -Description: Installed tests for libxmlb1 - The libxmlb library takes XML source, and - converts it to a structured binary representation with a deduplicated string - table -- where the strings have the NULs included. - . - This allows an application to mmap the binary XML file, do an XPath query and - return some strings without actually parsing the entire document. This is all - done using (almost) zero allocations and no actual copying of the binary data. - . - This package contains the installed tests for libxmlb1. diff -Nru libxmlb-0.1.15/debian/libxmlb1.symbols libxmlb-0.1.8/debian/libxmlb1.symbols --- libxmlb-0.1.15/debian/libxmlb1.symbols 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/libxmlb1.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ -libxmlb.so.1 libxmlb1 #MINVER# -* Build-Depends-Package: libxmlb-dev - LIBXMLB_0.1.0@LIBXMLB_0.1.0 0.1.0 - LIBXMLB_0.1.11@LIBXMLB_0.1.11 0.1.11 - LIBXMLB_0.1.12@LIBXMLB_0.1.12 0.1.12 - LIBXMLB_0.1.13@LIBXMLB_0.1.13 0.1.13 - LIBXMLB_0.1.15@LIBXMLB_0.1.15 0.1.15 - LIBXMLB_0.1.1@LIBXMLB_0.1.1 0.1.1 - LIBXMLB_0.1.2@LIBXMLB_0.1.2 0.1.2 - LIBXMLB_0.1.3@LIBXMLB_0.1.3 0.1.3 - LIBXMLB_0.1.4@LIBXMLB_0.1.4 0.1.4 - LIBXMLB_0.1.5@LIBXMLB_0.1.5 0.1.5 - LIBXMLB_0.1.6@LIBXMLB_0.1.6 0.1.6 - LIBXMLB_0.1.7@LIBXMLB_0.1.7 0.1.7 - xb_builder_add_fixup@LIBXMLB_0.1.3 0.1.3 - xb_builder_add_locale@LIBXMLB_0.1.0 0.1.0 - xb_builder_append_guid@LIBXMLB_0.1.0 0.1.0 - xb_builder_compile@LIBXMLB_0.1.0 0.1.0 - xb_builder_ensure@LIBXMLB_0.1.0 0.1.0 - xb_builder_fixup_get_max_depth@LIBXMLB_0.1.3 0.1.3 - xb_builder_fixup_get_type@LIBXMLB_0.1.3 0.1.3 - xb_builder_fixup_new@LIBXMLB_0.1.3 0.1.3 - xb_builder_fixup_set_max_depth@LIBXMLB_0.1.3 0.1.3 - xb_builder_get_type@LIBXMLB_0.1.0 0.1.0 - xb_builder_import_node@LIBXMLB_0.1.0 0.1.0 - xb_builder_import_source@LIBXMLB_0.1.0 0.1.0 - xb_builder_new@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_add_child@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_add_flag@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_depth@LIBXMLB_0.1.1 0.1.1 - xb_builder_node_export@LIBXMLB_0.1.5 0.1.5 - xb_builder_node_get_attr@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_get_attr_as_uint@LIBXMLB_0.1.3 0.1.3 - xb_builder_node_get_child@LIBXMLB_0.1.1 0.1.1 - xb_builder_node_get_children@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_get_element@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_get_first_child@LIBXMLB_0.1.12 0.1.12 - xb_builder_node_get_last_child@LIBXMLB_0.1.12 0.1.12 - xb_builder_node_get_parent@LIBXMLB_0.1.1 0.1.1 - xb_builder_node_get_tail@LIBXMLB_0.1.12 0.1.12 - xb_builder_node_get_text@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_get_text_as_uint@LIBXMLB_0.1.3 0.1.3 - xb_builder_node_get_type@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_has_flag@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_insert@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_insert_text@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_new@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_remove_attr@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_remove_child@LIBXMLB_0.1.1 0.1.1 - xb_builder_node_set_attr@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_set_element@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_set_tail@LIBXMLB_0.1.12 0.1.12 - xb_builder_node_set_text@LIBXMLB_0.1.0 0.1.0 - xb_builder_node_sort_children@LIBXMLB_0.1.3 0.1.3 - xb_builder_node_traverse@LIBXMLB_0.1.1 0.1.1 - xb_builder_node_unlink@LIBXMLB_0.1.1 0.1.1 - xb_builder_set_profile_flags@LIBXMLB_0.1.1 0.1.1 - xb_builder_source_add_adapter@LIBXMLB_0.1.7 0.1.7 - xb_builder_source_add_converter@LIBXMLB_0.1.1 0.1.1 - xb_builder_source_add_fixup@LIBXMLB_0.1.3 0.1.3 - xb_builder_source_add_node_func@LIBXMLB_0.1.0 0.1.0 - xb_builder_source_add_simple_adapter@LIBXMLB_0.1.15 0.1.15 - xb_builder_source_ctx_get_bytes@LIBXMLB_0.1.7 0.1.7 - xb_builder_source_ctx_get_filename@LIBXMLB_0.1.7 0.1.7 - xb_builder_source_ctx_get_stream@LIBXMLB_0.1.7 0.1.7 - xb_builder_source_ctx_get_type@LIBXMLB_0.1.7 0.1.7 - xb_builder_source_get_type@LIBXMLB_0.1.0 0.1.0 - xb_builder_source_load_bytes@LIBXMLB_0.1.2 0.1.3 - xb_builder_source_load_file@LIBXMLB_0.1.1 0.1.1 - xb_builder_source_load_xml@LIBXMLB_0.1.1 0.1.1 - xb_builder_source_new@LIBXMLB_0.1.1 0.1.1 - xb_builder_source_set_info@LIBXMLB_0.1.0 0.1.0 - xb_builder_source_set_prefix@LIBXMLB_0.1.0 0.1.10 - xb_machine_add_method@LIBXMLB_0.1.1 0.1.1 - xb_machine_add_opcode_fixup@LIBXMLB_0.1.1 0.1.1 - xb_machine_add_operator@LIBXMLB_0.1.1 0.1.1 - xb_machine_add_text_handler@LIBXMLB_0.1.1 0.1.1 - xb_machine_get_stack_size@LIBXMLB_0.1.3 0.1.3 - xb_machine_get_type@LIBXMLB_0.1.1 0.1.1 - xb_machine_new@LIBXMLB_0.1.1 0.1.1 - xb_machine_opcode_func_new@LIBXMLB_0.1.1 0.1.1 - xb_machine_opcode_to_string@LIBXMLB_0.1.1 0.1.1 - xb_machine_opcodes_to_string@LIBXMLB_0.1.1 0.1.1 - xb_machine_parse@LIBXMLB_0.1.1 0.1.1 - xb_machine_parse_full@LIBXMLB_0.1.4 0.1.4 - xb_machine_run@LIBXMLB_0.1.1 0.1.1 - xb_machine_set_debug_flags@LIBXMLB_0.1.1 0.1.1 - xb_machine_set_stack_size@LIBXMLB_0.1.3 0.1.3 - xb_machine_stack_pop@LIBXMLB_0.1.1 0.1.1 - xb_machine_stack_push@LIBXMLB_0.1.1 0.1.1 - xb_machine_stack_push_integer@LIBXMLB_0.1.1 0.1.1 - xb_machine_stack_push_steal@LIBXMLB_0.1.4 0.1.4 - xb_machine_stack_push_text@LIBXMLB_0.1.1 0.1.1 - xb_machine_stack_push_text_static@LIBXMLB_0.1.1 0.1.1 - xb_machine_stack_push_text_steal@LIBXMLB_0.1.1 0.1.1 - xb_node_export@LIBXMLB_0.1.0 0.1.0 - xb_node_get_attr@LIBXMLB_0.1.0 0.1.0 - xb_node_get_attr_as_uint@LIBXMLB_0.1.0 0.1.0 - xb_node_get_child@LIBXMLB_0.1.0 0.1.0 - xb_node_get_children@LIBXMLB_0.1.0 0.1.0 - xb_node_get_data@LIBXMLB_0.1.0 0.1.0 - xb_node_get_depth@LIBXMLB_0.1.0 0.1.0 - xb_node_get_element@LIBXMLB_0.1.0 0.1.0 - xb_node_get_next@LIBXMLB_0.1.0 0.1.0 - xb_node_get_parent@LIBXMLB_0.1.0 0.1.0 - xb_node_get_root@LIBXMLB_0.1.0 0.1.0 - xb_node_get_tail@LIBXMLB_0.1.12 0.1.12 - xb_node_get_text@LIBXMLB_0.1.0 0.1.0 - xb_node_get_text_as_uint@LIBXMLB_0.1.0 0.1.0 - xb_node_get_type@LIBXMLB_0.1.0 0.1.0 - xb_node_query@LIBXMLB_0.1.0 0.1.0 - xb_node_query_attr@LIBXMLB_0.1.0 0.1.0 - xb_node_query_attr_as_uint@LIBXMLB_0.1.0 0.1.0 - xb_node_query_export@LIBXMLB_0.1.0 0.1.0 - xb_node_query_first@LIBXMLB_0.1.0 0.1.0 - xb_node_query_first_full@LIBXMLB_0.1.11 0.1.11 - xb_node_query_full@LIBXMLB_0.1.4 0.1.4 - xb_node_query_text@LIBXMLB_0.1.0 0.1.0 - xb_node_query_text_as_uint@LIBXMLB_0.1.0 0.1.0 - xb_node_set_data@LIBXMLB_0.1.0 0.1.0 - xb_node_transmogrify@LIBXMLB_0.1.12 0.1.12 - xb_opcode_cmp_str@LIBXMLB_0.1.1 0.1.1 - xb_opcode_cmp_val@LIBXMLB_0.1.1 0.1.1 - xb_opcode_func_new@LIBXMLB_0.1.1 0.1.1 - xb_opcode_get_kind@LIBXMLB_0.1.1 0.1.1 - xb_opcode_get_str@LIBXMLB_0.1.1 0.1.1 - xb_opcode_get_type@LIBXMLB_0.1.1 0.1.1 - xb_opcode_get_val@LIBXMLB_0.1.1 0.1.1 - xb_opcode_integer_new@LIBXMLB_0.1.1 0.1.1 - xb_opcode_kind_from_string@LIBXMLB_0.1.1 0.1.1 - xb_opcode_kind_to_string@LIBXMLB_0.1.1 0.1.1 - xb_opcode_ref@LIBXMLB_0.1.1 0.1.1 - xb_opcode_text_new@LIBXMLB_0.1.1 0.1.1 - xb_opcode_text_new_static@LIBXMLB_0.1.1 0.1.1 - xb_opcode_text_new_steal@LIBXMLB_0.1.1 0.1.1 - xb_opcode_to_string@LIBXMLB_0.1.4 0.1.4 - xb_opcode_unref@LIBXMLB_0.1.1 0.1.1 - xb_query_bind_str@LIBXMLB_0.1.4 0.1.4 - xb_query_bind_val@LIBXMLB_0.1.4 0.1.4 - xb_query_get_flags@LIBXMLB_0.1.15 0.1.15 - xb_query_get_limit@LIBXMLB_0.1.4 0.1.4 - xb_query_get_type@LIBXMLB_0.1.4 0.1.4 - xb_query_get_xpath@LIBXMLB_0.1.4 0.1.4 - xb_query_new@LIBXMLB_0.1.4 0.1.4 - xb_query_new_full@LIBXMLB_0.1.6 0.1.6 - xb_query_set_flags@LIBXMLB_0.1.15 0.1.15 - xb_query_set_limit@LIBXMLB_0.1.4 0.1.4 - xb_silo_export@LIBXMLB_0.1.0 0.1.0 - xb_silo_export_file@LIBXMLB_0.1.2 0.1.2 - xb_silo_get_bytes@LIBXMLB_0.1.0 0.1.0 - xb_silo_get_guid@LIBXMLB_0.1.0 0.1.0 - xb_silo_get_profile_string@LIBXMLB_0.1.1 0.1.1 - xb_silo_get_root@LIBXMLB_0.1.0 0.1.0 - xb_silo_get_size@LIBXMLB_0.1.0 0.1.0 - xb_silo_get_type@LIBXMLB_0.1.0 0.1.0 - xb_silo_invalidate@LIBXMLB_0.1.1 0.1.1 - xb_silo_is_valid@LIBXMLB_0.1.0 0.1.0 - xb_silo_load_from_bytes@LIBXMLB_0.1.0 0.1.0 - xb_silo_load_from_file@LIBXMLB_0.1.0 0.1.0 - xb_silo_new@LIBXMLB_0.1.0 0.1.0 - xb_silo_new_from_xml@LIBXMLB_0.1.0 0.1.0 - xb_silo_query@LIBXMLB_0.1.0 0.1.0 - xb_silo_query_build_index@LIBXMLB_0.1.4 0.1.4 - xb_silo_query_first@LIBXMLB_0.1.0 0.1.0 - xb_silo_query_first_full@LIBXMLB_0.1.13 0.1.13 - xb_silo_query_full@LIBXMLB_0.1.13 0.1.13 - xb_silo_save_to_file@LIBXMLB_0.1.0 0.1.0 - xb_silo_set_profile_flags@LIBXMLB_0.1.1 0.1.1 - xb_silo_to_string@LIBXMLB_0.1.0 0.1.0 - xb_silo_watch_file@LIBXMLB_0.1.0 0.1.0 - xb_stack_get_type@LIBXMLB_0.1.3 0.1.4 - xb_stack_pop@LIBXMLB_0.1.3 0.1.4 - xb_stack_push@LIBXMLB_0.1.3 0.1.4 - xb_stack_push_steal@LIBXMLB_0.1.3 0.1.3 - xb_stack_to_string@LIBXMLB_0.1.4 0.1.4 - xb_string_append_union@LIBXMLB_0.1.2 0.1.2 - xb_string_escape@LIBXMLB_0.1.2 0.1.2 diff -Nru libxmlb-0.1.15/debian/libxmlb-dev.install libxmlb-0.1.8/debian/libxmlb-dev.install --- libxmlb-0.1.15/debian/libxmlb-dev.install 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/libxmlb-dev.install 2019-03-26 20:45:02.000000000 +0000 @@ -1,6 +1,5 @@ usr/include/ usr/lib/*/*.so usr/lib/*/pkgconfig -usr/share/gir-1.0 usr/share/gtk-doc usr/lib/*/xb-tool diff -Nru libxmlb-0.1.15/debian/libxmlb-tests.install libxmlb-0.1.8/debian/libxmlb-tests.install --- libxmlb-0.1.15/debian/libxmlb-tests.install 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/libxmlb-tests.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/libexec/installed-tests -usr/share/installed-tests diff -Nru libxmlb-0.1.15/debian/patches/old_meson_build.patch libxmlb-0.1.8/debian/patches/old_meson_build.patch --- libxmlb-0.1.15/debian/patches/old_meson_build.patch 1970-01-01 00:00:00.000000000 +0000 +++ libxmlb-0.1.8/debian/patches/old_meson_build.patch 2019-05-09 14:55:59.000000000 +0000 @@ -0,0 +1,87 @@ +From 378e1c3049ec94f344c2d8f336e84b5a1b0fdb31 Mon Sep 17 00:00:00 2001 +From: Mario Limonciello +Date: Mon, 11 Mar 2019 15:51:41 -0500 +Subject: [PATCH] Allow compilation on older versions of meson + +This reverts commit 96437763b2b179e402e2660c06a0036397c29fcd +and makes adjustments to dynamically decide what to do based upon +meson version. + +This is intended to be used for backporting libxmlb to 18.04. +--- + meson.build | 20 +++++++++++++++----- + src/libxmlb/meson.build | 18 +++++++++++++----- + 2 files changed, 28 insertions(+), 10 deletions(-) + +Index: libxmlb-0.1.8/meson.build +=================================================================== +--- libxmlb-0.1.8.orig/meson.build ++++ libxmlb-0.1.8/meson.build +@@ -1,7 +1,7 @@ + project('libxmlb', 'c', + version : '0.1.8', + license : 'LGPL-2.1+', +- meson_version : '>=0.47.0', ++ meson_version : '>=0.45.0', + default_options : ['warning_level=2', 'c_std=c99'], + ) + +@@ -90,8 +90,14 @@ test_link_args = [ + '-Wl,-z,now', + ] + foreach link_arg: test_link_args +- if cc.has_link_argument(link_arg) +- global_link_args += link_arg ++ if meson.version().version_compare('>=0.46.0') ++ if cc.has_link_argument(link_arg) ++ global_link_args += link_arg ++ endif ++ else ++ if cc.has_argument(link_arg) ++ global_link_args += link_arg ++ endif + endif + endforeach + add_project_link_arguments( +@@ -132,8 +138,12 @@ configure_file( + configuration : conf + ) + +-python = import('python') +-python3 = python.find_installation('python3') ++if meson.version().version_compare('>=0.46.0') ++ python = import('python') ++ python3 = python.find_installation('python3') ++else ++ python3 = find_program('python3') ++endif + + subdir('data') + subdir('src') +Index: libxmlb-0.1.8/src/libxmlb/meson.build +=================================================================== +--- libxmlb-0.1.8.orig/src/libxmlb/meson.build ++++ libxmlb-0.1.8/src/libxmlb/meson.build +@@ -2,9 +2,17 @@ + # in order for including the headers from parent projects to work + # until https://github.com/mesonbuild/meson/issues/2546 is fixed + foreach header : xb_headers +- configure_file( +- copy : true, +- input : header, +- output : '@PLAINNAME@', +- ) ++ if meson.version().version_compare('>=0.47.0') ++ configure_file( ++ copy : true, ++ input : header, ++ output : '@PLAINNAME@', ++ ) ++ else ++ configure_file( ++ configuration : configuration_data(), ++ input : header, ++ output : '@PLAINNAME@', ++ ) ++ endif + endforeach diff -Nru libxmlb-0.1.15/debian/patches/series libxmlb-0.1.8/debian/patches/series --- libxmlb-0.1.15/debian/patches/series 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/patches/series 2019-05-09 14:55:53.000000000 +0000 @@ -1 +1 @@ -tests-Make-the-build-reproducible.patch +old_meson_build.patch diff -Nru libxmlb-0.1.15/debian/patches/tests-Make-the-build-reproducible.patch libxmlb-0.1.8/debian/patches/tests-Make-the-build-reproducible.patch --- libxmlb-0.1.15/debian/patches/tests-Make-the-build-reproducible.patch 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/patches/tests-Make-the-build-reproducible.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -From: Laurent Bigonville -Date: Sat, 21 Mar 2020 13:32:58 +0100 -Subject: tests: Make the build reproducible - ---- - meson.build | 2 +- - src/meson.build | 5 +++-- - src/xb-self-test.c | 8 +++++--- - 3 files changed, 9 insertions(+), 6 deletions(-) - -diff --git a/meson.build b/meson.build -index 38486c9..475cee4 100644 ---- a/meson.build -+++ b/meson.build -@@ -1,7 +1,7 @@ - project('libxmlb', 'c', - version : '0.1.15', - license : 'LGPL-2.1+', -- meson_version : '>=0.47.0', -+ meson_version : '>=0.52.0', - default_options : ['warning_level=2', 'c_std=c99'], - ) - -diff --git a/src/meson.build b/src/meson.build -index 936cc1d..ffbd97d 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -184,6 +184,8 @@ if get_option('introspection') - endif - - if get_option('tests') -+ testdir = environment({'TESTDIR' : join_paths(meson.current_source_dir(), '..', 'data')}) -+ - e = executable( - 'xb-self-test', - sources : [ -@@ -209,7 +211,6 @@ if get_option('tests') - configinc, - ], - c_args : [ -- '-DTESTDIR="@0@/../data"'.format(meson.current_source_dir()), - '-DINSTALLEDTESTDIR="' + installed_test_datadir + '"', - ], - dependencies : [ -@@ -219,5 +220,5 @@ if get_option('tests') - install : true, - install_dir : installed_test_bindir - ) -- test('xb-self-test', e) -+ test('xb-self-test', e, env : testdir) - endif -diff --git a/src/xb-self-test.c b/src/xb-self-test.c -index f1b4f2a..85cf062 100644 ---- a/src/xb-self-test.c -+++ b/src/xb-self-test.c -@@ -449,6 +449,7 @@ static void - xb_builder_chained_adapters_func (void) - { - gboolean ret; -+ const gchar *testdir; - g_autofree gchar *xml = NULL; - g_autofree gchar *path = NULL; - g_autofree gchar *tmp_xmlb = g_build_filename (g_get_tmp_dir (), "temp.xmlb", NULL); -@@ -460,9 +461,10 @@ xb_builder_chained_adapters_func (void) - g_autoptr(XbSilo) silo = NULL; - - /* import a source file */ -- path = g_build_filename (TESTDIR, "test.xml.gz.gz.gz", NULL); -- if (!g_file_test (path, G_FILE_TEST_EXISTS)) { -- g_free (path); -+ testdir = g_getenv ("TESTDIR"); -+ if (testdir != NULL) { -+ path = g_build_filename (testdir, "test.xml.gz.gz.gz", NULL); -+ } else { - path = g_build_filename (INSTALLEDTESTDIR, "test.xml.gz.gz.gz", NULL); - } - file_src = g_file_new_for_path (path); diff -Nru libxmlb-0.1.15/debian/rules libxmlb-0.1.8/debian/rules --- libxmlb-0.1.15/debian/rules 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/rules 2019-03-26 20:45:02.000000000 +0000 @@ -1,8 +1,4 @@ #!/usr/bin/make -f %: - dh $@ --with gir - -override_dh_install-arch: - mv debian/tmp/usr/libexec/xb-tool debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) - dh_install -a + dh $@ diff -Nru libxmlb-0.1.15/debian/tests/control libxmlb-0.1.8/debian/tests/control --- libxmlb-0.1.15/debian/tests/control 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/tests/control 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -Tests: installed-tests -Depends: gnome-desktop-testing, libxmlb-tests diff -Nru libxmlb-0.1.15/debian/tests/installed-tests libxmlb-0.1.8/debian/tests/installed-tests --- libxmlb-0.1.15/debian/tests/installed-tests 2020-04-02 17:39:22.000000000 +0000 +++ libxmlb-0.1.8/debian/tests/installed-tests 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#!/bin/sh - -set -e - -gnome-desktop-testing-runner libxmlb diff -Nru libxmlb-0.1.15/docs/libxmlb-docs.xml libxmlb-0.1.8/docs/libxmlb-docs.xml --- libxmlb-0.1.15/docs/libxmlb-docs.xml 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/docs/libxmlb-docs.xml 2019-03-26 10:04:46.000000000 +0000 @@ -29,7 +29,6 @@ - @@ -37,9 +36,7 @@ - - diff -Nru libxmlb-0.1.15/meson.build libxmlb-0.1.8/meson.build --- libxmlb-0.1.15/meson.build 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/meson.build 2019-03-26 10:04:46.000000000 +0000 @@ -1,5 +1,5 @@ project('libxmlb', 'c', - version : '0.1.15', + version : '0.1.8', license : 'LGPL-2.1+', meson_version : '>=0.47.0', default_options : ['warning_level=2', 'c_std=c99'], @@ -27,6 +27,7 @@ # get suported warning flags warning_flags = [ + '-fstack-protector-strong', '-Waggregate-return', '-Wunused', '-Warray-bounds', @@ -81,10 +82,6 @@ cc = meson.get_compiler('c') add_project_arguments(cc.get_supported_arguments(warning_flags), language : 'c') -if not meson.is_cross_build() - add_project_arguments('-fstack-protector-strong', language : 'c') -endif - # enable full RELRO where possible # FIXME: until https://github.com/mesonbuild/meson/issues/1140 is fixed global_link_args = [] @@ -102,26 +99,19 @@ language: 'c' ) -if host_machine.system() == 'windows' - libexecdir = get_option('libexecdir') - installed_test_bindir = get_option('libexecdir') - installed_test_datadir = get_option('datadir') -else - prefix = get_option('prefix') - datadir = join_paths(prefix, get_option('datadir')) - libexecdir = join_paths(prefix, get_option('libexecdir')) - installed_test_bindir = join_paths(libexecdir, 'installed-tests', meson.project_name()) - installed_test_datadir = join_paths(datadir, 'installed-tests', meson.project_name()) -endif +prefix = get_option('prefix') + +libexecdir = join_paths(prefix, get_option('libexecdir')) gio = dependency('gio-2.0', version : '>= 2.45.8') -giounix = dependency('gio-unix-2.0', version : '>= 2.45.8', required: false) -if giounix.found() - conf.set('HAVE_GIO_UNIX', '1') +uuid = dependency('uuid') +if cc.has_function('uuid_generate_sha1', args : '-luuid') + conf.set('HAVE_UUID_GENERATE_SHA1', '1') endif libxmlb_deps = [ gio, + uuid, ] # support stemming of search tokens @@ -134,7 +124,7 @@ gnome = import('gnome') -conf.set('installed_test_bindir', installed_test_bindir) +conf.set('libexecdir', libexecdir) conf.set_quoted('PACKAGE_NAME', meson.project_name()) conf.set_quoted('VERSION', meson.project_version()) configure_file( diff -Nru libxmlb-0.1.15/NEWS libxmlb-0.1.8/NEWS --- libxmlb-0.1.15/NEWS 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/NEWS 2019-03-26 10:04:46.000000000 +0000 @@ -1,77 +1,3 @@ -Version 0.1.15 -~~~~~~~~~~~~~~ -Released: 2020-xx-xx - -New Features: - - Add xb_builder_source_add_simple_adapter (Daniel Campello) - - Allow reversing the query results (Richard Hughes) - -Version 0.1.14 -~~~~~~~~~~~~~~ -Released: 2019-12-03 - -New Features: - - Add MinGW Windows 64 builds to CI (Richard Hughes) - -Bugfixes: - - Allow compiling without gio-unix (Richard Hughes) - - Do not use libuuid (Richard Hughes) - - Do not unconditionally use -fstack-protector-strong (Richard Hughes) - - Ignore adaptors added with xb_builder_source_add_converter() (Richard Hughes) - -Version 0.1.13 -~~~~~~~~~~~~~~ -Released: 2019-10-17 - -New Features: - - Export xb_silo_query_full() (Richard Hughes) - -Bugfixes: - - Show the XPath that was used in the query in the error message (Richard Hughes) - -Version 0.1.12 -~~~~~~~~~~~~~~ -Released: 2019-09-27 - -New Features: - - Add helper functions to get the first and last child XbBuilerNode (Richard Hughes) - - Add xb_node_transmogrify to allow changing XML format (Richard Hughes) - - Support 'tail' XML data in the stored silo (Richard Hughes) - -Bugfixes: - - Do not escape a single quote with ' (Richard Hughes) - - Don't invalidate the silo for a GIO temp file (Richard Hughes) - - Fix up two memory leaks if using libxmlb from an introspected binding (Richard Hughes) - -Version 0.1.11 -~~~~~~~~~~~~~~ -Released: 2019-07-15 - -New Features: - - Add xb_node_query_first_full() convenience helper (Richard Hughes) - - Rebuild the XbMachine parser to support 'and' and 'or' predicates (Richard Hughes) - - Verify we never break the ABI (Mathieu Bridon) - -Bugfixes: - - Conditionalize installation of test data (Mathieu Bridon) - - Generate a GUID of zero for no silo data (Richard Hughes) - - Run CI jobs in parallel (Mathieu Bridon) - -Version 0.1.10 -~~~~~~~~~~~~~~ -Released: 2019-05-16 - -Bugfixes: - - Do not mistake gzipped files as being application/x-zerosize content type (Richard Hughes) - - Fix running the installed tests with no checkout directory (Richard Hughes) - -Version 0.1.9 -~~~~~~~~~~~~~ -Released: 2019-05-07 - -Bugfixes: - - Correctly implement building a silo with _SINGLE_LANG set (Richard Hughes) - Version 0.1.8 ~~~~~~~~~~~~~ Released: 2019-03-26 diff -Nru libxmlb-0.1.15/RELEASE libxmlb-0.1.8/RELEASE --- libxmlb-0.1.15/RELEASE 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/RELEASE 2019-03-26 10:04:46.000000000 +0000 @@ -2,11 +2,11 @@ 1. Write NEWS entries for libxmlb in the same format as usual. -git shortlog 0.1.14.. | grep -i -v trivial | grep -v Merge > NEWS.new +git shortlog 0.1.7.. | grep -i -v trivial | grep -v Merge > NEWS.new -Version 0.1.15 -~~~~~~~~~~~~~~ -Released: 2020-xx-xx +Version 0.1.8 +~~~~~~~~~~~~~ +Released: 2019-xx-xx New Features: Bugfixes: @@ -15,10 +15,11 @@ Commit changes to git: # MAKE SURE THESE ARE CORRECT -export release_ver="0.1.15" +export release_ver="0.1.8" git commit -a -m "Release libxmlb ${release_ver}" git tag -s -f -m "Release libxmlb ${release_ver}" "${release_ver}" + git push --tags git push diff -Nru libxmlb-0.1.15/src/generate-version-script.py libxmlb-0.1.8/src/generate-version-script.py --- libxmlb-0.1.15/src/generate-version-script.py 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/generate-version-script.py 2019-03-26 10:04:46.000000000 +0000 @@ -1,4 +1,3 @@ -#!/usr/bin/python3 # pylint: disable=invalid-name,missing-docstring # # Copyright (C) 2017 Richard Hughes @@ -8,8 +7,6 @@ import sys import xml.etree.ElementTree as ET -from pkg_resources import parse_version - XMLNS = '{http://www.gtk.org/introspection/core/1.0}' XMLNS_C = '{http://www.gtk.org/introspection/c/1.0}' @@ -34,12 +31,12 @@ if 'version' not in node.attrib: print('No version for', identifier) sys.exit(1) + return version = node.attrib['version'] if version not in self.releases: self.releases[version] = [] release = self.releases[version] - if identifier not in release: - release.append(identifier) + release.append(identifier) return version def _add_cls(self, cls): @@ -48,6 +45,10 @@ for node in cls.findall(XMLNS + 'function'): self._add_node(node) + # add the constructor + for node in cls.findall(XMLNS + 'constructor'): + self._add_node(node) + # choose the lowest version method for the _get_type symbol version_lowest = None if '{http://www.gtk.org/introspection/glib/1.0}get-type' not in cls.attrib: @@ -58,14 +59,7 @@ for node in cls.findall(XMLNS + 'method'): version_tmp = self._add_node(node) if version_tmp: - if not version_lowest or parse_version(version_tmp) < parse_version(version_lowest): - version_lowest = version_tmp - - # add the constructor - for node in cls.findall(XMLNS + 'constructor'): - version_tmp = self._add_node(node) - if version_tmp: - if not version_lowest or parse_version(version_tmp) < parse_version(version_lowest): + if not version_lowest or version_tmp < version_lowest: version_lowest = version_tmp # finally add the get_type symbol @@ -93,7 +87,7 @@ # output the version data to a file verout = '# generated automatically, do not edit!\n' oldversion = None - for version in sorted(versions, key=parse_version): + for version in sorted(versions): symbols = sorted(self.releases[version]) verout += '\n%s_%s {\n' % (self.library_name, version) verout += ' global:\n' diff -Nru libxmlb-0.1.15/src/libxmlb.map libxmlb-0.1.8/src/libxmlb.map --- libxmlb-0.1.15/src/libxmlb.map 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/libxmlb.map 2019-03-26 10:04:46.000000000 +0000 @@ -110,6 +110,8 @@ xb_opcode_get_val; xb_opcode_integer_new; xb_opcode_kind_from_string; + xb_opcode_kind_from_string; + xb_opcode_kind_to_string; xb_opcode_kind_to_string; xb_opcode_ref; xb_opcode_text_new; @@ -190,35 +192,3 @@ xb_builder_source_ctx_get_type; local: *; } LIBXMLB_0.1.6; - -LIBXMLB_0.1.11 { - global: - xb_node_query_first_full; - local: *; -} LIBXMLB_0.1.7; - -LIBXMLB_0.1.12 { - global: - xb_builder_node_get_first_child; - xb_builder_node_get_last_child; - xb_builder_node_get_tail; - xb_builder_node_set_tail; - xb_node_get_tail; - xb_node_transmogrify; - local: *; -} LIBXMLB_0.1.11; - -LIBXMLB_0.1.13 { - global: - xb_silo_query_first_full; - xb_silo_query_full; - local: *; -} LIBXMLB_0.1.12; - -LIBXMLB_0.1.15 { - global: - xb_builder_source_add_simple_adapter; - xb_query_get_flags; - xb_query_set_flags; - local: *; -} LIBXMLB_0.1.13; diff -Nru libxmlb-0.1.15/src/meson.build libxmlb-0.1.8/src/meson.build --- libxmlb-0.1.15/src/meson.build 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/meson.build 2019-03-26 10:04:46.000000000 +0000 @@ -161,7 +161,7 @@ # 2. The map file is required to build the lib that the GIR is built from # # To avoid the circular dep, and to ensure we don't change exported API - # accidentally actually check in a version of the version script to git. + # accidentaly actually check in a version of the version script to git. mapfile_target = custom_target('libxmlb-mapfile', input: gir[0], output: 'libxmlb.map', @@ -210,14 +210,13 @@ ], c_args : [ '-DTESTDIR="@0@/../data"'.format(meson.current_source_dir()), - '-DINSTALLEDTESTDIR="' + installed_test_datadir + '"', ], dependencies : [ gio, libxmlb_dep, ], install : true, - install_dir : installed_test_bindir + install_dir : libexecdir ) test('xb-self-test', e) endif diff -Nru libxmlb-0.1.15/src/xb-builder.c libxmlb-0.1.8/src/xb-builder.c --- libxmlb-0.1.15/src/xb-builder.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-builder.c 2019-03-26 10:04:46.000000000 +0000 @@ -12,7 +12,6 @@ #include #include "xb-silo-private.h" -#include "xb-string-private.h" #include "xb-builder.h" #include "xb-builder-fixup-private.h" #include "xb-builder-source-private.h" @@ -150,35 +149,28 @@ { XbBuilderCompileHelper *helper = (XbBuilderCompileHelper *) user_data; XbBuilderNode *bn = helper->current; - XbBuilderNode *bc = xb_builder_node_get_last_child (bn); + guint i; + + /* no data */ + if (text_len == 0) + return; /* unimportant */ if (xb_builder_node_has_flag (bn, XB_BUILDER_NODE_FLAG_IGNORE)) return; + /* all whitespace? */ + for (i = 0; i < text_len; i++) { + if (!g_ascii_isspace (text[i])) + break; + } + if (i >= text_len) + return; + /* repair text unless we know it's valid */ if (helper->source_flags & XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT) xb_builder_node_add_flag (bn, XB_BUILDER_NODE_FLAG_LITERAL_TEXT); - - /* text or tail */ - if (!xb_builder_node_has_flag (bn, XB_BUILDER_NODE_FLAG_HAS_TEXT)) { - xb_builder_node_set_text (bn, text, text_len); - return; - } - - /* does this node have a child */ - if (bc != NULL) { - xb_builder_node_set_tail (bc, text, text_len); - return; - } - if (!xb_builder_node_has_flag (bn, XB_BUILDER_NODE_FLAG_HAS_TAIL)) { - xb_builder_node_set_tail (bn, text, text_len); - return; - } - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_INVALID_DATA, - "Mismatched XML; cannot store %s", text); + xb_builder_node_set_text (bn, text, text_len); } /** @@ -358,14 +350,10 @@ return FALSE; if (xb_builder_node_has_flag (bn, XB_BUILDER_NODE_FLAG_IGNORE)) return FALSE; - if (xb_builder_node_get_text (bn) != NULL) { - tmp = xb_builder_node_get_text (bn); - xb_builder_node_set_text_idx (bn, xb_builder_compile_add_to_strtab (helper, tmp)); - } - if (xb_builder_node_get_tail (bn) != NULL) { - tmp = xb_builder_node_get_tail (bn); - xb_builder_node_set_tail_idx (bn, xb_builder_compile_add_to_strtab (helper, tmp)); - } + if (xb_builder_node_get_text (bn) == NULL) + return FALSE; + tmp = xb_builder_node_get_text (bn); + xb_builder_node_set_text_idx (bn, xb_builder_compile_add_to_strtab (helper, tmp)); return FALSE; } @@ -373,6 +361,7 @@ xb_builder_xml_lang_prio_cb (XbBuilderNode *bn, gpointer user_data) { GPtrArray *nodes_to_destroy = (GPtrArray *) user_data; + XbBuilderNode *bn_best = bn; gint prio_best = 0; g_autoptr(GPtrArray) nodes = g_ptr_array_new (); GPtrArray *siblings; @@ -402,14 +391,16 @@ /* find the best locale */ for (guint i = 0; i < nodes->len; i++) { XbBuilderNode *bn2 = g_ptr_array_index (nodes, i); - if (xb_builder_node_get_priority (bn2) > prio_best) + if (xb_builder_node_get_priority (bn2) > prio_best) { prio_best = xb_builder_node_get_priority (bn2); + bn_best = bn2; + } } /* add any nodes not as good as the bext locale to the kill list */ for (guint i = 0; i < nodes->len; i++) { XbBuilderNode *bn2 = g_ptr_array_index (nodes, i); - if (xb_builder_node_get_priority (bn2) < prio_best) + if (xb_builder_node_get_priority (bn2) < xb_builder_node_get_priority (bn_best)) g_ptr_array_add (nodes_to_destroy, bn2); /* never visit this node again */ @@ -459,18 +450,8 @@ .next = 0x0, .parent = 0x0, .text = xb_builder_node_get_text_idx (bn), - .tail = xb_builder_node_get_tail_idx (bn), }; - /* if the node had no children and the text is just whitespace then - * remove it even in literal mode */ - if (xb_builder_node_has_flag (bn, XB_BUILDER_NODE_FLAG_LITERAL_TEXT)) { - if (xb_string_isspace (xb_builder_node_get_text (bn), -1)) - sn.text = XB_SILO_UNSET; - if (xb_string_isspace (xb_builder_node_get_tail (bn), -1)) - sn.tail = XB_SILO_UNSET; - } - /* save this so we can set up the ->next pointers correctly */ xb_builder_node_set_offset (bn, helper->buf->len); @@ -576,17 +557,33 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(XbBuilderCompileHelper, xb_builder_compile_helper_free) +static void +_uuid_generate_sha1 (uuid_t out, const uuid_t ns, const char *name, size_t len) +{ +#ifdef HAVE_UUID_GENERATE_SHA1 + uuid_generate_sha1 (out, ns, name, len); +#else + guint8 buf[20]; + gsize bufsz = sizeof(buf); + g_autoptr(GChecksum) csum = g_checksum_new (G_CHECKSUM_SHA1); + g_checksum_update (csum, (const guchar *) name, (gssize) len); + g_checksum_get_digest (csum, buf, &bufsz); + memcpy (out, buf, sizeof(uuid_t)); +#endif +} + static gchar * xb_builder_generate_guid (XbBuilder *self) { XbBuilderPrivate *priv = GET_PRIVATE (self); - XbGuid guid = { 0x0 }; - if (priv->guid->len > 0) { - xb_guid_compute_for_data (&guid, - (const guint8 *) priv->guid->str, - priv->guid->len); - } - return xb_guid_to_string (&guid); + uuid_t ns; + uuid_t guid; + gchar guid_tmp[UUID_STR_LEN] = { '\0' }; + + uuid_clear (ns); + _uuid_generate_sha1 (guid, ns, priv->guid->str, priv->guid->len); + uuid_unparse (guid, guid_tmp); + return g_strdup (guid_tmp); } /** @@ -817,11 +814,9 @@ /* add the initial header */ hdr.strtab = nodetabsz; if (priv->guid->len > 0) { - XbGuid guid_tmp; - xb_guid_compute_for_data (&guid_tmp, - (const guint8 *) priv->guid->str, - priv->guid->len); - memcpy (&hdr.guid, &guid_tmp, sizeof(guid_tmp)); + uuid_t ns; + uuid_clear (ns); + _uuid_generate_sha1 (hdr.guid, ns, priv->guid->str, priv->guid->len); } XB_SILO_APPENDBUF (buf, &hdr, sizeof(XbSiloHeader)); diff -Nru libxmlb-0.1.15/src/xb-builder-node.c libxmlb-0.1.8/src/xb-builder-node.c --- libxmlb-0.1.15/src/xb-builder-node.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-builder-node.c 2019-03-26 10:04:46.000000000 +0000 @@ -24,8 +24,6 @@ guint32 element_idx; gchar *text; guint32 text_idx; - gchar *tail; - guint32 tail_idx; XbBuilderNode *parent; /* noref */ GPtrArray *children; /* of XbBuilderNode */ GPtrArray *attrs; /* of XbBuilderNodeAttr */ @@ -196,24 +194,6 @@ return g_ascii_strtoll (tmp, NULL, 10); } -/** - * xb_builder_node_get_tail: - * @self: a #XbBuilderNode - * - * Gets the tail from the builder node. - * - * Returns: string, or %NULL if unset - * - * Since: 0.1.12 - **/ -const gchar * -xb_builder_node_get_tail (XbBuilderNode *self) -{ - XbBuilderNodePrivate *priv = GET_PRIVATE (self); - g_return_val_if_fail (XB_IS_BUILDER_NODE (self), NULL); - return priv->tail; -} - /* private */ GPtrArray * xb_builder_node_get_attrs (XbBuilderNode *self) @@ -223,26 +203,45 @@ return priv->attrs; } -static gchar * -xb_builder_node_parse_literal_text (XbBuilderNode *self, const gchar *text, gssize text_len) +/** + * xb_builder_node_set_text: + * @self: a #XbBuilderNode + * @text: a string + * @text_len: length of @text, or -1 if @text is NUL terminated + * + * Sets the text on the builder node. + * + * Since: 0.1.0 + **/ +void +xb_builder_node_set_text (XbBuilderNode *self, const gchar *text, gssize text_len) { GString *tmp; + XbBuilderNodePrivate *priv = GET_PRIVATE (self); guint newline_count = 0; g_auto(GStrv) split = NULL; gsize text_len_safe; + g_return_if_fail (XB_IS_BUILDER_NODE (self)); + g_return_if_fail (text != NULL); + + /* old data */ + g_free (priv->text); + /* we know this has been pre-fixed */ text_len_safe = text_len >= 0 ? (gsize) text_len : strlen (text); - if (xb_builder_node_has_flag (self, XB_BUILDER_NODE_FLAG_LITERAL_TEXT)) - return g_strndup (text, text_len_safe); - - /* all whitespace? */ - if (xb_string_isspace (text, text_len_safe)) - return NULL; + if (xb_builder_node_has_flag (self, XB_BUILDER_NODE_FLAG_LITERAL_TEXT)) { + priv->text = g_strndup (text, text_len_safe); + return; + } /* all on one line, no trailing or leading whitespace */ - if (g_strstr_len (text, text_len, "\n") == NULL) - return g_strndup (text, text_len_safe); + if (g_strstr_len (text, text_len, "\n") == NULL && + !g_str_has_prefix (text, " ") && + !g_str_has_suffix (text, " ")) { + priv->text = g_strndup (text, text_len_safe); + return; + } /* split the text into lines */ tmp = g_string_sized_new ((gsize) text_len_safe + 1); @@ -278,55 +277,7 @@ } /* success */ - return g_string_free (tmp, FALSE); -} - -/** - * xb_builder_node_set_text: - * @self: a #XbBuilderNode - * @text: a string - * @text_len: length of @text, or -1 if @text is NUL terminated - * - * Sets the text on the builder node. - * - * Since: 0.1.0 - **/ -void -xb_builder_node_set_text (XbBuilderNode *self, const gchar *text, gssize text_len) -{ - XbBuilderNodePrivate *priv = GET_PRIVATE (self); - - g_return_if_fail (XB_IS_BUILDER_NODE (self)); - g_return_if_fail (text != NULL); - - /* old data */ - g_free (priv->text); - priv->text = xb_builder_node_parse_literal_text (self, text, text_len); - priv->flags |= XB_BUILDER_NODE_FLAG_HAS_TEXT; -} - -/** - * xb_builder_node_set_tail: - * @self: a #XbBuilderNode - * @tail: a string - * @tail_len: length of @tail, or -1 if @tail is NUL terminated - * - * Sets the tail on the builder node. - * - * Since: 0.1.12 - **/ -void -xb_builder_node_set_tail (XbBuilderNode *self, const gchar *tail, gssize tail_len) -{ - XbBuilderNodePrivate *priv = GET_PRIVATE (self); - - g_return_if_fail (XB_IS_BUILDER_NODE (self)); - g_return_if_fail (tail != NULL); - - /* old data */ - g_free (priv->tail); - priv->tail = xb_builder_node_parse_literal_text (self, tail, tail_len); - priv->flags |= XB_BUILDER_NODE_FLAG_HAS_TAIL; + priv->text = g_string_free (tmp, FALSE); } /** @@ -522,46 +473,6 @@ } /** - * xb_builder_node_get_first_child: - * @self: a #XbBuilderNode - * - * Gets the first child of the builder node. - * - * Returns: (transfer none): a #XbBuilderNode, or %NULL - * - * Since: 0.1.12 - **/ -XbBuilderNode * -xb_builder_node_get_first_child (XbBuilderNode *self) -{ - XbBuilderNodePrivate *priv = GET_PRIVATE (self); - g_return_val_if_fail (XB_IS_BUILDER_NODE (self), NULL); - if (priv->children->len == 0) - return NULL; - return g_ptr_array_index (priv->children, 0); -} - -/** - * xb_builder_node_get_last_child: - * @self: a #XbBuilderNode - * - * Gets the last child of the builder node. - * - * Returns: (transfer none): a #XbBuilderNode, or %NULL - * - * Since: 0.1.12 - **/ -XbBuilderNode * -xb_builder_node_get_last_child (XbBuilderNode *self) -{ - XbBuilderNodePrivate *priv = GET_PRIVATE (self); - g_return_val_if_fail (XB_IS_BUILDER_NODE (self), NULL); - if (priv->children->len == 0) - return NULL; - return g_ptr_array_index (priv->children, priv->children->len - 1); -} - -/** * xb_builder_node_get_child: * @self: a #XbBuilderNode * @element: An element name, e.g. "url" @@ -787,24 +698,6 @@ /* private */ guint32 -xb_builder_node_get_tail_idx (XbBuilderNode *self) -{ - XbBuilderNodePrivate *priv = GET_PRIVATE (self); - g_return_val_if_fail (XB_IS_BUILDER_NODE (self), 0); - return priv->tail_idx; -} - -/* private */ -void -xb_builder_node_set_tail_idx (XbBuilderNode *self, guint32 tail_idx) -{ - XbBuilderNodePrivate *priv = GET_PRIVATE (self); - g_return_if_fail (XB_IS_BUILDER_NODE (self)); - priv->tail_idx = tail_idx; -} - -/* private */ -guint32 xb_builder_node_size (XbBuilderNode *self) { XbBuilderNodePrivate *priv = GET_PRIVATE (self); @@ -826,7 +719,6 @@ XbBuilderNodePrivate *priv = GET_PRIVATE (self); priv->element_idx = XB_SILO_UNSET; priv->text_idx = XB_SILO_UNSET; - priv->tail_idx = XB_SILO_UNSET; priv->attrs = g_ptr_array_new_with_free_func ((GDestroyNotify) xb_builder_node_attr_free); priv->children = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); } @@ -838,7 +730,6 @@ XbBuilderNodePrivate *priv = GET_PRIVATE (self); g_free (priv->element); g_free (priv->text); - g_free (priv->tail); g_ptr_array_unref (priv->attrs); g_ptr_array_unref (priv->children); G_OBJECT_CLASS (xb_builder_node_parent_class)->finalize (obj); @@ -1001,12 +892,6 @@ helper->level--; } - /* add any tail if it exists */ - if (priv->tail != NULL) { - g_autofree gchar *tail = xb_string_xml_escape (priv->tail); - g_string_append (helper->xml, tail); - } - /* add closing tag */ if ((helper->flags & XB_NODE_EXPORT_FLAG_FORMAT_INDENT) > 0 && priv->text == NULL) { diff -Nru libxmlb-0.1.15/src/xb-builder-node.h libxmlb-0.1.8/src/xb-builder-node.h --- libxmlb-0.1.15/src/xb-builder-node.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-builder-node.h 2019-03-26 10:04:46.000000000 +0000 @@ -32,8 +32,6 @@ * @XB_BUILDER_NODE_FLAG_NONE: No extra flags to use * @XB_BUILDER_NODE_FLAG_IGNORE: Do not include this node in the silo * @XB_BUILDER_NODE_FLAG_LITERAL_TEXT: Assume the node CDATA is already valid - * @XB_BUILDER_NODE_FLAG_HAS_TEXT: If the node has leading text - * @XB_BUILDER_NODE_FLAG_HAS_TAIL: If the node has trailing text * * The flags used when building a node. **/ @@ -41,8 +39,6 @@ XB_BUILDER_NODE_FLAG_NONE = 0, /* Since: 0.1.0 */ XB_BUILDER_NODE_FLAG_IGNORE = 1 << 0, /* Since: 0.1.0 */ XB_BUILDER_NODE_FLAG_LITERAL_TEXT = 1 << 1, /* Since: 0.1.0 */ - XB_BUILDER_NODE_FLAG_HAS_TEXT = 1 << 2, /* Since: 0.1.12 */ - XB_BUILDER_NODE_FLAG_HAS_TAIL = 1 << 3, /* Since: 0.1.12 */ /*< private >*/ XB_BUILDER_NODE_FLAG_LAST } XbBuilderNodeFlags; @@ -74,10 +70,6 @@ void xb_builder_node_set_text (XbBuilderNode *self, const gchar *text, gssize text_len); -const gchar *xb_builder_node_get_tail (XbBuilderNode *self); -void xb_builder_node_set_tail (XbBuilderNode *self, - const gchar *tail, - gssize tail_len); const gchar *xb_builder_node_get_attr (XbBuilderNode *self, const gchar *name); guint64 xb_builder_node_get_attr_as_uint(XbBuilderNode *self, @@ -92,8 +84,6 @@ void xb_builder_node_remove_child (XbBuilderNode *self, XbBuilderNode *child); GPtrArray *xb_builder_node_get_children (XbBuilderNode *self); -XbBuilderNode *xb_builder_node_get_first_child(XbBuilderNode *self); -XbBuilderNode *xb_builder_node_get_last_child (XbBuilderNode *self); XbBuilderNode *xb_builder_node_get_child (XbBuilderNode *self, const gchar *element, const gchar *text); diff -Nru libxmlb-0.1.15/src/xb-builder-node-private.h libxmlb-0.1.8/src/xb-builder-node-private.h --- libxmlb-0.1.15/src/xb-builder-node-private.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-builder-node-private.h 2019-03-26 10:04:46.000000000 +0000 @@ -34,8 +34,5 @@ guint32 xb_builder_node_get_text_idx (XbBuilderNode *self); void xb_builder_node_set_text_idx (XbBuilderNode *self, guint32 text_idx); -guint32 xb_builder_node_get_tail_idx (XbBuilderNode *self); -void xb_builder_node_set_tail_idx (XbBuilderNode *self, - guint32 tail_idx); G_END_DECLS diff -Nru libxmlb-0.1.15/src/xb-builder-source.c libxmlb-0.1.8/src/xb-builder-source.c --- libxmlb-0.1.15/src/xb-builder-source.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-builder-source.c 2019-03-26 10:04:46.000000000 +0000 @@ -33,13 +33,28 @@ typedef struct { gchar *content_type; + XbBuilderSourceConverterFunc func_file; /* deprecated */ XbBuilderSourceAdapterFunc func_adapter; gpointer user_data; GDestroyNotify user_data_free; - gboolean is_simple; } XbBuilderSourceAdapter; static XbBuilderSourceAdapter * +xb_builder_source_get_converter_by_mime (XbBuilderSource *self, + const gchar *content_type) +{ + XbBuilderSourcePrivate *priv = GET_PRIVATE (self); + for (guint i = 0; i < priv->adapters->len; i++) { + XbBuilderSourceAdapter *item = g_ptr_array_index (priv->adapters, i); + if (item->func_file == NULL) + continue; + if (g_strcmp0 (item->content_type, content_type) == 0) + return item; + } + return NULL; +} + +static XbBuilderSourceAdapter * xb_builder_source_get_adapter_by_mime (XbBuilderSource *self, const gchar *content_type) { @@ -300,9 +315,12 @@ * @user_data: user pointer to pass to @func, or %NULL * @user_data_free: a function which gets called to free @user_data, or %NULL * - * This function is now deprecated, and does nothing. + * Adds a function that can be used to convert files loaded with + * xb_builder_source_load_xml(). * - * See also: xb_builder_source_add_adapter() + * This function is now deprecated, and xb_builder_source_add_adapter() can be + * used instead. The latter allows chaining streams rather than just one #GFile + * to #GInputStream conversion. * * Since: 0.1.1 **/ @@ -313,23 +331,11 @@ gpointer user_data, GDestroyNotify user_data_free) { - g_warning ("%s() does nothing", G_STRFUNC); -} - -static void -xb_builder_source_init_adapter (XbBuilderSource *self, - const gchar *content_types, - XbBuilderSourceAdapterFunc func, - gpointer user_data, - GDestroyNotify user_data_free, - gboolean is_simple) -{ XbBuilderSourcePrivate *priv = GET_PRIVATE (self); g_auto(GStrv) split = NULL; g_return_if_fail (XB_IS_BUILDER_SOURCE (self)); g_return_if_fail (content_types != NULL); - g_return_if_fail (func != NULL); /* add each */ split = g_strsplit (content_types, ",", -1); @@ -337,10 +343,9 @@ XbBuilderSourceAdapter *item; item = g_slice_new0 (XbBuilderSourceAdapter); item->content_type = g_strdup (split[i]); - item->func_adapter = func; + item->func_file = func; item->user_data = user_data; item->user_data_free = user_data_free; - item->is_simple = is_simple; g_ptr_array_add (priv->adapters, item); } } @@ -365,32 +370,24 @@ gpointer user_data, GDestroyNotify user_data_free) { - xb_builder_source_init_adapter (self, content_types, func, - user_data, user_data_free, FALSE); -} + XbBuilderSourcePrivate *priv = GET_PRIVATE (self); + g_auto(GStrv) split = NULL; -/** - * xb_builder_source_add_simple_adapter: - * @self: a #XbBuilderSource - * @content_types: mimetypes, e.g. `application/x-desktop,application/gzip` - * @func: a callback, or %NULL - * @user_data: user pointer to pass to @func, or %NULL - * @user_data_free: a function which gets called to free @user_data, or %NULL - * - * Adds a function that can be used to convert streams loaded with - * xb_builder_source_load_xml(). - * - * Since: 0.1.15 - **/ -void -xb_builder_source_add_simple_adapter (XbBuilderSource *self, - const gchar *content_types, - XbBuilderSourceAdapterFunc func, - gpointer user_data, - GDestroyNotify user_data_free) -{ - xb_builder_source_init_adapter (self, content_types, func, - user_data, user_data_free, TRUE); + g_return_if_fail (XB_IS_BUILDER_SOURCE (self)); + g_return_if_fail (content_types != NULL); + g_return_if_fail (func != NULL); + + /* add each */ + split = g_strsplit (content_types, ",", -1); + for (guint i = 0; split[i] != NULL; i++) { + XbBuilderSourceAdapter *item; + item = g_slice_new0 (XbBuilderSourceAdapter); + item->content_type = g_strdup (split[i]); + item->func_adapter = func; + item->user_data = user_data; + item->user_data_free = user_data_free; + g_ptr_array_add (priv->adapters, item); + } } gboolean @@ -475,6 +472,7 @@ GError **error) { XbBuilderSourcePrivate *priv = GET_PRIVATE (self); + XbBuilderSourceAdapter *item; g_autofree gchar *basename = NULL; g_return_val_if_fail (XB_IS_BUILDER_SOURCE (self), NULL); @@ -483,6 +481,13 @@ if (priv->istream != NULL) return g_object_ref (priv->istream); + /* decompress if required using the deprecated vfunc */ + item = xb_builder_source_get_converter_by_mime (self, priv->content_type); + if (item != NULL && item->func_file != NULL) { + return item->func_file (self, priv->file, item->user_data, + cancellable, error); + } + /* convert the file to a GFileInputStream */ priv->istream = G_INPUT_STREAM (g_file_read (priv->file, cancellable, error)); if (priv->istream == NULL) @@ -491,7 +496,6 @@ /* run the content type handlers until we get application/xml */ basename = g_file_get_basename (priv->file); do { - XbBuilderSourceAdapter *item; g_autofree gchar *content_type = NULL; g_autoptr(GInputStream) istream_tmp = NULL; g_autoptr(XbBuilderSourceCtx) ctx = xb_builder_source_ctx_new (priv->istream); @@ -522,9 +526,6 @@ return NULL; xb_builder_source_remove_last_extension (basename); g_set_object (&priv->istream, istream_tmp); - - if (item->is_simple) - break; } while (TRUE); return g_object_ref (priv->istream); } diff -Nru libxmlb-0.1.15/src/xb-builder-source-ctx.c libxmlb-0.1.8/src/xb-builder-source-ctx.c --- libxmlb-0.1.15/src/xb-builder-source-ctx.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-builder-source-ctx.c 2019-03-26 10:04:46.000000000 +0000 @@ -101,39 +101,18 @@ GError **error) { XbBuilderSourceCtxPrivate *priv = GET_PRIVATE (self); - g_autofree gchar *content_type = NULL; - + gsize bufsz = 0; + guchar buf[4096] = { 0x00 }; g_return_val_if_fail (XB_IS_BUILDER_SOURCE_CTX (self), NULL); - if (G_IS_SEEKABLE (priv->istream)) { - gsize bufsz = 0; - guchar buf[4096] = { 0x00 }; if (!g_input_stream_read_all (priv->istream, buf, sizeof(buf), &bufsz, cancellable, error)) return NULL; if (!g_seekable_seek (G_SEEKABLE (priv->istream), 0, G_SEEK_SET, cancellable, error)) return NULL; - if (bufsz > 0) - content_type = g_content_type_guess (priv->filename, buf, bufsz, NULL); } - - /* either unseekable, or empty */ - if (content_type == NULL) - content_type = g_content_type_guess (priv->filename, NULL, 0, NULL); - -#ifdef _WIN32 - /* map Windows "mime-type" to a content type */ - if (g_strcmp0 (content_type, ".gz") == 0) - return g_strdup ("application/gzip"); - if (g_strcmp0 (content_type, ".txt") == 0 || - g_strcmp0 (content_type, ".xml") == 0) - return g_strdup ("application/xml"); - if (g_strcmp0 (content_type, ".desktop") == 0) - return g_strdup ("application/x-desktop"); -#endif - - return g_steal_pointer (&content_type); + return g_content_type_guess (priv->filename, buf, bufsz, NULL); } /* private */ diff -Nru libxmlb-0.1.15/src/xb-builder-source.h libxmlb-0.1.8/src/xb-builder-source.h --- libxmlb-0.1.15/src/xb-builder-source.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-builder-source.h 2019-03-26 10:04:46.000000000 +0000 @@ -98,10 +98,5 @@ XbBuilderSourceAdapterFunc func, gpointer user_data, GDestroyNotify user_data_free); -void xb_builder_source_add_simple_adapter (XbBuilderSource *self, - const gchar *content_types, - XbBuilderSourceAdapterFunc func, - gpointer user_data, - GDestroyNotify user_data_free); G_END_DECLS diff -Nru libxmlb-0.1.15/src/xb-machine.c libxmlb-0.1.8/src/xb-machine.c --- libxmlb-0.1.15/src/xb-machine.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-machine.c 2019-03-26 10:04:46.000000000 +0000 @@ -114,7 +114,7 @@ * xb_machine_add_method: * @self: a #XbMachine * @name: function name, e.g. `contains` - * @n_opcodes: minimum number of opcodes required on the stack + * @n_opcodes: minimum number of opcodes requried on the stack * @method_cb: function to call * @user_data: user pointer to pass to @method_cb, or %NULL * @user_data_free: a function which gets called to free @user_data, or %NULL @@ -236,8 +236,10 @@ xb_machine_opcode_func_new (XbMachine *self, const gchar *func_name) { XbMachineMethodItem *item = xb_machine_find_func (self, func_name); - if (item == NULL) + if (item == NULL) { + g_critical ("failed to find %s", func_name); return NULL; + } return xb_opcode_new (XB_OPCODE_KIND_FUNCTION, g_strdup (func_name), item->idx, g_free); @@ -249,27 +251,25 @@ const gchar *func_name, GError **error) { - XbMachinePrivate *priv = GET_PRIVATE (self); - g_autoptr(XbOpcode) opcode = NULL; + XbMachineMethodItem *item; + XbOpcode *op; - /* match opcode, which should always exist */ - opcode = xb_machine_opcode_func_new (self, func_name); - if (opcode == NULL) { + /* find function by name */ + item = xb_machine_find_func (self, func_name); + if (item == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - "built-in function not found: %s", func_name); - return FALSE; - } - if (!xb_stack_push_steal (opcodes, g_steal_pointer (&opcode))) { - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_NOT_SUPPORTED, - "stack size %u exhausted", - priv->stack_size); + "function %s() is not supported", + func_name); return FALSE; } + /* create new opcode */ + op = xb_opcode_new (XB_OPCODE_KIND_FUNCTION, + g_strdup (func_name), + item->idx, g_free); + xb_stack_push_steal (opcodes, op); return TRUE; } @@ -340,30 +340,27 @@ #endif static gboolean -xb_machine_parse_add_text (XbMachine *self, - XbStack *opcodes, - const gchar *text, - gssize text_len, - GError **error) +xb_machine_parse_add_text_raw (XbMachine *self, + XbStack *opcodes, + const gchar *str, + GError **error) { XbMachinePrivate *priv = GET_PRIVATE (self); - g_autofree gchar *str = NULL; guint64 val; + gsize text_len; /* NULL is perfectly valid */ - if (text == NULL) { + if (str == NULL) { xb_stack_push_steal (opcodes, xb_opcode_text_new_static (str)); return TRUE; } /* never add empty literals */ - if (text_len < 0) - text_len = strlen (text); + text_len = strlen (str); if (text_len == 0) return TRUE; /* do any additional handlers */ - str = g_strndup (text, text_len); for (guint i = 0; i < priv->text_handlers->len; i++) { XbMachineTextHandlerItem *item = g_ptr_array_index (priv->text_handlers, i); gboolean handled = FALSE; @@ -411,114 +408,82 @@ G_IO_ERROR_NOT_SUPPORTED, "cannot parse text or number `%s`", str); return FALSE; - } static gboolean +xb_machine_parse_add_text (XbMachine *self, + XbStack *opcodes, + const gchar *str, + GError **error) +{ + return xb_machine_parse_add_text_raw (self, opcodes, str, error); +} + +static gssize xb_machine_parse_section (XbMachine *self, XbStack *opcodes, const gchar *text, + gsize start, gssize text_len, - gboolean is_method, + guint level, GError **error) { XbMachinePrivate *priv = GET_PRIVATE (self); + g_autoptr(GString) acc = g_string_new (NULL); - /* fall back for simplicity */ - if (text_len < 0) - text_len = strlen (text); - if (text_len == 0) - return TRUE; + /* sanity check */ + if (level > 20) { + g_autofree gchar *tmp = g_strndup (text, text_len); + g_set_error (error, + G_IO_ERROR, + G_IO_ERROR_INVALID_DATA, + "nesting deeper than 20 levels supported: %s", + tmp); + return G_MAXSSIZE; + } -// g_debug ("xb_machine_parse_section{%s} method=%i", g_strndup (text, text_len), is_method); - for (gssize i = 0; i < text_len; i++) { - for (guint j = 0; j < priv->operators->len; j++) { - XbMachineOperator *op = g_ptr_array_index (priv->operators, j); - if (strncmp (text + i, op->str, op->strsz) == 0) { - if (is_method) { - /* after then before */ - if (!xb_machine_parse_section (self, opcodes, text + i + op->strsz, -1, is_method, error)) - return FALSE; - if (i > 0) { - if (!xb_machine_parse_section (self, opcodes, text, i, FALSE, error)) - return FALSE; - } - if (!xb_machine_parse_add_func (self, opcodes, op->name, error)) - return FALSE; - } else { - /* before then after */ - if (i > 0) { - if (!xb_machine_parse_section (self, opcodes, text, i, FALSE, error)) - return FALSE; - } - if (!xb_machine_parse_section (self, opcodes, text + i + op->strsz, -1, is_method, error)) - return FALSE; - if (!xb_machine_parse_add_func (self, opcodes, op->name, error)) - return FALSE; - } - return TRUE; + /* build accumulator until hitting either bracket, then recurse */ + for (gssize i = start; i < text_len; i++) { + if (priv->debug_flags & XB_MACHINE_DEBUG_FLAG_SHOW_PARSING) + g_debug ("@%u, >%c", level, text[i]); + if (text[i] == ',') + continue; + if (text[i] == '(') { + i = xb_machine_parse_section (self, opcodes, text, i + 1, text_len, level + 1, error); + if (i == 0) { + g_set_error_literal (error, + G_IO_ERROR, + G_IO_ERROR_INVALID_DATA, + "failed to find matching bracket"); + return G_MAXSSIZE; } + if (i == G_MAXSSIZE) + return G_MAXSSIZE; + if (!xb_machine_parse_add_func (self, opcodes, acc->str, error)) + return G_MAXSSIZE; + g_string_truncate (acc, 0); + continue; } - } - - /* nothing matched */ - if (is_method) - return xb_machine_parse_add_func (self, opcodes, text, error); - return xb_machine_parse_add_text (self, opcodes, text, text_len, error); -} - -static gboolean -xb_machine_parse_sections (XbMachine *self, - XbStack *opcodes, - const gchar *text, - gsize text_len, - gboolean is_method, - GError **error) -{ - g_autofree gchar *tmp = NULL; - if (text_len == 0) - return TRUE; - - /* leading comma */ - if (text[0] == ',') { - tmp = g_strndup (text + 1, text_len - 1); - } else { - tmp = g_strndup (text, text_len); - } - -// g_debug ("xb_machine_parse_sections{%s} method=%i", tmp, is_method); - for (gint i = text_len - 1; i >= 0; i--) { -// g_debug ("%u\t\t%c", i, tmp[i]); - if (tmp[i] == ',') { - tmp[i] = '\0'; - if (is_method) { - if (!xb_machine_parse_add_func (self, - opcodes, - tmp + i + 1, - error)) - return FALSE; - is_method = FALSE; - } else { - if (!xb_machine_parse_section (self, - opcodes, - tmp + i + 1, - -1, - TRUE, - error)) - return FALSE; + if (text[i] == ')') { + if (acc->len > 0) { + if (!xb_machine_parse_add_text (self, opcodes, acc->str, error)) + return G_MAXSSIZE; } + g_string_truncate (acc, 0); + return i; } + + g_string_append_c (acc, text[i]); } - if (tmp[0] != '\0') { - if (!xb_machine_parse_section (self, - opcodes, - tmp, - -1, - is_method, - error)) - return FALSE; + + /* any left over */ + if (acc->len > 0) { + if (!xb_machine_parse_add_text (self, opcodes, acc->str, error)) + return G_MAXSSIZE; + g_string_truncate (acc, 0); } - return TRUE; + + return 0; } static gchar * @@ -536,6 +501,22 @@ } static gboolean +xb_machine_parse_part (XbMachine *self, + XbStack *opcodes, + const gchar *text, + gsize start, + gssize text_len, + GError **error) +{ + gsize rc = xb_machine_parse_section (self, opcodes, text, start, text_len, 0, error); + if (rc == G_MAXSSIZE) { + g_prefix_error (error, "failed to parse part: "); + return FALSE; + } + return TRUE; +} + +static gboolean xb_machine_opcodes_optimize_fn (XbMachine *self, XbOpcode *op, guint *idx, @@ -545,9 +526,10 @@ { XbMachineMethodItem *item; XbMachinePrivate *priv = GET_PRIVATE (self); + XbOpcode *op_tmp; + gboolean result = TRUE; g_autofree gchar *stack_str = NULL; g_autoptr(GError) error_local = NULL; - g_autoptr(XbOpcode) op_result = NULL; g_autoptr(XbStack) stack = NULL; /* a function! lets check the arg length */ @@ -569,13 +551,13 @@ /* make a copy of the stack with the arguments */ stack = xb_stack_new (item->n_opcodes); for (guint i = item->n_opcodes; i > 0; i--) { - XbOpcode *op_tmp = g_ptr_array_index (src, *idx - (i + 1)); + op_tmp = g_ptr_array_index (src, *idx - (i + 1)); xb_stack_push (stack, op_tmp); } /* run the method */ stack_str = xb_stack_to_string (stack); - if (!item->method_cb (self, stack, NULL, item->user_data, NULL, &error_local)) { + if (!item->method_cb (self, stack, &result, item->user_data, NULL, &error_local)) { if (priv->debug_flags & XB_MACHINE_DEBUG_FLAG_SHOW_OPTIMIZER) { g_debug ("ignoring opimized call to %s(%s): %s", item->name, @@ -587,31 +569,23 @@ } /* the method ran, add the result and discard the arguments */ - op_result = xb_stack_pop (stack); - if (op_result == NULL) { - g_set_error_literal (error, - G_IO_ERROR, - G_IO_ERROR_INVALID_DATA, - "internal error; no retval on stack"); - return FALSE; - } - if (xb_opcode_get_kind (op_result) != XB_OPCODE_KIND_BOOLEAN) { + op_tmp = xb_stack_pop (stack); + if (op_tmp != NULL) { if (priv->debug_flags & XB_MACHINE_DEBUG_FLAG_SHOW_OPTIMIZER) g_debug ("method ran, adding result"); *idx -= item->n_opcodes; - g_ptr_array_add (dst, g_steal_pointer (&op_result)); + g_ptr_array_add (dst, op_tmp); return TRUE; } /* nothing was added to the stack, so check if the predicate will * always evaluate to TRUE */ if (priv->debug_flags & XB_MACHINE_DEBUG_FLAG_SHOW_OPTIMIZER) { - g_autofree gchar *tmp = xb_opcode_to_string (op_result); - g_debug ("method ran, result %s", tmp); + g_debug ("method ran, result %s", + result ? "TRUE" : "FALSE"); } - if (xb_opcode_get_val (op_result) == TRUE) { + if (result) { *idx -= item->n_opcodes; - g_ptr_array_add (dst, g_steal_pointer (&op_result)); return TRUE; } @@ -660,82 +634,6 @@ return TRUE; } -static gsize -xb_machine_parse_text (XbMachine *self, - XbStack *opcodes, - const gchar *text, - gsize text_len, - guint level, - GError **error) -{ - XbMachinePrivate *priv = GET_PRIVATE (self); - guint tail = 0; - - /* sanity check */ - if (level > 20) { - g_autofree gchar *tmp = g_strndup (text, text_len); - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_INVALID_DATA, - "nesting deeper than 20 levels supported: %s", tmp); - return G_MAXSIZE; - } - - //g_debug ("%u xb_machine_parse_text{%s}", level, g_strndup (text, text_len)); - for (guint i = 0; i < text_len; i++) { - if (priv->debug_flags & XB_MACHINE_DEBUG_FLAG_SHOW_PARSING) - g_debug ("LVL %u\t%u:\t\t%c", level, i, text[i]); - if (text[i] == '(') { - gsize j = 0; - j = xb_machine_parse_text (self, - opcodes, - text + i + 1, - text_len - i, - level + 1, - error); - if (j == G_MAXSIZE) - return G_MAXSIZE; - if (!xb_machine_parse_sections (self, - opcodes, - text + tail, - i - tail, - TRUE, - error)) - return G_MAXSIZE; - i += j; - tail = i + 1; - continue; - } - if (text[i] == ')') { - if (!xb_machine_parse_sections (self, - opcodes, - text + tail, - i - tail, - FALSE, - error)) - return G_MAXSIZE; - return i + 1; - } - } - if (tail != text_len && level > 0) { - g_autofree gchar *tmp = g_strndup (text, text_len); - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_INVALID_DATA, - "brackets did not match: %s", tmp); - return G_MAXSIZE; - } - if (!xb_machine_parse_sections (self, - opcodes, - text + tail, - text_len - tail, - FALSE, - error)) - return G_MAXSIZE; - return 0; -} - - /** * xb_machine_parse_full: * @self: a #XbMachine @@ -761,7 +659,6 @@ { XbMachineOpcodeFixupItem *item; XbMachinePrivate *priv = GET_PRIVATE (self); - guint level = 0; g_autoptr(XbStack) opcodes = NULL; g_autofree gchar *opcodes_sig = NULL; @@ -780,10 +677,52 @@ return NULL; } - /* parse into opcodes */ + /* look for foo=bar */ opcodes = xb_stack_new (priv->stack_size); - if (xb_machine_parse_text (self, opcodes, text, text_len, level, error) == G_MAXSIZE) - return NULL; + for (gssize i = 0; i < text_len && xb_stack_get_size (opcodes) == 0; i++) { + for (guint j = 0; j < priv->operators->len; j++) { + XbMachineOperator *op = g_ptr_array_index (priv->operators, j); + if (strncmp (text + i, op->str, op->strsz) == 0) { + g_autoptr(XbOpcode) opcode = NULL; + + /* match opcode, which should always exist */ + opcode = xb_machine_opcode_func_new (self, op->name); + if (opcode == NULL) { + g_set_error (error, + G_IO_ERROR, + G_IO_ERROR_NOT_SUPPORTED, + "built-in function not found: %s", + op->name); + return NULL; + } + if (!xb_machine_parse_part (self, opcodes, text, + 0, /* start */ + i, /* end */ + error)) + return NULL; + if (!xb_machine_parse_part (self, opcodes, text, + i + op->strsz, + text_len, + error)) + return NULL; + if (!xb_stack_push_steal (opcodes, g_steal_pointer (&opcode))) { + g_set_error (error, + G_IO_ERROR, + G_IO_ERROR_NOT_SUPPORTED, + "stack size %u exhausted", + priv->stack_size); + return NULL; + } + break; + } + } + } + + /* remainder */ + if (xb_stack_get_size (opcodes) == 0) { + if (!xb_machine_parse_part (self, opcodes, text, 0, text_len, error)) + return NULL; + } /* do any fixups */ opcodes_sig = xb_machine_get_opcodes_sig (self, opcodes); @@ -850,6 +789,7 @@ xb_machine_run_func (XbMachine *self, XbStack *stack, XbOpcode *opcode, + gboolean *result, gpointer exec_data, GError **error) { @@ -872,7 +812,7 @@ item->n_opcodes, xb_stack_get_size (stack)); return FALSE; } - if (!item->method_cb (self, stack, NULL, item->user_data, exec_data, error)) { + if (!item->method_cb (self, stack, result, item->user_data, exec_data, error)) { g_prefix_error (error, "failed to call %s(): ", item->name); return FALSE; } @@ -938,7 +878,6 @@ GError **error) { XbMachinePrivate *priv = GET_PRIVATE (self); - g_autoptr(XbOpcode) opcode_success = NULL; g_autoptr(XbStack) stack = NULL; g_return_val_if_fail (XB_IS_MACHINE (self), FALSE); @@ -957,15 +896,17 @@ if (!xb_machine_run_func (self, stack, opcode, + result, exec_data, error)) return FALSE; + if (*result == FALSE) + return TRUE; continue; } /* add to stack */ if (kind == XB_OPCODE_KIND_TEXT || - kind == XB_OPCODE_KIND_BOOLEAN || kind == XB_OPCODE_KIND_INTEGER || kind == XB_OPCODE_KIND_INDEXED_TEXT || kind == XB_OPCODE_KIND_BOUND_TEXT || @@ -995,8 +936,8 @@ return FALSE; } - /* the stack should have one boolean left on the stack */ - if (xb_stack_get_size (stack) != 1) { + /* the stack should have been completely consumed */ + if (xb_stack_get_size (stack) > 0) { g_autofree gchar *tmp = xb_stack_to_string (stack); g_set_error (error, G_IO_ERROR, @@ -1005,17 +946,6 @@ xb_stack_get_size (stack), tmp); return FALSE; } - opcode_success = xb_stack_pop (stack); - if (xb_opcode_get_kind (opcode_success) != XB_OPCODE_KIND_BOOLEAN) { - g_autofree gchar *tmp = xb_stack_to_string (stack); - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_INVALID_DATA, - "Expected boolean, got: %s", tmp); - return FALSE; - } - if (result != NULL) - *result = xb_opcode_get_val (opcode_success); /* success */ return TRUE; @@ -1158,7 +1088,7 @@ * xb_machine_stack_push_integer: * @self: a #XbMachine * @stack: a #XbStack - * @val: integer literal + * @val: interger literal * * Adds an integer literal to the stack. * @@ -1178,7 +1108,7 @@ /** * xb_machine_set_stack_size: * @self: a #XbMachine - * @stack_size: integer + * @stack_size: interger * * Sets the maximum stack size used for the machine. * @@ -1215,60 +1145,6 @@ } static gboolean -xb_machine_func_and_cb (XbMachine *self, - XbStack *stack, - gboolean *result, - gpointer user_data, - gpointer exec_data, - GError **error) -{ - g_autoptr(XbOpcode) op1 = xb_machine_stack_pop (self, stack); - g_autoptr(XbOpcode) op2 = xb_machine_stack_pop (self, stack); - - /* INTE:INTE */ - if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op1) && xb_opcode_get_val (op2)); - return TRUE; - } - - /* fail */ - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_NOT_SUPPORTED, - "%s:%s types not supported", - xb_opcode_kind_to_string (xb_opcode_get_kind (op1)), - xb_opcode_kind_to_string (xb_opcode_get_kind (op2))); - return FALSE; -} - -static gboolean -xb_machine_func_or_cb (XbMachine *self, - XbStack *stack, - gboolean *result, - gpointer user_data, - gpointer exec_data, - GError **error) -{ - g_autoptr(XbOpcode) op1 = xb_machine_stack_pop (self, stack); - g_autoptr(XbOpcode) op2 = xb_machine_stack_pop (self, stack); - - /* INTE:INTE */ - if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op1) || xb_opcode_get_val (op2)); - return TRUE; - } - - /* fail */ - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_NOT_SUPPORTED, - "%s:%s types not supported", - xb_opcode_kind_to_string (xb_opcode_get_kind (op1)), - xb_opcode_kind_to_string (xb_opcode_get_kind (op2))); - return FALSE; -} - -static gboolean xb_machine_func_eq_cb (XbMachine *self, XbStack *stack, gboolean *result, @@ -1281,14 +1157,14 @@ /* INTE:INTE */ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op1) == xb_opcode_get_val (op2)); + *result = xb_opcode_get_val (op1) == xb_opcode_get_val (op2); return TRUE; } /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_strcmp0 (xb_opcode_get_str (op1), - xb_opcode_get_str (op2)) == 0); + *result = g_strcmp0 (xb_opcode_get_str (op1), + xb_opcode_get_str (op2)) == 0; return TRUE; } @@ -1296,7 +1172,7 @@ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_str (op2)) { guint64 val = 0; if (xb_opcode_get_str (op2) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op2), @@ -1304,7 +1180,7 @@ &val, error)) { return FALSE; } - xb_stack_push_bool (stack, val == xb_opcode_get_val (op1)); + *result = val == xb_opcode_get_val (op1); return TRUE; } @@ -1312,7 +1188,7 @@ if (xb_opcode_cmp_val (op2) && xb_opcode_cmp_str (op1)) { guint64 val = 0; if (xb_opcode_get_str (op1) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op1), @@ -1320,7 +1196,7 @@ &val, error)) { return FALSE; } - xb_stack_push_bool (stack, val == xb_opcode_get_val (op2)); + *result = val == xb_opcode_get_val (op2); return TRUE; } @@ -1347,14 +1223,14 @@ /* INTE:INTE */ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op1) != xb_opcode_get_val (op2)); + *result = xb_opcode_get_val (op1) != xb_opcode_get_val (op2); return TRUE; } /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_strcmp0 (xb_opcode_get_str (op1), - xb_opcode_get_str (op2)) != 0); + *result = g_strcmp0 (xb_opcode_get_str (op1), + xb_opcode_get_str (op2)) != 0; return TRUE; } @@ -1362,7 +1238,7 @@ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_str (op2)) { guint64 val = 0; if (xb_opcode_get_str (op2) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op2), @@ -1370,7 +1246,7 @@ &val, error)) { return FALSE; } - xb_stack_push_bool (stack, val != xb_opcode_get_val (op1)); + *result = val != xb_opcode_get_val (op1); return TRUE; } @@ -1397,14 +1273,14 @@ /* INTE:INTE */ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op2) < xb_opcode_get_val (op1)); + *result = xb_opcode_get_val (op2) < xb_opcode_get_val (op1); return TRUE; } /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_strcmp0 (xb_opcode_get_str (op2), - xb_opcode_get_str (op1)) < 0); + *result = g_strcmp0 (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)) < 0; return TRUE; } @@ -1412,7 +1288,7 @@ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_str (op2)) { guint64 val = 0; if (xb_opcode_get_str (op2) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op2), @@ -1420,7 +1296,7 @@ &val, error)) { return FALSE; } - xb_stack_push_bool (stack, val < xb_opcode_get_val (op1)); + *result = val < xb_opcode_get_val (op1); return TRUE; } @@ -1447,14 +1323,14 @@ /* INTE:INTE */ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op2) > xb_opcode_get_val (op1)); + *result = xb_opcode_get_val (op2) > xb_opcode_get_val (op1); return TRUE; } /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_strcmp0 (xb_opcode_get_str (op2), - xb_opcode_get_str (op1)) > 0); + *result = g_strcmp0 (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)) > 0; return TRUE; } @@ -1462,7 +1338,7 @@ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_str (op2)) { guint64 val = 0; if (xb_opcode_get_str (op2) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op2), @@ -1470,7 +1346,7 @@ &val, error)) { return FALSE; } - xb_stack_push_bool (stack, val > xb_opcode_get_val (op1)); + *result = val > xb_opcode_get_val (op1); return TRUE; } @@ -1497,14 +1373,14 @@ /* INTE:INTE */ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op2) <= xb_opcode_get_val (op1)); + *result = xb_opcode_get_val (op2) <= xb_opcode_get_val (op1); return TRUE; } /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_strcmp0 (xb_opcode_get_str (op2), - xb_opcode_get_str (op1)) <= 0); + *result = g_strcmp0 (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)) <= 0; return TRUE; } @@ -1512,7 +1388,7 @@ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_str (op2)) { guint64 val = 0; if (xb_opcode_get_str (op2) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op2), @@ -1520,7 +1396,7 @@ &val, error)) { return FALSE; } - xb_stack_push_bool (stack, val <= xb_opcode_get_val (op1)); + *result = val <= xb_opcode_get_val (op1); return TRUE; } @@ -1598,13 +1474,13 @@ /* TEXT */ if (xb_opcode_cmp_str (op1)) { - xb_stack_push_bool (stack, xb_opcode_get_str (op1) == NULL); + *result = xb_opcode_get_str (op1) == NULL; return TRUE; } /* INTE */ if (xb_opcode_cmp_val (op1)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op1) == 0); + *result = xb_opcode_get_val (op1) == 0; return TRUE; } @@ -1630,14 +1506,14 @@ /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_strcmp0 (xb_opcode_get_str (op2), - xb_opcode_get_str (op1)) >= 0); + *result = g_strcmp0 (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)) >= 0; return TRUE; } /* INTE:INTE */ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_val (op2)) { - xb_stack_push_bool (stack, xb_opcode_get_val (op2) >= xb_opcode_get_val (op1)); + *result = xb_opcode_get_val (op2) >= xb_opcode_get_val (op1); return TRUE; } @@ -1645,7 +1521,7 @@ if (xb_opcode_cmp_val (op1) && xb_opcode_cmp_str (op2)) { guint64 val = 0; if (xb_opcode_get_str (op2) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op2), @@ -1653,7 +1529,7 @@ &val, error)) { return FALSE; } - xb_stack_push_bool (stack, val >= xb_opcode_get_val (op1)); + *result = val >= xb_opcode_get_val (op1); return TRUE; } @@ -1680,8 +1556,8 @@ /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, xb_string_contains (xb_opcode_get_str (op2), - xb_opcode_get_str (op1))); + *result = xb_string_contains (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)); return TRUE; } @@ -1708,8 +1584,8 @@ /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_str_has_prefix (xb_opcode_get_str (op2), - xb_opcode_get_str (op1))); + *result = g_str_has_prefix (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)); return TRUE; } @@ -1736,8 +1612,8 @@ /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, g_str_has_suffix (xb_opcode_get_str (op2), - xb_opcode_get_str (op1))); + *result = g_str_has_suffix (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)); return TRUE; } @@ -1765,7 +1641,7 @@ if (xb_opcode_cmp_str (op1)) { guint64 val = 0; if (xb_opcode_get_str (op1) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } if (!g_ascii_string_to_unsigned (xb_opcode_get_str (op1), @@ -1799,7 +1675,7 @@ /* TEXT */ if (xb_opcode_cmp_str (op1)) { if (xb_opcode_get_str (op1) == NULL) { - xb_stack_push_bool (stack, FALSE); + *result = FALSE; return TRUE; } xb_machine_stack_push_integer (self, stack, strlen (xb_opcode_get_str (op1))); @@ -1886,9 +1762,7 @@ priv->opcode_fixup = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) xb_machine_opcode_fixup_free); - /* built-in functions */ - xb_machine_add_method (self, "and", 2, xb_machine_func_and_cb, NULL, NULL); - xb_machine_add_method (self, "or", 2, xb_machine_func_or_cb, NULL, NULL); + /* build-in functions */ xb_machine_add_method (self, "eq", 2, xb_machine_func_eq_cb, NULL, NULL); xb_machine_add_method (self, "ne", 2, xb_machine_func_ne_cb, NULL, NULL); xb_machine_add_method (self, "lt", 2, xb_machine_func_lt_cb, NULL, NULL); @@ -1906,10 +1780,6 @@ xb_machine_add_method (self, "string-length", 1, xb_machine_func_strlen_cb, NULL, NULL); /* built-in operators */ - xb_machine_add_operator (self, " and ", "and"); - xb_machine_add_operator (self, " or ", "or"); - xb_machine_add_operator (self, "&&", "and"); - xb_machine_add_operator (self, "||", "or"); xb_machine_add_operator (self, "!=", "ne"); xb_machine_add_operator (self, "<=", "le"); xb_machine_add_operator (self, ">=", "ge"); diff -Nru libxmlb-0.1.15/src/xb-machine.h libxmlb-0.1.8/src/xb-machine.h --- libxmlb-0.1.15/src/xb-machine.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-machine.h 2019-03-26 10:04:46.000000000 +0000 @@ -72,7 +72,7 @@ GError **error); typedef gboolean (*XbMachineMethodFunc) (XbMachine *self, XbStack *stack, - gboolean *result_unused, + gboolean *result, gpointer exec_data, gpointer user_data, GError **error); diff -Nru libxmlb-0.1.15/src/xb-node.c libxmlb-0.1.8/src/xb-node.c --- libxmlb-0.1.15/src/xb-node.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-node.c 2019-03-26 10:04:46.000000000 +0000 @@ -151,7 +151,7 @@ * * Gets the next sibling node for the current node. * - * Returns: (transfer full): a #XbNode, or %NULL + * Returns: (transfer none): a #XbNode, or %NULL * * Since: 0.1.0 **/ @@ -175,7 +175,7 @@ * * Gets the first child node for the current node. * - * Returns: (transfer full): a #XbNode, or %NULL + * Returns: (transfer none): a #XbNode, or %NULL * * Since: 0.1.0 **/ @@ -263,24 +263,6 @@ } /** - * xb_node_get_tail: - * @self: a #XbNode - * - * Gets the tail data for a specific node. - * - * Returns: a string, or %NULL for unset - * - * Since: 0.1.12 - **/ -const gchar * -xb_node_get_tail (XbNode *self) -{ - XbNodePrivate *priv = GET_PRIVATE (self); - g_return_val_if_fail (XB_IS_NODE (self), NULL); - return xb_silo_node_get_tail (priv->silo, priv->sn); -} - -/** * xb_node_get_element: * @self: a #XbNode * @@ -393,66 +375,6 @@ return g_string_free (xml, FALSE); } -/** - * xb_node_transmogrify: - * @self: a #XbNode - * @func_text: (scope call): (allow-none): a #XbBuilderNodeTraverseFunc - * @func_tail: (scope call): (allow-none): a #XbBuilderNodeTraverseFunc - * @user_data: user pointer to pass to @func, or %NULL - * - * Traverses a tree starting from @self. It calls the given functions for each - * node visited. This allows transmogrification of the source, for instance - * converting the XML description to PangoMarkup or even something completely - * different like markdown. - * - * The traversal can be halted at any point by returning TRUE from @func. - * - * Returns: %TRUE if all nodes were visited - * - * Since: 0.1.12 - **/ -gboolean -xb_node_transmogrify (XbNode *self, - XbNodeTransmogrifyFunc func_text, - XbNodeTransmogrifyFunc func_tail, - gpointer user_data) -{ - g_autoptr(XbNode) n = NULL; - - g_return_val_if_fail (XB_IS_NODE (self), FALSE); - - /* all siblings */ - n = g_object_ref (self); - while (n != NULL) { - g_autoptr(XbNode) c = NULL; - g_autoptr(XbNode) tmp = NULL; - - /* head */ - if (func_text != NULL) { - if (func_text (n, user_data)) - return FALSE; - } - - /* all children */ - c = xb_node_get_child (n); - if (c != NULL) { - if (!xb_node_transmogrify (c, func_text, func_tail, user_data)) - return FALSE; - } - - /* tail */ - if (func_tail != NULL) { - if (func_tail (n, user_data)) - return FALSE; - } - - /* next sibling */ - tmp = xb_node_get_next (n); - g_set_object (&n, tmp); - } - return TRUE; -} - static void xb_node_init (XbNode *self) { diff -Nru libxmlb-0.1.15/src/xb-node.h libxmlb-0.1.8/src/xb-node.h --- libxmlb-0.1.15/src/xb-node.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-node.h 2019-03-26 10:04:46.000000000 +0000 @@ -47,13 +47,6 @@ XB_NODE_EXPORT_FLAG_LAST } XbNodeExportFlags; -typedef gboolean (*XbNodeTransmogrifyFunc) (XbNode *self, - gpointer user_data); -gboolean xb_node_transmogrify (XbNode *self, - XbNodeTransmogrifyFunc func_text, - XbNodeTransmogrifyFunc func_tail, - gpointer user_data); - gchar *xb_node_export (XbNode *self, XbNodeExportFlags flags, GError **error); @@ -71,7 +64,6 @@ const gchar *xb_node_get_element (XbNode *self); const gchar *xb_node_get_text (XbNode *self); guint64 xb_node_get_text_as_uint (XbNode *self); -const gchar *xb_node_get_tail (XbNode *self); const gchar *xb_node_get_attr (XbNode *self, const gchar *name); guint64 xb_node_get_attr_as_uint (XbNode *self, diff -Nru libxmlb-0.1.15/src/xb-node-query.c libxmlb-0.1.8/src/xb-node-query.c --- libxmlb-0.1.15/src/xb-node-query.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-node-query.c 2019-03-26 10:04:46.000000000 +0000 @@ -64,40 +64,7 @@ g_return_val_if_fail (XB_IS_NODE (self), NULL); g_return_val_if_fail (XB_IS_QUERY (query), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); - return xb_silo_query_with_root_full (xb_node_get_silo (self), self, query, error); -} - -/** - * xb_node_query_first_full: - * @self: a #XbNode - * @query: an #XbQuery - * @error: the #GError, or %NULL - * - * Searches the silo using an prepared query, returning up to one result. - * - * It is safe to call this function from a different thread to the one that - * created the #XbSilo. - * - * Please note: Only a subset of XPath is supported. - * - * Returns: (transfer full): a #XbNode, or %NULL if unfound - * - * Since: 0.1.11 - **/ -XbNode * -xb_node_query_first_full (XbNode *self, XbQuery *query, GError **error) -{ - g_autoptr(GPtrArray) results = NULL; - - g_return_val_if_fail (XB_IS_NODE (self), NULL); - g_return_val_if_fail (XB_IS_QUERY (query), NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); - - /* nodes don't have to include themselves as part of the query */ - results = xb_silo_query_with_root_full (xb_node_get_silo (self), self, query, error); - if (results == NULL) - return NULL; - return g_object_ref (g_ptr_array_index (results, 0)); + return xb_silo_query_full (xb_node_get_silo (self), self, query, error); } /** diff -Nru libxmlb-0.1.15/src/xb-node-query.h libxmlb-0.1.8/src/xb-node-query.h --- libxmlb-0.1.15/src/xb-node-query.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-node-query.h 2019-03-26 10:04:46.000000000 +0000 @@ -23,9 +23,6 @@ XbNode *xb_node_query_first (XbNode *self, const gchar *xpath, GError **error); -XbNode *xb_node_query_first_full (XbNode *self, - XbQuery *query, - GError **error); const gchar *xb_node_query_text (XbNode *self, const gchar *xpath, GError **error); diff -Nru libxmlb-0.1.15/src/xb-opcode.c libxmlb-0.1.8/src/xb-opcode.c --- libxmlb-0.1.15/src/xb-opcode.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-opcode.c 2019-03-26 10:04:46.000000000 +0000 @@ -47,8 +47,6 @@ return "?INT"; if (kind == XB_OPCODE_KIND_INDEXED_TEXT) return "TEXI"; - if (kind == XB_OPCODE_KIND_BOOLEAN) - return "BOOL"; return NULL; } @@ -79,8 +77,6 @@ return XB_OPCODE_KIND_BOUND_INTEGER; if (g_strcmp0 (str, "TEXI") == 0) return XB_OPCODE_KIND_INDEXED_TEXT; - if (g_strcmp0 (str, "BOOL") == 0) - return XB_OPCODE_KIND_BOOLEAN; return XB_OPCODE_KIND_UNKNOWN; } @@ -96,14 +92,6 @@ return g_string_free (str, FALSE); } -static const gchar * -xb_opcode_get_str_for_display (XbOpcode *self) -{ - if (self->ptr == NULL) - return "(null)"; - return self->ptr; -} - /** * xb_opcode_to_string: * @self: a #XbOpcode @@ -118,21 +106,19 @@ xb_opcode_to_string (XbOpcode *self) { if (self->kind == XB_OPCODE_KIND_FUNCTION) - return g_strdup_printf ("%s()", xb_opcode_get_str_for_display (self)); + return g_strdup_printf ("%s()", xb_opcode_get_str (self)); if (self->kind == XB_OPCODE_KIND_TEXT) - return g_strdup_printf ("'%s'", xb_opcode_get_str_for_display (self)); + return g_strdup_printf ("'%s'", xb_opcode_get_str (self)); if (self->kind == XB_OPCODE_KIND_INDEXED_TEXT) - return g_strdup_printf ("$'%s'", xb_opcode_get_str_for_display (self)); + return g_strdup_printf ("$'%s'", xb_opcode_get_str (self)); if (self->kind == XB_OPCODE_KIND_INTEGER) return g_strdup_printf ("%u", xb_opcode_get_val (self)); if (self->kind == XB_OPCODE_KIND_BOUND_INTEGER) return g_strdup ("?"); if (self->kind == XB_OPCODE_KIND_BOUND_TEXT) - return g_strdup_printf ("?'%s'", xb_opcode_get_str_for_display (self)); + return g_strdup_printf ("?'%s'", xb_opcode_get_str (self)); if (self->kind == XB_OPCODE_KIND_BOUND_INTEGER) return g_strdup_printf ("?%u", xb_opcode_get_val (self)); - if (self->kind == XB_OPCODE_KIND_BOOLEAN) - return g_strdup (xb_opcode_get_val (self) ? "True" : "False"); g_critical ("no to_string for kind %u", self->kind); return NULL; } @@ -167,7 +153,6 @@ xb_opcode_cmp_val (XbOpcode *self) { return self->kind == XB_OPCODE_KIND_INTEGER || - self->kind == XB_OPCODE_KIND_BOOLEAN || self->kind == XB_OPCODE_KIND_BOUND_INTEGER; } @@ -457,17 +442,6 @@ self->val = val; return self; } - -/* private */ -XbOpcode * -xb_opcode_bool_new (gboolean val) -{ - XbOpcode *self = g_slice_new0 (XbOpcode); - self->ref = 1; - self->kind = XB_OPCODE_KIND_BOOLEAN; - self->val = val; - return self; -} GType xb_opcode_get_type (void) diff -Nru libxmlb-0.1.15/src/xb-opcode.h libxmlb-0.1.8/src/xb-opcode.h --- libxmlb-0.1.15/src/xb-opcode.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-opcode.h 2019-03-26 10:04:46.000000000 +0000 @@ -33,7 +33,6 @@ XB_OPCODE_FLAG_TEXT = 1 << 1, /* Since: 0.1.4 */ XB_OPCODE_FLAG_FUNCTION = 1 << 2, /* Since: 0.1.4 */ XB_OPCODE_FLAG_BOUND = 1 << 3, /* Since: 0.1.4 */ - XB_OPCODE_FLAG_BOOLEAN = 1 << 4, /* Since: 0.1.11 */ /*< private >*/ XB_OPCODE_FLAG_LAST } XbOpcodeFlags; @@ -57,7 +56,6 @@ XB_OPCODE_KIND_BOUND_INTEGER = XB_OPCODE_FLAG_BOUND | XB_OPCODE_FLAG_INTEGER, /* Since: 0.1.4 */ XB_OPCODE_KIND_BOUND_TEXT = XB_OPCODE_FLAG_BOUND | XB_OPCODE_FLAG_TEXT, /* Since: 0.1.4 */ XB_OPCODE_KIND_INDEXED_TEXT = XB_OPCODE_FLAG_INTEGER | XB_OPCODE_FLAG_TEXT, /* Since: 0.1.4 */ - XB_OPCODE_KIND_BOOLEAN = XB_OPCODE_FLAG_INTEGER | XB_OPCODE_FLAG_BOOLEAN, /* Since: 0.1.11 */ /*< private >*/ XB_OPCODE_KIND_LAST } XbOpcodeKind; diff -Nru libxmlb-0.1.15/src/xb-opcode-private.h libxmlb-0.1.8/src/xb-opcode-private.h --- libxmlb-0.1.15/src/xb-opcode-private.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-opcode-private.h 2019-03-26 10:04:46.000000000 +0000 @@ -26,6 +26,5 @@ void xb_opcode_set_val (XbOpcode *self, guint32 val); gchar *xb_opcode_get_sig (XbOpcode *self); -XbOpcode *xb_opcode_bool_new (gboolean val); G_END_DECLS diff -Nru libxmlb-0.1.15/src/xb-query.c libxmlb-0.1.8/src/xb-query.c --- libxmlb-0.1.15/src/xb-query.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-query.c 2019-03-26 10:04:46.000000000 +0000 @@ -20,7 +20,6 @@ GObject parent_instance; GPtrArray *sections; /* of XbQuerySection */ XbSilo *silo; - XbQueryFlags flags; gchar *xpath; guint limit; } XbQueryPrivate; @@ -64,53 +63,6 @@ return priv->xpath; } -static gchar * -xb_query_section_to_string (XbQuerySection *sect) -{ - GString *str = g_string_new (NULL); - if (sect->kind == XB_SILO_QUERY_KIND_PARENT) - g_string_append (str, ".."); - else if (sect->kind == XB_SILO_QUERY_KIND_WILDCARD) - g_string_append (str, "*"); - else - g_string_append (str, sect->element); - if (sect->predicates != NULL && sect->predicates->len > 0) { - g_string_append (str, "["); - for (guint j = 0; j < sect->predicates->len; j++) { - XbStack *stack = g_ptr_array_index (sect->predicates, j); - g_autofree gchar *tmp = xb_stack_to_string (stack); - g_string_append (str, tmp); - } - g_string_append (str, "]"); - } - return g_string_free (str, FALSE); -} - -/** - * xb_query_to_string: - * @self: a #XbQuery - * - * Gets the XPath that was used for the query. - * - * Returns: string - * - * Since: 0.1.13 - **/ -gchar * -xb_query_to_string (XbQuery *self) -{ - XbQueryPrivate *priv = GET_PRIVATE (self); - GString *str = g_string_new (NULL); - for (guint i = 0; i < priv->sections->len; i++) { - XbQuerySection *sect = g_ptr_array_index (priv->sections, i); - g_autofree gchar *tmp = xb_query_section_to_string (sect); - g_string_append (str, tmp); - if (i != priv->sections->len - 1) - g_string_append (str, "/"); - } - return g_string_free (str, FALSE); -} - /** * xb_query_get_limit: * @self: a #XbQuery @@ -146,41 +98,6 @@ priv->limit = limit; } -/** - * xb_query_get_flags: - * @self: a #XbQuery - * - * Gets the flags used for this query. - * - * Returns: #XbQueryFlags, default %XB_QUERY_FLAG_NONE - * - * Since: 0.1.15 - **/ -XbQueryFlags -xb_query_get_flags (XbQuery *self) -{ - XbQueryPrivate *priv = GET_PRIVATE (self); - g_return_val_if_fail (XB_IS_QUERY (self), 0); - return priv->flags; -} - -/** - * xb_query_set_flags: - * @self: a #XbQuery - * @flags: a #XbQueryFlags, e.g. %XB_QUERY_FLAG_USE_INDEXES - * - * Sets the flags to use for this query. - * - * Since: 0.1.15 - **/ -void -xb_query_set_flags (XbQuery *self, XbQueryFlags flags) -{ - XbQueryPrivate *priv = GET_PRIVATE (self); - g_return_if_fail (XB_IS_QUERY (self)); - priv->flags = flags; -} - static XbOpcode * xb_query_get_bound_opcode (XbQuery *self, guint idx) { @@ -309,6 +226,7 @@ XbQuerySection *section, const gchar *text, gssize text_len, + XbQueryFlags flags, GError **error) { XbQueryPrivate *priv = GET_PRIVATE (self); @@ -316,7 +234,7 @@ g_autoptr(XbStack) opcodes = NULL; /* set flags */ - if (priv->flags & XB_QUERY_FLAG_OPTIMIZE) + if (flags & XB_QUERY_FLAG_OPTIMIZE) machine_flags |= XB_MACHINE_PARSE_FLAG_OPTIMIZE; /* parse */ @@ -328,7 +246,7 @@ return FALSE; /* repair or convert the indexed strings */ - if (priv->flags & XB_QUERY_FLAG_USE_INDEXES) { + if (flags & XB_QUERY_FLAG_USE_INDEXES) { for (guint i = 0; i < xb_stack_get_size (opcodes); i++) { XbOpcode *op = xb_stack_peek (opcodes, i); if (xb_opcode_get_kind (op) != XB_OPCODE_KIND_INDEXED_TEXT) @@ -352,7 +270,10 @@ } static XbQuerySection * -xb_query_parse_section (XbQuery *self, const gchar *xpath, GError **error) +xb_query_parse_section (XbQuery *self, + const gchar *xpath, + XbQueryFlags flags, + GError **error) { XbQueryPrivate *priv = GET_PRIVATE (self); g_autoptr(XbQuerySection) section = g_slice_new0 (XbQuerySection); @@ -378,6 +299,7 @@ section, xpath + start + 1, i - start - 1, + flags, error)) { return NULL; } @@ -416,7 +338,7 @@ } static gboolean -xb_query_parse (XbQuery *self, const gchar *xpath, GError **error) +xb_query_parse (XbQuery *self, const gchar *xpath, XbQueryFlags flags, GError **error) { XbQueryPrivate *priv = GET_PRIVATE (self); XbQuerySection *section; @@ -445,7 +367,8 @@ "xpath section empty"); return FALSE; } - section = xb_query_parse_section (self, acc->str, error); + section = xb_query_parse_section (self, acc->str, + flags, error); if (section == NULL) return FALSE; g_ptr_array_add (priv->sections, section); @@ -456,7 +379,7 @@ } /* add any remaining section */ - section = xb_query_parse_section (self, acc->str, error); + section = xb_query_parse_section (self, acc->str, flags, error); if (section == NULL) return FALSE; g_ptr_array_add (priv->sections, section); @@ -489,11 +412,10 @@ /* create */ priv->silo = g_object_ref (silo); priv->xpath = g_strdup (xpath); - priv->flags = flags; priv->sections = g_ptr_array_new_with_free_func ((GDestroyNotify) xb_query_section_free); /* add each section */ - if (!xb_query_parse (self, xpath, error)) + if (!xb_query_parse (self, xpath, flags, error)) return NULL; /* nothing here! */ diff -Nru libxmlb-0.1.15/src/xb-query.h libxmlb-0.1.8/src/xb-query.h --- libxmlb-0.1.15/src/xb-query.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-query.h 2019-03-26 10:04:46.000000000 +0000 @@ -32,7 +32,6 @@ * @XB_QUERY_FLAG_NONE: No extra flags to use * @XB_QUERY_FLAG_OPTIMIZE: Optimize the query when possible * @XB_QUERY_FLAG_USE_INDEXES: Use the indexed parameters - * @XB_QUERY_FLAG_REVERSE: Reverse the results order * * The flags used fo query. **/ @@ -40,7 +39,6 @@ XB_QUERY_FLAG_NONE = 0, /* Since: 0.1.6 */ XB_QUERY_FLAG_OPTIMIZE = 1 << 0, /* Since: 0.1.6 */ XB_QUERY_FLAG_USE_INDEXES = 1 << 1, /* Since: 0.1.6 */ - XB_QUERY_FLAG_REVERSE = 1 << 2, /* Since: 0.1.15 */ /*< private >*/ XB_QUERY_FLAG_LAST } XbQueryFlags; @@ -56,9 +54,6 @@ guint xb_query_get_limit (XbQuery *self); void xb_query_set_limit (XbQuery *self, guint limit); -XbQueryFlags xb_query_get_flags (XbQuery *self); -void xb_query_set_flags (XbQuery *self, - XbQueryFlags flags); gboolean xb_query_bind_str (XbQuery *self, guint idx, const gchar *str, diff -Nru libxmlb-0.1.15/src/xb-query-private.h libxmlb-0.1.8/src/xb-query-private.h --- libxmlb-0.1.15/src/xb-query-private.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-query-private.h 2019-03-26 10:04:46.000000000 +0000 @@ -23,10 +23,11 @@ gchar *element; guint32 element_idx; GPtrArray *predicates; /* of XbStack */ + gboolean is_wildcard; + gboolean is_parent; XbSiloQueryKind kind; } XbQuerySection; GPtrArray *xb_query_get_sections (XbQuery *self); -gchar *xb_query_to_string (XbQuery *self); G_END_DECLS diff -Nru libxmlb-0.1.15/src/xb-self-test.c libxmlb-0.1.8/src/xb-self-test.c --- libxmlb-0.1.15/src/xb-self-test.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-self-test.c 2019-03-26 10:04:46.000000000 +0000 @@ -225,8 +225,6 @@ "text(),'firefox',lower-case(),eq()" }, { "$'a'=$'b'", "$'a',$'b',eq()" }, - { "('a'='b')&&('c'='d')", - "'a','b',eq(),'c','d',eq(),and()" }, /* sentinel */ { NULL, NULL } }; @@ -257,7 +255,6 @@ for (guint i = 0; invalid[i] != NULL; i++) { g_autoptr(GError) error = NULL; g_autoptr(XbStack) opcodes = NULL; - g_debug ("testing %s", invalid[i]); opcodes = xb_machine_parse_full (xb_silo_get_machine (silo), invalid[i], -1, XB_MACHINE_PARSE_FLAG_NONE, @@ -276,9 +273,9 @@ const gchar *str; } tests[] = { { "@a='b'", "'a',attr(),'b',eq()" }, - { "'a'<'b'", "True" }, /* success! */ - { "999>=123", "True" }, /* success! */ - { "not(0)", "True" }, /* success! */ + { "'a'<'b'", "" }, /* to nothing! */ + { "999>=123", "" }, /* to nothing! */ + { "not(0)", "" }, /* to nothing! */ { "lower-case('Fire')", "'fire'" }, { "upper-case(lower-case('Fire'))", "'FIRE'" }, /* 2nd pass */ @@ -373,7 +370,7 @@ /* check size */ bytes = xb_silo_get_bytes (silo); - g_assert_cmpint (g_bytes_get_size (bytes), ==, 605); + g_assert_cmpint (g_bytes_get_size (bytes), ==, 553); } static void @@ -403,8 +400,6 @@ { gboolean ret; g_autofree gchar *xml = NULL; - g_autofree gchar *tmp_desktop = g_build_filename (g_get_tmp_dir (), "temp.desktop", NULL); - g_autofree gchar *tmp_xmlb = g_build_filename (g_get_tmp_dir (), "temp.xmlb", NULL); g_autoptr(GError) error = NULL; g_autoptr(GFile) file_desktop = NULL; g_autoptr(GFile) file = NULL; @@ -417,17 +412,17 @@ xb_builder_custom_mime_cb, NULL, NULL); /* import a source file */ - ret = g_file_set_contents (tmp_desktop, "[Desktop Entry]", -1, &error); + ret = g_file_set_contents ("/tmp/temp.desktop", "[Desktop Entry]", -1, &error); g_assert_no_error (error); g_assert_true (ret); - file_desktop = g_file_new_for_path (tmp_desktop); + file_desktop = g_file_new_for_path ("/tmp/temp.desktop"); ret = xb_builder_source_load_file (source, file_desktop, XB_BUILDER_SOURCE_FLAG_WATCH_FILE, NULL, &error); g_assert_no_error (error); g_assert_true (ret); xb_builder_import_source (builder, source); - file = g_file_new_for_path (tmp_xmlb); + file = g_file_new_for_path ("/tmp/temp.xmlb"); silo = xb_builder_ensure (builder, file, XB_BUILDER_COMPILE_FLAG_WATCH_BLOB, NULL, &error); @@ -451,7 +446,6 @@ gboolean ret; g_autofree gchar *xml = NULL; g_autofree gchar *path = NULL; - g_autofree gchar *tmp_xmlb = g_build_filename (g_get_tmp_dir (), "temp.xmlb", NULL); g_autoptr(GError) error = NULL; g_autoptr(GFile) file_src = NULL; g_autoptr(GFile) file = NULL; @@ -461,10 +455,6 @@ /* import a source file */ path = g_build_filename (TESTDIR, "test.xml.gz.gz.gz", NULL); - if (!g_file_test (path, G_FILE_TEST_EXISTS)) { - g_free (path); - path = g_build_filename (INSTALLEDTESTDIR, "test.xml.gz.gz.gz", NULL); - } file_src = g_file_new_for_path (path); ret = xb_builder_source_load_file (source, file_src, XB_BUILDER_SOURCE_FLAG_NONE, @@ -472,7 +462,7 @@ g_assert_no_error (error); g_assert_true (ret); xb_builder_import_source (builder, source); - file = g_file_new_for_path (tmp_xmlb); + file = g_file_new_for_path ("/tmp/temp.xmlb"); silo = xb_builder_ensure (builder, file, XB_BUILDER_COMPILE_FLAG_NONE, NULL, &error); @@ -499,29 +489,21 @@ g_autoptr(XbBuilder) builder = xb_builder_new (); g_autoptr(XbBuilderSource) source = xb_builder_source_new (); g_autoptr(XbSilo) silo = NULL; - g_autofree gchar *tmp_xml = g_build_filename (g_get_tmp_dir (), "temp.xml", NULL); - g_autofree gchar *tmp_xmlb = g_build_filename (g_get_tmp_dir (), "temp.xmlb", NULL); - -#ifdef _WIN32 - /* no inotify */ - g_test_skip ("inotify does not work on mingw"); - return; -#endif /* import a source file */ - ret = g_file_set_contents (tmp_xml, + ret = g_file_set_contents ("/tmp/temp.xml", "\n" "gimp", -1, &error); g_assert_no_error (error); g_assert_true (ret); - file_xml = g_file_new_for_path (tmp_xml); + file_xml = g_file_new_for_path ("/tmp/temp.xml"); ret = xb_builder_source_load_file (source, file_xml, XB_BUILDER_SOURCE_FLAG_WATCH_FILE, NULL, &error); g_assert_no_error (error); g_assert_true (ret); xb_builder_import_source (builder, source); - file = g_file_new_for_path (tmp_xmlb); + file = g_file_new_for_path ("/tmp/temp.xmlb"); g_file_delete (file, NULL, NULL); silo = xb_builder_ensure (builder, file, XB_BUILDER_COMPILE_FLAG_WATCH_BLOB, @@ -534,7 +516,7 @@ &invalidate_cnt); /* change source file */ - ret = g_file_set_contents (tmp_xml, + ret = g_file_set_contents ("/tmp/temp.xml", "\n" "inkscape", -1, &error); g_assert_no_error (error); @@ -550,7 +532,6 @@ { gboolean ret; guint invalidate_cnt = 0; - g_autofree gchar *tmp_xmlb = g_build_filename (g_get_tmp_dir (), "temp.xmlb", NULL); g_autoptr(GBytes) bytes1 = NULL; g_autoptr(GBytes) bytes2 = NULL; g_autoptr(GBytes) bytes3 = NULL; @@ -579,12 +560,6 @@ " \n" "\n"; -#ifdef _WIN32 - /* no inotify */ - g_test_skip ("inotify does not work on mingw"); - return; -#endif - /* import some XML */ xb_builder_set_profile_flags (builder, XB_SILO_PROFILE_FLAG_DEBUG); ret = xb_test_import_xml (builder, xml, &error); @@ -592,7 +567,7 @@ g_assert_true (ret); /* create file if it does not exist */ - file = g_file_new_for_path (tmp_xmlb); + file = g_file_new_for_path ("/tmp/temp.xmlb"); g_file_delete (file, NULL, NULL); silo = xb_builder_ensure (builder, file, XB_BUILDER_COMPILE_FLAG_WATCH_BLOB, @@ -1187,9 +1162,6 @@ " \n" " gimp.desktop\n" " org.gnome.Gimp.desktop\n" - " \n" - " TRUE\n" - " \n" " \n" " \n" " org.hughski.ColorHug2.firmware\n" @@ -1211,27 +1183,6 @@ g_assert_nonnull (str); g_debug ("\n%s", str); - /* query with predicate logical and */ - n = xb_silo_query_first (silo, "components/component/custom/value[(@key='KEY') and (text()='TRUE')]/../../id", &error); - g_assert_no_error (error); - g_assert_nonnull (n); - g_assert_cmpstr (xb_node_get_text (n), ==, "gimp.desktop"); - g_clear_object (&n); - - /* query with predicate logical and; failure */ - n = xb_silo_query_first (silo, "components/component/custom/value[(@key='KEY')&&(text()='FALSE')]/../../id", &error); - g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND); - g_assert_null (n); - g_clear_error (&error); - g_clear_object (&n); - - /* query with predicate logical and, alternate form */ - n = xb_silo_query_first (silo, "components/component/custom/value[and((@key='KEY'),(text()='TRUE'))]/../../id", &error); - g_assert_no_error (error); - g_assert_nonnull (n); - g_assert_cmpstr (xb_node_get_text (n), ==, "gimp.desktop"); - g_clear_object (&n); - /* query that doesn't find anything */ n = xb_silo_query_first (silo, "dave", &error); g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT); @@ -1311,7 +1262,7 @@ g_assert_cmpstr (xb_node_get_text (n), ==, "gimp.desktop"); g_clear_object (&n); - /* query with attrs that do not exist */ + /* query with attrs that dont exists */ n = xb_silo_query_first (silo, "components/component[not(@dave)]/id", &error); g_assert_no_error (error); g_assert_nonnull (n); @@ -1453,9 +1404,7 @@ gboolean ret; g_autoptr(GError) error = NULL; g_autofree gchar *str = NULL; - g_autofree gchar *tmp = NULL; g_autoptr(XbBuilder) builder = xb_builder_new (); - g_autoptr(XbNode) n = NULL; g_autoptr(XbSilo) silo = NULL; const gchar *xml = "\n" @@ -1463,9 +1412,6 @@ "

Wilcommen

\n" "

Hello

\n" "

Salut

\n" - "

Goodbye

\n" - "

Auf Wiedersehen

\n" - "

Au revoir

\n" "
\n" "\n"; @@ -1490,16 +1436,6 @@ g_assert_null (g_strstr_len (str, -1, "Wilcommen")); g_assert_null (g_strstr_len (str, -1, "Hello")); g_assert_nonnull (g_strstr_len (str, -1, "Salut")); - g_assert_null (g_strstr_len (str, -1, "Goodbye")); - g_assert_null (g_strstr_len (str, -1, "Auf Wiedersehen")); - g_assert_nonnull (g_strstr_len (str, -1, "Au revoir")); - - /* test we traversed the tree correctly */ - n = xb_silo_query_first (silo, "components/component/*", &error); - g_assert_no_error (error); - g_assert_nonnull (n); - tmp = xb_node_export (n, XB_NODE_EXPORT_FLAG_INCLUDE_SIBLINGS, &error); - g_assert_cmpstr (tmp, ==, "

Salut

Au revoir

"); } static void @@ -1716,43 +1652,6 @@ } static void -xb_xpath_query_reverse_func (void) -{ - XbNode *n; - gboolean ret; - g_autoptr(GError) error = NULL; - g_autoptr(XbBuilder) builder = xb_builder_new (); - g_autoptr(XbSilo) silo = NULL; - g_autoptr(XbQuery) query = NULL; - g_autoptr(GPtrArray) names = NULL; - const gchar *xml = - "\n" - " foo\n" - " bar\n" - " baz\n" - "\n"; - - /* import from XML */ - ret = xb_test_import_xml (builder, xml, &error); - g_assert_no_error (error); - g_assert_true (ret); - silo = xb_builder_compile (builder, XB_BUILDER_COMPILE_FLAG_NONE, NULL, &error); - g_assert_no_error (error); - g_assert_nonnull (silo); - - /* get first when reversed */ - query = xb_query_new_full (silo, "names/name", XB_QUERY_FLAG_REVERSE, &error); - g_assert_no_error (error); - g_assert_nonnull (query); - names = xb_silo_query_full (silo, query, &error); - g_assert_no_error (error); - g_assert_nonnull (names); - g_assert_cmpint (names->len, ==, 3); - n = g_ptr_array_index (names, 0); - g_assert_cmpstr (xb_node_get_text (n), ==, "baz"); -} - -static void xb_xpath_glob_func (void) { g_autofree gchar *xml2 = NULL; @@ -1979,9 +1878,9 @@ static void xb_builder_node_info_func (void) { + const gchar *fn = "/tmp/xb-self-test.xml"; gboolean ret; g_autofree gchar *xml = NULL; - g_autofree gchar *tmp_xml = g_build_filename (g_get_tmp_dir (), "temp.xml", NULL); g_autoptr(GError) error = NULL; g_autoptr(XbBuilderSource) import1 = xb_builder_source_new (); g_autoptr(XbBuilderSource) import2 = xb_builder_source_new (); @@ -1993,7 +1892,7 @@ g_autoptr(GFile) file = NULL; /* create a simple document with some info */ - ret = g_file_set_contents (tmp_xml, + ret = g_file_set_contents (fn, "\n" "dave", -1, &error); @@ -2005,7 +1904,7 @@ xb_builder_node_insert_text (info2, "scope", "system", NULL); /* import the doc */ - file = g_file_new_for_path (tmp_xml); + file = g_file_new_for_path (fn); ret = xb_builder_source_load_file (import1, file, XB_BUILDER_SOURCE_FLAG_NONE, NULL, &error); g_assert_no_error (error); g_assert_true (ret); @@ -2114,111 +2013,13 @@ g_thread_pool_free (pool, FALSE, TRUE); } -typedef struct { - guint cnt; - GString *str; -} XbMarkupHelper; - -static gboolean -xb_markup_head_cb (XbNode *n, gpointer user_data) -{ - XbMarkupHelper *helper = (XbMarkupHelper *) user_data; - helper->cnt++; - - if (xb_node_get_text (n) == NULL) - return FALSE; - - /* start */ - if (g_strcmp0 (xb_node_get_element (n), "em") == 0) { - g_string_append (helper->str, "*"); - } else if (g_strcmp0 (xb_node_get_element (n), "strong") == 0) { - g_string_append (helper->str, "**"); - } else if (g_strcmp0 (xb_node_get_element (n), "code") == 0) { - g_string_append (helper->str, "`"); - } - - /* text */ - if (xb_node_get_text (n) != NULL) - g_string_append (helper->str, xb_node_get_text (n)); - - return FALSE; -} - -static gboolean -xb_markup_tail_cb (XbNode *n, gpointer user_data) -{ - XbMarkupHelper *helper = (XbMarkupHelper *) user_data; - helper->cnt++; - - /* end */ - if (g_strcmp0 (xb_node_get_element (n), "em") == 0) { - g_string_append (helper->str, "*"); - } else if (g_strcmp0 (xb_node_get_element (n), "strong") == 0) { - g_string_append (helper->str, "**"); - } else if (g_strcmp0 (xb_node_get_element (n), "code") == 0) { - g_string_append (helper->str, "`"); - } else if (g_strcmp0 (xb_node_get_element (n), "p") == 0) { - g_string_append (helper->str, "\n\n"); - } - - /* tail */ - if (xb_node_get_tail (n) != NULL) - g_string_append (helper->str, xb_node_get_tail (n)); - - return FALSE; -} - -static void -xb_markup_func (void) -{ - gboolean ret; - g_autofree gchar *new = NULL; - g_autofree gchar *tmp = NULL; - g_autoptr(GError) error = NULL; - g_autoptr(XbNode) n = NULL; - g_autoptr(XbSilo) silo = NULL; - XbMarkupHelper helper = { - .cnt = 0, - .str = g_string_new (NULL), - }; - const gchar *xml = "" - "

Title:

" - "

There is a slight risk of death here!

" - "
"; - - /* import from XML */ - silo = xb_silo_new_from_xml (xml, &error); - g_assert_no_error (error); - g_assert_nonnull (silo); - - /* ensure we can round-trip */ - tmp = xb_silo_to_string (silo, &error); - g_assert_no_error (error); - g_assert_nonnull (silo); - g_debug ("\n%s", tmp); - n = xb_silo_get_root (silo); - g_assert_nonnull (n); - new = xb_node_export (n, XB_NODE_EXPORT_FLAG_NONE, &error); - g_assert_no_error (error); - g_assert_nonnull (new); - g_assert_cmpstr (xml, ==, new); - - /* ensure we can convert this to another format */ - ret = xb_node_transmogrify (n, xb_markup_head_cb, xb_markup_tail_cb, &helper); - g_assert_true (ret); - g_assert_cmpstr (helper.str->str, ==, - "`Title`:\n\nThere is a *slight* risk of **death** here!\n\n"); - g_assert_cmpint (helper.cnt, ==, 14); - g_string_free (helper.str, TRUE); -} - static void xb_speed_func (void) { XbNode *n; + const gchar *fn = "/tmp/test.xmlb"; gboolean ret; guint n_components = 5000; - g_autofree gchar *tmp_xmlb = g_build_filename (g_get_tmp_dir (), "test.xmlb", NULL); g_autofree gchar *xpath1 = NULL; g_autoptr(GError) error = NULL; g_autoptr(GFile) file = NULL; @@ -2266,7 +2067,7 @@ silo = xb_silo_new_from_xml (xml->str, &error); g_assert_no_error (error); g_assert_nonnull (silo); - file = g_file_new_for_path (tmp_xmlb); + file = g_file_new_for_path (fn); ret = xb_silo_save_to_file (silo, file, NULL, &error); g_assert_no_error (error); g_assert_true (ret); @@ -2402,10 +2203,8 @@ g_test_add_func ("/libxmlb/builder-node{info}", xb_builder_node_info_func); g_test_add_func ("/libxmlb/builder-node{literal-text}", xb_builder_node_literal_text_func); g_test_add_func ("/libxmlb/builder-node{source-text}", xb_builder_node_source_text_func); - g_test_add_func ("/libxmlb/markup", xb_markup_func); g_test_add_func ("/libxmlb/xpath", xb_xpath_func); g_test_add_func ("/libxmlb/xpath-query", xb_xpath_query_func); - g_test_add_func ("/libxmlb/xpath-query{reverse}", xb_xpath_query_reverse_func); g_test_add_func ("/libxmlb/xpath{helpers}", xb_xpath_helpers_func); g_test_add_func ("/libxmlb/xpath{prepared}", xb_xpath_prepared_func); g_test_add_func ("/libxmlb/xpath{incomplete}", xb_xpath_incomplete_func); diff -Nru libxmlb-0.1.15/src/xb-silo.c libxmlb-0.1.8/src/xb-silo.c --- libxmlb-0.1.15/src/xb-silo.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-silo.c 2019-03-26 10:04:46.000000000 +0000 @@ -331,10 +331,6 @@ g_string_append_printf (str, "text: %s\n", xb_silo_from_strtab (self, n->text)); } - if (n->tail != XB_SILO_UNSET) { - g_string_append_printf (str, "tail: %s\n", - xb_silo_from_strtab (self, n->tail)); - } for (guint8 i = 0; i < n->nr_attrs; i++) { XbSiloAttr *a = xb_silo_get_attr (self, off, i); g_string_append_printf (str, "attr_name: %s [%03u]\n", @@ -375,15 +371,6 @@ /* private */ const gchar * -xb_silo_node_get_tail (XbSilo *self, XbSiloNode *n) -{ - if (n->tail == XB_SILO_UNSET) - return NULL; - return xb_silo_from_strtab (self, n->tail); -} - -/* private */ -const gchar * xb_silo_node_get_element (XbSilo *self, XbSiloNode *n) { return xb_silo_from_strtab (self, n->element_name); @@ -589,10 +576,10 @@ gboolean xb_silo_load_from_bytes (XbSilo *self, GBytes *blob, XbSiloLoadFlags flags, GError **error) { - XbGuid guid_tmp; XbSiloHeader *hdr; XbSiloPrivate *priv = GET_PRIVATE (self); gsize sz = 0; + gchar guid[UUID_STR_LEN] = { '\0' }; guint32 off = 0; g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->nodes_mutex); g_autoptr(GTimer) timer = g_timer_new (); @@ -645,8 +632,8 @@ } /* get GUID */ - memcpy (&guid_tmp, &hdr->guid, sizeof(guid_tmp)); - priv->guid = xb_guid_to_string (&guid_tmp); + uuid_unparse (hdr->guid, guid); + priv->guid = g_strdup (guid); /* check strtab */ priv->strtab = hdr->strtab; @@ -735,9 +722,6 @@ { XbSilo *silo = XB_SILO (user_data); g_autofree gchar *fn = g_file_get_path (file); - g_autofree gchar *basename = g_file_get_basename (file); - if (g_str_has_prefix (basename, ".goutputstream")) - return; g_debug ("%s changed, invalidating", fn); xb_silo_invalidate (silo); } @@ -1072,31 +1056,6 @@ } static gboolean -xb_silo_machine_func_tail_cb (XbMachine *self, - XbStack *stack, - gboolean *result, - gpointer user_data, - gpointer exec_data, - GError **error) -{ - XbSilo *silo = XB_SILO (user_data); - XbSiloQueryData *query_data = (XbSiloQueryData *) exec_data; - - /* optimize pass */ - if (query_data == NULL) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED_HANDLED, - "cannot optimize: no silo to query"); - return FALSE; - } - xb_machine_stack_push_steal (self, stack, - xb_opcode_new (XB_OPCODE_KIND_INDEXED_TEXT, - xb_silo_node_get_tail (silo, query_data->sn), - query_data->sn->tail, - NULL)); - return TRUE; -} - -static gboolean xb_silo_machine_func_first_cb (XbMachine *self, XbStack *stack, gboolean *result, @@ -1112,7 +1071,7 @@ "cannot optimize: no silo to query"); return FALSE; } - xb_stack_push_bool (stack, query_data->position == 1); + *result = query_data->position == 1; return TRUE; } @@ -1132,7 +1091,7 @@ "cannot optimize: no silo to query"); return FALSE; } - xb_stack_push_bool (stack, query_data->sn->next == 0); + *result = query_data->sn->next == 0; return TRUE; } @@ -1169,8 +1128,8 @@ /* TEXT:TEXT */ if (xb_opcode_cmp_str (op1) && xb_opcode_cmp_str (op2)) { - xb_stack_push_bool (stack, xb_string_search (xb_opcode_get_str (op2), - xb_opcode_get_str (op1))); + *result = xb_string_search (xb_opcode_get_str (op2), + xb_opcode_get_str (op1)); return TRUE; } @@ -1280,8 +1239,6 @@ xb_silo_machine_func_stem_cb, self, NULL); xb_machine_add_method (priv->machine, "text", 0, xb_silo_machine_func_text_cb, self, NULL); - xb_machine_add_method (priv->machine, "tail", 0, - xb_silo_machine_func_tail_cb, self, NULL); xb_machine_add_method (priv->machine, "first", 0, xb_silo_machine_func_first_cb, self, NULL); xb_machine_add_method (priv->machine, "last", 0, diff -Nru libxmlb-0.1.15/src/xb-silo-export.c libxmlb-0.1.8/src/xb-silo-export.c --- libxmlb-0.1.15/src/xb-silo-export.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-silo-export.c 2019-03-26 10:04:46.000000000 +0000 @@ -86,13 +86,6 @@ } g_string_append_printf (helper->xml, "", xb_silo_from_strtab (self, sn->element_name)); - - /* add any optional tail */ - if (sn->tail != XB_SILO_UNSET) { - g_autofree gchar *tail = xb_string_xml_escape (xb_silo_from_strtab (self, sn->tail)); - g_string_append (helper->xml, tail); - } - if (helper->flags & XB_NODE_EXPORT_FLAG_FORMAT_MULTILINE) g_string_append (helper->xml, "\n"); diff -Nru libxmlb-0.1.15/src/xb-silo-private.h libxmlb-0.1.8/src/xb-silo-private.h --- libxmlb-0.1.15/src/xb-silo-private.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-silo-private.h 2019-03-26 10:04:46.000000000 +0000 @@ -6,26 +6,31 @@ #pragma once +#include + #include "xb-machine.h" #include "xb-node.h" #include "xb-silo.h" -#include "xb-string-private.h" - G_BEGIN_DECLS +/* for old versions of libuuid */ +#ifndef UUID_STR_LEN +#define UUID_STR_LEN 37 +#endif + /* 32 bytes, native byte order */ typedef struct __attribute__ ((packed)) { guint32 magic; guint32 version; - XbGuid guid; + uuid_t guid; guint16 strtab_ntags; guint8 padding[2]; guint32 strtab; } XbSiloHeader; #define XB_SILO_MAGIC_BYTES 0x624c4d58 -#define XB_SILO_VERSION 0x00000007 +#define XB_SILO_VERSION 0x00000005 #define XB_SILO_UNSET 0xffffffff typedef struct __attribute__ ((packed)) { @@ -35,7 +40,6 @@ guint32 parent; /* ONLY when is_node: from 0 */ guint32 next; /* ONLY when is_node: from 0 */ guint32 text; /* ONLY when is_node: from strtab */ - guint32 tail; /* ONLY when is_node: from strtab */ } XbSiloNode; typedef struct __attribute__ ((packed)) { @@ -78,8 +82,6 @@ XbSiloNode *n); const gchar *xb_silo_node_get_text (XbSilo *self, XbSiloNode *n); -const gchar *xb_silo_node_get_tail (XbSilo *self, - XbSiloNode *n); XbSiloAttr *xb_silo_node_get_attr_by_str (XbSilo *self, XbSiloNode *n, const gchar *name); diff -Nru libxmlb-0.1.15/src/xb-silo-query.c libxmlb-0.1.8/src/xb-silo-query.c --- libxmlb-0.1.15/src/xb-silo-query.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-silo-query.c 2019-03-26 10:04:46.000000000 +0000 @@ -184,7 +184,7 @@ /** * xb_silo_query_with_root: (skip) * @self: a #XbSilo - * @n: (allow-none): a #XbNode + * @n: a #XbNode * @xpath: an XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]` * @limit: maximum number of results to return, or 0 for "all" * @error: the #GError, or %NULL @@ -289,22 +289,12 @@ return g_steal_pointer (&results); } -static void -_g_ptr_array_reverse (GPtrArray *array) -{ - guint last_idx = array->len - 1; - for (guint i = 0; i < array->len / 2; i++) { - gpointer tmp = array->pdata[i]; - array->pdata[i] = array->pdata[last_idx - i]; - array->pdata[last_idx - i] = tmp; - } -} - /** - * xb_silo_query_with_root_full: (skip) + * xb_silo_query_full: (skip) * @self: a #XbSilo - * @n: (allow-none): a #XbNode + * @n: a #XbNode * @query: an #XbQuery + * @limit: maximum number of results to return, or 0 for "all" * @error: the #GError, or %NULL * * Searches the silo using an XPath query, returning up to @limit results. @@ -319,7 +309,7 @@ * Since: 0.1.4 **/ GPtrArray * -xb_silo_query_with_root_full (XbSilo *self, XbNode *n, XbQuery *query, GError **error) +xb_silo_query_full (XbSilo *self, XbNode *n, XbQuery *query, GError **error) { XbSiloNode *sn = NULL; g_autoptr(GHashTable) results_hash = g_hash_table_new (g_direct_hash, g_direct_equal); @@ -330,6 +320,10 @@ .position = 0, }; + g_return_val_if_fail (XB_IS_SILO (self), NULL); + g_return_val_if_fail (XB_IS_QUERY (query), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + /* empty silo */ if (xb_silo_is_empty (self)) { g_set_error_literal (error, @@ -350,87 +344,27 @@ /* profile */ if (xb_silo_get_profile_flags (self) & XB_SILO_PROFILE_FLAG_XPATH) { - g_autofree gchar *tmp = xb_query_to_string (query); xb_silo_add_profile (self, timer, "query on %s with `%s` limit=%u -> %u results", n != NULL ? xb_node_get_element (n) : "/", - tmp, + xb_query_get_xpath (query), xb_query_get_limit (query), results->len); } /* nothing found */ if (results->len == 0) { - g_autofree gchar *tmp = xb_query_to_string (query); g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "no results for XPath query '%s'", - tmp); + xb_query_get_xpath (query)); return NULL; } - - /* reverse order */ - if (xb_query_get_flags (query) & XB_QUERY_FLAG_REVERSE) - _g_ptr_array_reverse (results); - return g_steal_pointer (&results); } /** - * xb_silo_query_full: - * @self: a #XbSilo - * @query: an #XbQuery - * @error: the #GError, or %NULL - * - * Searches the silo using an XPath query. - * - * It is safe to call this function from a different thread to the one that - * created the #XbSilo. - * - * Please note: Only a subset of XPath is supported. - * - * Returns: (transfer container) (element-type XbNode): results, or %NULL if unfound - * - * Since: 0.1.13 - **/ -GPtrArray * -xb_silo_query_full (XbSilo *self, XbQuery *query, GError **error) -{ - g_return_val_if_fail (XB_IS_SILO (self), NULL); - g_return_val_if_fail (XB_IS_QUERY (query), NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); - return xb_silo_query_with_root_full (self, NULL, query, error); -} - -/** - * xb_silo_query_first_full: - * @self: a #XbSilo - * @query: an #XbQuery - * @error: the #GError, or %NULL - * - * Searches the silo using an XPath query, returning up to one result. - * - * It is safe to call this function from a different thread to the one that - * created the #XbSilo. - * - * Please note: Only a tiny subset of XPath 1.0 is supported. - * - * Returns: (transfer none): a #XbNode, or %NULL if unfound - * - * Since: 0.1.13 - **/ -XbNode * -xb_silo_query_first_full (XbSilo *self, XbQuery *query, GError **error) -{ - g_autoptr(GPtrArray) results = NULL; - results = xb_silo_query_full (self, query, error); - if (results == NULL) - return NULL; - return g_object_ref (g_ptr_array_index (results, 0)); -} - -/** * xb_silo_query: * @self: a #XbSilo * @xpath: an XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]` diff -Nru libxmlb-0.1.15/src/xb-silo-query.h libxmlb-0.1.8/src/xb-silo-query.h --- libxmlb-0.1.15/src/xb-silo-query.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-silo-query.h 2019-03-26 10:04:46.000000000 +0000 @@ -9,7 +9,6 @@ #include #include "xb-node.h" -#include "xb-query.h" #include "xb-silo.h" G_BEGIN_DECLS @@ -18,15 +17,9 @@ const gchar *xpath, guint limit, GError **error); -GPtrArray *xb_silo_query_full (XbSilo *self, - XbQuery *query, - GError **error); XbNode *xb_silo_query_first (XbSilo *self, const gchar *xpath, GError **error); -XbNode *xb_silo_query_first_full (XbSilo *self, - XbQuery *query, - GError **error); gboolean xb_silo_query_build_index (XbSilo *self, const gchar *xpath, const gchar *attr, diff -Nru libxmlb-0.1.15/src/xb-silo-query-private.h libxmlb-0.1.8/src/xb-silo-query-private.h --- libxmlb-0.1.15/src/xb-silo-query-private.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-silo-query-private.h 2019-03-26 10:04:46.000000000 +0000 @@ -18,7 +18,7 @@ const gchar *xpath, guint limit, GError **error); -GPtrArray *xb_silo_query_with_root_full (XbSilo *self, +GPtrArray *xb_silo_query_full (XbSilo *self, XbNode *n, XbQuery *query, GError **error); diff -Nru libxmlb-0.1.15/src/xb-stack.c libxmlb-0.1.8/src/xb-stack.c --- libxmlb-0.1.15/src/xb-stack.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-stack.c 2019-03-26 10:04:46.000000000 +0000 @@ -10,7 +10,6 @@ #include -#include "xb-opcode-private.h" #include "xb-stack-private.h" struct _XbStack { @@ -110,13 +109,6 @@ } /* private */ -gboolean -xb_stack_push_bool (XbStack *self, gboolean val) -{ - return xb_stack_push_steal (self, xb_opcode_bool_new (val)); -} - -/* private */ XbOpcode * xb_stack_peek_head (XbStack *self) { diff -Nru libxmlb-0.1.15/src/xb-stack-private.h libxmlb-0.1.8/src/xb-stack-private.h --- libxmlb-0.1.15/src/xb-stack-private.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-stack-private.h 2019-03-26 10:04:46.000000000 +0000 @@ -17,8 +17,6 @@ XbStack *xb_stack_ref (XbStack *self); guint xb_stack_get_size (XbStack *self); guint xb_stack_get_max_size (XbStack *self); -gboolean xb_stack_push_bool (XbStack *self, - gboolean val); XbOpcode *xb_stack_peek (XbStack *self, guint idx); XbOpcode *xb_stack_peek_head (XbStack *self); diff -Nru libxmlb-0.1.15/src/xb-string.c libxmlb-0.1.8/src/xb-string.c --- libxmlb-0.1.15/src/xb-string.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-string.c 2019-03-26 10:04:46.000000000 +0000 @@ -206,45 +206,6 @@ xb_string_replace (tmp, "<", "<"); xb_string_replace (tmp, ">", ">"); xb_string_replace (tmp, "\"", """); + xb_string_replace (tmp, "'", "'"); return g_string_free (tmp, FALSE); } - -/* private */ -gboolean -xb_string_isspace (const gchar *str, gssize strsz) -{ - gsize strsz_safe; - if (str == NULL) - return TRUE; - strsz_safe = strsz >= 0 ? (gsize) strsz : strlen (str); - for (gsize i = 0; i < strsz_safe; i++) { - if (!g_ascii_isspace (str[i])) - return FALSE; - } - return TRUE; -} - -void -xb_guid_compute_for_data (XbGuid *out, const guint8 *buf, gsize bufsz) -{ - guint8 buf_tmp[20] = { 0x0 }; - gsize buf_tmpsz = sizeof(buf_tmp); - g_autoptr(GChecksum) checksum = g_checksum_new (G_CHECKSUM_SHA1); - if (buf != NULL && bufsz != 0) - g_checksum_update (checksum, (const guchar *) buf, bufsz); - g_checksum_get_digest (checksum, buf_tmp, &buf_tmpsz); - memcpy (out, buf_tmp, sizeof(XbGuid)); -} - -gchar * -xb_guid_to_string (XbGuid *guid) -{ - return g_strdup_printf ("%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x", - (guint) GUINT32_TO_BE (guid->tlo), - (guint) GUINT16_TO_BE (guid->tmi), - (guint) GUINT16_TO_BE (guid->thi), - (guint) GUINT16_TO_BE (guid->clo), - guid->nde[0], guid->nde[1], - guid->nde[2], guid->nde[3], - guid->nde[4], guid->nde[5]); -} diff -Nru libxmlb-0.1.15/src/xb-string-private.h libxmlb-0.1.8/src/xb-string-private.h --- libxmlb-0.1.15/src/xb-string-private.h 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-string-private.h 2019-03-26 10:04:46.000000000 +0000 @@ -19,20 +19,5 @@ gboolean xb_string_search (const gchar *text, const gchar *search); gchar *xb_string_xml_escape (const gchar *str); -gboolean xb_string_isspace (const gchar *str, - gssize strsz); - -typedef struct __attribute__ ((packed)) { - guint32 tlo; - guint16 tmi; - guint16 thi; - guint16 clo; - guint8 nde[6]; -} XbGuid; - -gchar *xb_guid_to_string (XbGuid *guid); -void xb_guid_compute_for_data (XbGuid *out, - const guint8 *buf, - gsize bufsz); G_END_DECLS diff -Nru libxmlb-0.1.15/src/xb-tool.c libxmlb-0.1.8/src/xb-tool.c --- libxmlb-0.1.15/src/xb-tool.c 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/src/xb-tool.c 2019-03-26 10:04:46.000000000 +0000 @@ -8,9 +8,7 @@ #include #include -#ifdef HAVE_GIO_UNIX #include -#endif #include #include "xb-builder.h" @@ -426,7 +424,6 @@ return TRUE; } -#ifdef HAVE_GIO_UNIX static gboolean xb_tool_sigint_cb (gpointer user_data) { @@ -435,7 +432,6 @@ g_cancellable_cancel (priv->cancellable); return FALSE; } -#endif int main (int argc, char *argv[]) @@ -499,11 +495,9 @@ priv->cancellable = g_cancellable_new (); g_signal_connect (priv->cancellable, "cancelled", G_CALLBACK (xb_tool_cancelled_cb), priv); -#ifdef HAVE_GIO_UNIX g_unix_signal_add_full (G_PRIORITY_DEFAULT, SIGINT, xb_tool_sigint_cb, priv, NULL); -#endif /* sort by command name */ g_ptr_array_sort (priv->cmd_array, diff -Nru libxmlb-0.1.15/.travis.yml libxmlb-0.1.8/.travis.yml --- libxmlb-0.1.15/.travis.yml 2020-03-04 15:53:22.000000000 +0000 +++ libxmlb-0.1.8/.travis.yml 2019-03-26 10:04:46.000000000 +0000 @@ -5,24 +5,10 @@ services: - docker -env: - - OS=debian - - OS=fedora - - OS=fedora-w64 - before_script: - - docker build -t libxmlb-${OS} -f contrib/ci/Dockerfile-${OS} . + - docker build -t libxmlb-fedora -f contrib/ci/Dockerfile-fedora . + - docker build -t libxmlb-debian -f contrib/ci/Dockerfile-debian . script: - - docker run -t -v `pwd`:/build libxmlb-${OS} ./contrib/ci/build-${OS}.sh - -jobs: - include: - - stage: abi - name: "Check for ABI breaks" - env: - - OS=fedora - before_script: - - docker build -t libxmlb-${OS} -f contrib/ci/Dockerfile-${OS} . - script: - - docker run -t -v `pwd`:/build libxmlb-${OS} ./contrib/ci/check-abi $(git describe --abbrev=0 --tags) $(git rev-parse HEAD) + - docker run -t -v `pwd`:/build libxmlb-fedora ./contrib/ci/build_and_test.sh + - docker run -t -v `pwd`:/build libxmlb-debian ./contrib/ci/build_and_test.sh