summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <withnall@endlessm.com>2018-08-01 16:35:13 +0100
committerPhilip Withnall <withnall@endlessm.com>2018-08-01 16:35:13 +0100
commit328fad453a1a3c66f075ae5002638e4aada50570 (patch)
tree53a6df7c51f6320da9ffa6250bbfd928f05aa6ee
parent0a711636ddc9bc8a1405629534bdec9ebca67e06 (diff)
downloaddconf-1454-gvdb-corruption.tar.gz
Signed-off-by: Philip Withnall <withnall@endlessm.com>
-rw-r--r--service/dconf-gvdb-utils.c7
-rw-r--r--service/meson.build22
-rw-r--r--tests/meson.build2
-rw-r--r--tests/writer.c22
4 files changed, 41 insertions, 12 deletions
diff --git a/service/dconf-gvdb-utils.c b/service/dconf-gvdb-utils.c
index 0a3f137..fbdb811 100644
--- a/service/dconf-gvdb-utils.c
+++ b/service/dconf-gvdb-utils.c
@@ -69,11 +69,12 @@ dconf_gvdb_utils_read_file (const gchar *filename,
* The code to find an unused backup filename is racy, but this is an
* error handling path. Who cares. */
gchar *backup_filename = g_strdup_printf ("%s~", filename);
- guint i = 0;
- while (g_file_test (backup_filename, G_FILE_TEST_EXISTS))
+ guint i;
+
+ for (i = 0; i < G_MAXUINT && g_file_test (backup_filename, G_FILE_TEST_EXISTS); i++)
{
g_free (backup_filename);
- backup_filename = g_strdup_printf ("%s~%u", filename, i++);
+ backup_filename = g_strdup_printf ("%s~%u", filename, i);
}
if (g_rename (filename, backup_filename) != 0)
diff --git a/service/meson.build b/service/meson.build
index f651e25..00e5e56 100644
--- a/service/meson.build
+++ b/service/meson.build
@@ -21,26 +21,28 @@ configure_file(
configuration: service_conf
)
-sources = [
+lib_sources = [
'dconf-blame.c',
'dconf-gvdb-utils.c',
'dconf-keyfile-writer.c',
'dconf-service.c',
'dconf-shm-writer.c',
'dconf-writer.c',
- 'main.c'
+]
+sources = [
+ 'main.c',
]
-sources += gnome.gdbus_codegen(
+lib_sources += gnome.gdbus_codegen(
'dconf-generated',
dconf_namespace + '.xml',
interface_prefix: dconf_namespace + '.',
namespace: 'DConfDBus'
)
-executable(
- 'dconf-service',
- sources,
+libdconf_service = static_library(
+ name,
+ sources: lib_sources,
include_directories: top_inc,
dependencies: gio_unix_dep,
link_with: [
@@ -48,6 +50,14 @@ executable(
libdconf_shm,
libgvdb
],
+)
+
+executable(
+ 'dconf-service',
+ sources,
+ include_directories: top_inc,
+ dependencies: gio_unix_dep,
+ link_with: libdconf_service,
install: true,
install_dir: dconf_libexecdir
)
diff --git a/tests/meson.build b/tests/meson.build
index 6d70212..6948ee9 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -25,7 +25,7 @@ unit_tests = [
['gdbus-filter', 'dbus.c', '-DDBUS_BACKEND="/gdbus/filter"', gio_unix_dep, libdconf_gdbus_filter],
['engine', 'engine.c', '-DSRCDIR="@0@"'.format(test_dir), [glib_dep, dl_dep, m_dep], [libdconf_engine, libdconf_common, libdconf_mock]],
['client', 'client.c', '-DSRCDIR="@0@"'.format(test_dir), gio_unix_dep, [libdconf_client, libdconf_engine, libdconf_common, libdconf_mock]],
- ['writer', 'writer.c', '-DSRCDIR="@0@"'.format(test_dir), [glib_dep, dl_dep, m_dep], [libdconf_engine, libdconf_common, libdconf_mock]],
+ ['writer', 'writer.c', '-DSRCDIR="@0@"'.format(test_dir), [glib_dep, dl_dep, m_dep], [libdconf_service, libdconf_mock]],
]
foreach unit_test: unit_tests
diff --git a/tests/writer.c b/tests/writer.c
index 92757d1..f4813ec 100644
--- a/tests/writer.c
+++ b/tests/writer.c
@@ -19,26 +19,44 @@
#include <glib.h>
-#include "service/dconf-generated.h"
#include "service/dconf-writer.h"
+/* Test basic initialisation of a #DConfWriter. This is essentially a smoketest. */
static void
test_writer_basic (void)
{
g_autoptr(DConfWriter) writer = NULL;
- writer = dconf_writer_new (DCONF_TYPE_KEYFILE_WRITER, "some-name");
+ writer = DCONF_WRITER (dconf_writer_new (DCONF_TYPE_KEYFILE_WRITER, "some-name"));
g_assert_nonnull (writer);
g_assert_cmpstr (dconf_writer_get_name (writer), ==, "some-name");
}
+/* TODO */
+static void
+test_writer_corrupt_file (void)
+{
+ g_autoptr(DConfWriter) writer = NULL;
+ gboolean retval;
+ g_autoptr(GError) local_error = NULL;
+
+ writer = DCONF_WRITER (dconf_writer_new (DCONF_TYPE_KEYFILE_WRITER, "some-name"));
+ g_assert_nonnull (writer);
+
+ writer_iface = DCONF_DBUS_WRITER_GET_IFACE (writer);
+ retval = writer_iface->handle_init (DCONF_DBUS_WRITER (writer), invocation);
+
+ /* TODO: this is arse */
+}
+
int
main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/writer/basic", test_writer_basic);
+ g_test_add_func ("/writer/corrupt-file", test_writer_corrupt_file);
return g_test_run ();
}