Dmitry Yu Okunev лет назад: 8
Родитель
Сommit
5f49780e67
4 измененных файлов с 56 добавлено и 2 удалено
  1. 1 0
      .gitignore
  2. 7 1
      GNUmakefile
  3. 2 1
      pftw.c
  4. 46 0
      test.c

+ 1 - 0
.gitignore

@@ -1,2 +1,3 @@
 *.o
 libpftw.so
+test

+ 7 - 1
GNUmakefile

@@ -37,7 +37,7 @@ debug:
 
 
 clean:
-	rm -f $(binary) *.o
+	rm -f $(binary) *.o test
 
 distclean: clean
 
@@ -59,3 +59,9 @@ endif
 deinstall:
 	rm -f "$(INSTDIR)"/bin/$(binary)
 
+test: all
+	$(CC) -O3 test.c -lpftw -L. -o test
+
+dotest: test
+	LD_LIBRARY_PATH=. strace -f ./test
+

+ 2 - 1
pftw.c

@@ -546,7 +546,8 @@ int pftw_deinit() {
 		// Interrupting sem_wait()
 		i = 0;
 		while (i < threads_count) {
-			int ret = pthread_kill(threads[i], SIGCONT);
+//			int ret = pthread_kill(threads[i], SIGCONT);
+			int ret = sem_post(&threads_sem);
 			if (ret)
 				return ret;
 			i++;

+ 46 - 0
test.c

@@ -0,0 +1,46 @@
+/*
+    libpftw — parallel file tree walk library
+    
+    Copyright (C) 2015 Dmitry Yu Okunev <dyokunev@ut.mephi.ru> 0x8E30679C
+    
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#define _GNU_SOURCE
+
+#include <stdio.h>
+
+#include "pftw.h"
+
+
+int cb_print(
+	const char *fpath,
+	const struct stat *sb,
+	int typeflag,
+	struct FTW *ftwbuf,
+	void *arg)
+{
+	printf("Path: %s\n", fpath);
+
+	return FTW_CONTINUE;
+}
+
+int main() {
+	printf("pftw_init(8) -> %i\n", pftw_init(8));
+	printf("pftw() -> %i\n", pftw("/var", cb_print, 0, FTW_PHYS|FTW_ACTIONRETVAL, NULL));
+	printf("pftw_deinit() -> %i\n", pftw_deinit());
+
+	return 0;
+}
+