diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 2c9d15c..5e7c56f 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -12,12 +12,42 @@ steps: image: alpine:latest commands: - apk update - - apk add --no-cache bash build-base words-en gdb perl pcre2 pcre2-dev db db-dev pkgconfig meson ninja + - apk add --no-cache bash build-base gdb perl pcre2 pcre2-dev db db-dev pkgconfig meson ninja - meson setup --reconfigure build - ninja -C build + + test-berkeley: + when: + event: [push] + image: alpine:latest + commands: + - apk update + - apk add --no-cache bash build-base pcre2 pcre2-dev db db-dev - rm -f test.db - - build/dbtool -d test.db -i -k "test" -v "blah blah blah" + # insert keys + - build/dbtool -d test.db -i -k test -v blah + - build/dbtool -d test.db -i -k foo -v bar + # look if the appear in the dump - build/dbtool -d test.db -D | grep blah + # count 'em + - build/dbtool -d test.db -D | wc -l | grep 2 + # search for key + - build/dbtool -d test.db -s -k test + # search for key regex + - build/dbtool -d test.db -S -k 't$' + # remove key + - build/dbtool -d test.db -r -k foo + # count must match + - build/dbtool -d test.db -D | wc -l | grep 1 + # modify a key + - build/dbtool -d test.db -u -k test -v modified + # check modified key + - build/dbtool -d test.db -s -k test | grep modified + # use splitting with regex + - printf "today:100\nyesterday:500\n" | build/dbtool -d test.db -i -f -t '^([^:]*):([^:]*)' + # check if it works + - cat /etc/passwd | build/dbtool -d test.db -s -k today | grep 100 + build-gdbm: when: @@ -25,9 +55,42 @@ steps: image: alpine:latest commands: - apk update - - apk add --no-cache bash build-base words-en gdb perl pcre2 pcre2-dev gdbm gdbm-dev pkgconfig meson ninja + - apk add --no-cache bash build-base perl pcre2 pcre2-dev gdbm gdbm-dev pkgconfig meson ninja - meson setup --reconfigure build - ninja -C build - rm -f test.db - build/dbtool -d test.db -i -k "test" -v "blah blah blah" - build/dbtool -d test.db -D | grep blah + + test-gdbm: + when: + event: [push] + image: alpine:latest + commands: + - apk update + - apk add --no-cache bash build-base pcre2 pcre2-dev gdbm gdbm-dev + - rm -f test.db + # insert keys + - build/dbtool -d test.db -i -k test -v blah + - build/dbtool -d test.db -i -k foo -v bar + # look if the appear in the dump + - build/dbtool -d test.db -D | grep blah + # count 'em + - build/dbtool -d test.db -D | wc -l | grep 2 + # search for key + - build/dbtool -d test.db -s -k test + # search for key regex + - build/dbtool -d test.db -S -k 't$' + # remove key + - build/dbtool -d test.db -r -k foo + # count must match + - build/dbtool -d test.db -D | wc -l | grep 1 + # modify a key + - build/dbtool -d test.db -u -k test -v modified + # check modified key + - build/dbtool -d test.db -s -k test | grep modified + # use splitting with regex + - printf "today:100\nyesterday:500\n" | build/dbtool -d test.db -i -f -t '^([^:]*):([^:]*)' + # check if it works + - cat /etc/passwd | build/dbtool -d test.db -s -k today | grep 100 + diff --git a/.woodpecker/release.yaml b/.woodpecker/release.yaml index 62466a5..89241ee 100644 --- a/.woodpecker/release.yaml +++ b/.woodpecker/release.yaml @@ -6,12 +6,12 @@ labels: steps: compile: when: - event: [manual] + event: [tag] image: alpine:latest commands: - apk update - - apk add --no-cache bash build-base words-en gdb perl pcre2 pcre2-dev gdbm gdbm-dev pkgconfig meson ninja - - meson setup --reconfigure --prefer-static build + - apk add --no-cache bash build-base words-en gdb perl pcre2-static pcre2-dev gdbm gdbm-dev pkgconfig meson ninja + - meson setup --reconfigure --prefer-static -Dcpp_link_args="-static" --buildtype=release build - ninja -C build - file build/dbtool - mv build/dbtool dbtool-linux-amd64 @@ -19,7 +19,7 @@ steps: release: image: alpine:latest when: - event: [manual] + event: [tag] environment: DEPLOY_TOKEN: from_secret: DEPLOY_TOKEN diff --git a/engine.cc b/engine.cc index 9b98b48..74b65a3 100644 --- a/engine.cc +++ b/engine.cc @@ -315,8 +315,7 @@ void Engine::regexp() { // record end mode = "key"; if(config.token != "") { - //char **subs = new char*[2]; - char *subs[2]; + string *subs = new string[2]; num = pcre2_match(p_pcre, (PCRE2_SPTR)line.c_str(), (PCRE2_SIZE)line.length(), 0, 0, match_data, NULL); @@ -326,19 +325,20 @@ void Engine::regexp() { cerr << "Token " << config.token << " did not produce sub strings!\n"; else { ovector = pcre2_get_ovector_pointer(match_data); + const char *constline = const_cast(line.c_str()); + - for (int i = 0; i < num; i++) { - char * substring_start = const_cast(line.c_str()) + ovector[2*i]; + for (int i = 1; i < num; i++) { + PCRE2_SPTR substring_start = (PCRE2_SPTR8)constline + ovector[2*i]; + PCRE2_SIZE substring_length = ovector[2*i+1] - ovector[2*i]; - if (i == 2) { - break; - } - - subs[i] = substring_start; + char *part = (char *)malloc(substring_length+1); + part = strncpy(part, (char *)substring_start, substring_length); + + subs[i-1] = part; + free(part); } - - free(ovector); - + if(config.reverse) { value = subs[0]; key = subs[1]; @@ -349,9 +349,8 @@ void Engine::regexp() { } } - //delete(subs); + delete[] subs; - line = ""; } value = encode(value); @@ -563,8 +562,9 @@ void Engine::regexp() { */ void Engine::remove() { init(); - #ifdef HAVE_BERKELEY - Dbt key((char *)config.key.c_str(), config.key.length() + 1); +#ifdef HAVE_BERKELEY + char *k = (char *)config.key.c_str(); + Dbt key(k, strlen(k)); int ret; if((ret = db->del(NULL, &key, 0)) != 0) { cerr << "Database error" << "(" << strerror(ret) << ")" << endl; diff --git a/meson.build b/meson.build index b5720fe..80a3872 100644 --- a/meson.build +++ b/meson.build @@ -2,7 +2,7 @@ project( 'dbtool', 'cpp', license: 'GPL', - version: '1.9.1', + version: '1.9.2', meson_version: '>=1.3', default_options: [ 'warning_level=2',