#include "chomp.h"
#include "mlmmj.h"
+
+typedef int (cmpf)(const char *s1, const char *s2);
+
strlist *ctrlvalues(int ctrlfd, const char *ctrlstr)
{
char *line = NULL;
return ret;
}
+
+bool
+ctrlvalues_contains(int ctrlfd, const char *ctrlstr, const char *comp, bool casesensitive)
+{
+ char *line = NULL;
+ size_t linecap = 0;
+ FILE *f;
+ int fd;
+ cmpf *cmp;
+
+ cmp = casesensitive ? strcmp : strcasecmp;
+
+ fd = openat(ctrlfd, ctrlstr, O_RDONLY|O_CLOEXEC);
+ if (fd == -1 || (f = fdopen(fd, "r")) == NULL)
+ return (false);
+ while (getline(&line, &linecap, f) > 0) {
+ chomp(line);
+ if (*line == '\0')
+ continue;
+ if (cmp(comp, line) == 0) {
+ free(line);
+ fclose(f);
+ return (true);
+ }
+ }
+
+ free(line);
+ fclose(f);
+ return (false);
+}
ATF_REQUIRE_EQ(ctrlcontent(-1, "plop"), NULL);
ATF_REQUIRE_EQ(ctrlcontent(ctrlfd, "plop"), NULL);
ATF_REQUIRE_EQ(ctrlvalues(ctrlfd, "plop"), NULL);
+ ATF_REQUIRE(!ctrlvalues_contains(ctrlfd, "plop", "nope", false));
+ ATF_REQUIRE(ctrlvalues_contains(ctrlfd, "listaddress", "test@test", false));
+ ATF_REQUIRE(!ctrlvalues_contains(ctrlfd, "listaddress", "tesT@test", true));
+ ATF_REQUIRE(ctrlvalues_contains(ctrlfd, "listaddress", "tesT@test", false));
ATF_REQUIRE_STREQ(ctrlcontent(ctrlfd, "listaddress"), "test@test\n");
ATF_REQUIRE_EQ(ctrltimet(ctrlfd, "listaddress", 0), 0);
ATF_REQUIRE_EQ(ctrltimet(ctrlfd, "plop", 0), 0);
ATF_REQUIRE_EQ(textcontent(ctrlfd, "text"), NULL);
atf_utils_create_file("control/text/text", "this is a test");
ATF_REQUIRE_STREQ(textcontent(ctrlfd, "text"), "this is a test");
+
+ ATF_REQUIRE(ctrlvalues_contains(ctrlfd, "val", "line2", true));
+ ATF_REQUIRE(!ctrlvalues_contains(ctrlfd, "val", "Line2", true));
+ ATF_REQUIRE(ctrlvalues_contains(ctrlfd, "val", "Line2", false));
}
ATF_TC_BODY(incindexfile, tc)