Skip to content

Commit ce5dfed

Browse files
committed
move setup_directory_skip to bf.c
1 parent 49f9004 commit ce5dfed

File tree

5 files changed

+101
-94
lines changed

5 files changed

+101
-94
lines changed

include/utils.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ OF SUCH DAMAGE.
7373
#include "config.h"
7474
#include "descend.h"
7575
#include "plugin.h"
76-
#include "trie.h"
7776
#include "xattrs.h"
7877

7978
#ifdef __cplusplus
@@ -131,9 +130,6 @@ size_t trailing_non_match_index(const char *str, size_t len,
131130
*/
132131
size_t dirname_len(const char *path, size_t len);
133132

134-
/* add contents of filename into skip */
135-
ssize_t setup_directory_skip(trie_t *skip, const char *filename);
136-
137133
/* strstr/strtok replacement */
138134
char *split(char *src, const char *delim, const size_t delim_len, const char *end);
139135

src/bf.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,46 @@ static int load_plugin_library(struct input *in, char *plugin_name) {
194194
return 0;
195195
}
196196

197+
/*
198+
* create a trie of directory names to skip from a file
199+
*
200+
* not static to allow for testing
201+
*/
202+
ssize_t setup_directory_skip(trie_t *skip, const char *filename) {
203+
if (!skip || !filename) {
204+
return -1;
205+
}
206+
207+
/* add user defined directory names to skip */
208+
FILE *skipfile = fopen(filename, "r");
209+
if (!skipfile) {
210+
fprintf(stderr, "Error: Cannot open skip file \"%s\"\n", filename);
211+
return -1;
212+
}
213+
214+
ssize_t count = 0;
215+
216+
char *line = NULL;
217+
size_t n = 0;
218+
ssize_t len = 0;
219+
while ((len = getline(&line, &n, skipfile)) > -1) {
220+
len = trailing_non_match_index(line, len, "\r\n", 2);
221+
if (len == 0) {
222+
continue;
223+
}
224+
225+
if (!trie_search(skip, line, len, NULL)) {
226+
trie_insert(skip, line, len, NULL, NULL);
227+
count++;
228+
}
229+
}
230+
free(line);
231+
232+
fclose(skipfile);
233+
234+
return count;
235+
}
236+
197237
void print_help(const char* prog_name,
198238
const struct option* options,
199239
const char* positional_args_help_str) {

src/utils.c

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -493,42 +493,6 @@ size_t dirname_len(const char *path, size_t len) {
493493
return trailing_match_index(path, len, "/", 1);
494494
}
495495

496-
/* create a trie of directory names to skip from a file */
497-
ssize_t setup_directory_skip(trie_t *skip, const char *filename) {
498-
if (!skip || !filename) {
499-
return -1;
500-
}
501-
502-
/* add user defined directory names to skip */
503-
FILE *skipfile = fopen(filename, "r");
504-
if (!skipfile) {
505-
fprintf(stderr, "Error: Cannot open skip file \"%s\"\n", filename);
506-
return -1;
507-
}
508-
509-
ssize_t count = 0;
510-
511-
char *line = NULL;
512-
size_t n = 0;
513-
ssize_t len = 0;
514-
while ((len = getline(&line, &n, skipfile)) > -1) {
515-
len = trailing_non_match_index(line, len, "\r\n", 2);
516-
if (len == 0) {
517-
continue;
518-
}
519-
520-
if (!trie_search(skip, line, len, NULL)) {
521-
trie_insert(skip, line, len, NULL, NULL);
522-
count++;
523-
}
524-
}
525-
free(line);
526-
527-
fclose(skipfile);
528-
529-
return count;
530-
}
531-
532496
/* strstr/strtok replacement */
533497
/* does not terminate on NULL character */
534498
/* does not skip to the next non-empty column */

test/unit/googletest/bf.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ OF SUCH DAMAGE.
6262

6363

6464

65+
#include <fstream>
6566
#include <unistd.h>
6667

6768
#include <gtest/gtest.h>
@@ -792,3 +793,63 @@ TEST(INSTALL, UINT64) {
792793
1, 1024,
793794
123, 0, 1234);
794795
}
796+
797+
extern "C" {
798+
799+
// not declared in bf.h
800+
ssize_t setup_directory_skip(trie_t *skip, const char *filename);
801+
802+
}
803+
804+
TEST(setup_directory_skip, file) {
805+
const std::string skip_dirs[] = {
806+
"skip0",
807+
"skip1",
808+
"s p a c e s",
809+
};
810+
811+
char skip_name[] = "XXXXXX";
812+
const int skip_fd = mkstemp(skip_name);
813+
ASSERT_NE(skip_fd, -1);
814+
EXPECT_EQ(close(skip_fd), 0);
815+
816+
{
817+
std::ofstream skip_stream(skip_name);
818+
EXPECT_TRUE(skip_stream);
819+
820+
skip_stream << std::endl; // start with empty line
821+
for(std::string const & skip_dir : skip_dirs) {
822+
skip_stream << skip_dir << std::endl;
823+
skip_stream << skip_dir << "\r" << std::endl; // duplicates
824+
}
825+
}
826+
827+
trie_t *skip = trie_alloc();
828+
ASSERT_NE(skip, nullptr);
829+
EXPECT_EQ(setup_directory_skip(skip, skip_name), (ssize_t) (sizeof(skip_dirs) / sizeof(skip_dirs[0])));
830+
for(std::string const & skip_dir : skip_dirs) {
831+
EXPECT_EQ(trie_search(skip, skip_dir.c_str(), skip_dir.size(), nullptr), 1);
832+
}
833+
trie_free(skip);
834+
835+
EXPECT_EQ(remove(skip_name), 0);
836+
}
837+
838+
TEST(setup_directory_skip, bad) {
839+
trie_t *skip = trie_alloc();
840+
ASSERT_NE(skip, nullptr);
841+
842+
char name[] = "XXXXXX";
843+
const int fd = mkstemp(name);
844+
ASSERT_GT(fd, -1);
845+
EXPECT_EQ(setup_directory_skip(skip, name), 0);
846+
EXPECT_EQ(close(fd), 0);
847+
EXPECT_EQ(remove(name), 0);
848+
849+
EXPECT_EQ(setup_directory_skip(skip, ""), -1);
850+
EXPECT_EQ(setup_directory_skip(skip, nullptr), -1);
851+
852+
trie_free(skip);
853+
854+
EXPECT_EQ(setup_directory_skip(nullptr, ""), -1);
855+
}

test/unit/googletest/utils.cpp.in

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ OF SUCH DAMAGE.
6666
#include <cstdio>
6767
#include <cstring>
6868
#include <fcntl.h>
69-
#include <fstream>
7069
#include <random>
7170
#include <sys/resource.h>
7271
#include <sys/stat.h>
@@ -797,59 +796,6 @@ TEST(trailing_non_match_index, paths) {
797796
EXPECT_EQ(trailing_non_match_index(nullptr, 10, match, match_len), (size_t) 0);
798797
}
799798

800-
TEST(setup_directory_skip, file) {
801-
const std::string skip_dirs[] = {
802-
"skip0",
803-
"skip1",
804-
"s p a c e s",
805-
};
806-
807-
char skip_name[] = "XXXXXX";
808-
const int skip_fd = mkstemp(skip_name);
809-
ASSERT_NE(skip_fd, -1);
810-
EXPECT_EQ(close(skip_fd), 0);
811-
812-
{
813-
std::ofstream skip_stream(skip_name);
814-
EXPECT_TRUE(skip_stream);
815-
816-
skip_stream << std::endl; // start with empty line
817-
for(std::string const & skip_dir : skip_dirs) {
818-
skip_stream << skip_dir << std::endl;
819-
skip_stream << skip_dir << "\r" << std::endl; // duplicates
820-
}
821-
}
822-
823-
trie_t *skip = trie_alloc();
824-
ASSERT_NE(skip, nullptr);
825-
EXPECT_EQ(setup_directory_skip(skip, skip_name), (ssize_t) (sizeof(skip_dirs) / sizeof(skip_dirs[0])));
826-
for(std::string const & skip_dir : skip_dirs) {
827-
EXPECT_EQ(trie_search(skip, skip_dir.c_str(), skip_dir.size(), nullptr), 1);
828-
}
829-
trie_free(skip);
830-
831-
EXPECT_EQ(remove(skip_name), 0);
832-
}
833-
834-
TEST(setup_directory_skip, bad) {
835-
trie_t *skip = trie_alloc();
836-
ASSERT_NE(skip, nullptr);
837-
838-
char name[] = "XXXXXX";
839-
const int fd = mkstemp(name);
840-
ASSERT_GT(fd, -1);
841-
EXPECT_EQ(setup_directory_skip(skip, name), 0);
842-
EXPECT_EQ(close(fd), 0);
843-
EXPECT_EQ(remove(name), 0);
844-
845-
EXPECT_EQ(setup_directory_skip(skip, ""), -1);
846-
EXPECT_EQ(setup_directory_skip(skip, nullptr), -1);
847-
848-
trie_free(skip);
849-
850-
EXPECT_EQ(setup_directory_skip(nullptr, ""), -1);
851-
}
852-
853799
TEST(split, delims) {
854800
const char delims[] = "\xfe\xff";
855801
char line[MAXPATH];

0 commit comments

Comments
 (0)