From: Ronny Chevalier Date: Fri, 10 Apr 2015 14:53:17 +0000 (+0200) Subject: core: set_put never returns -EEXIST X-Git-Tag: v226.4~1^2~488 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=7ed154bc31a3aacf289b54ae7b117a46985e1480;p=elogind.git core: set_put never returns -EEXIST When the value is already there it returns 0. Also add a test to ensure this --- diff --git a/src/login/test-login-tables.c b/src/login/test-login-tables.c index a4196bf14..0ee5ddcc9 100644 --- a/src/login/test-login-tables.c +++ b/src/login/test-login-tables.c @@ -1,7 +1,7 @@ /*** This file is part of systemd - Copyright 2013 Zbigniew Jędrzejewski-Szmek + Copyright 2014 Zbigniew Jędrzejewski-Szmek systemd is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,19 +17,47 @@ along with systemd; If not, see . ***/ -#include "logind-action.h" -#include "logind-session.h" +#include "set.h" -#include "test-tables.h" +static void test_set_steal_first(void) { + _cleanup_set_free_ Set *m = NULL; + int seen[3] = {}; + char *val; -int main(int argc, char **argv) { - test_table(handle_action, HANDLE_ACTION); - test_table(inhibit_mode, INHIBIT_MODE); - test_table(kill_who, KILL_WHO); - test_table(session_class, SESSION_CLASS); - test_table(session_state, SESSION_STATE); - test_table(session_type, SESSION_TYPE); - test_table(user_state, USER_STATE); + m = set_new(&string_hash_ops); + assert_se(m); - return EXIT_SUCCESS; + assert_se(set_put(m, (void*) "1") == 1); + assert_se(set_put(m, (void*) "22") == 1); + assert_se(set_put(m, (void*) "333") == 1); + + while ((val = set_steal_first(m))) + seen[strlen(val) - 1]++; + + assert_se(seen[0] == 1 && seen[1] == 1 && seen[2] == 1); + + assert_se(set_isempty(m)); +} + +static void test_set_put(void) { + _cleanup_set_free_ Set *m = NULL; + + m = set_new(&string_hash_ops); + assert_se(m); + + assert_se(set_put(m, (void*) "1") == 1); + assert_se(set_put(m, (void*) "22") == 1); + assert_se(set_put(m, (void*) "333") == 1); + assert_se(set_put(m, (void*) "333") == 0); + assert_se(set_remove(m, (void*) "333")); + assert_se(set_put(m, (void*) "333") == 1); + assert_se(set_put(m, (void*) "333") == 0); + assert_se(set_put(m, (void*) "22") == 0); +} + +int main(int argc, const char *argv[]) { + test_set_steal_first(); + test_set_put(); + + return 0; }