init
This commit is contained in:
commit
39245a2570
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.gdb_history
|
||||
*.out
|
31
filesystem_remove.c
Normal file
31
filesystem_remove.c
Normal file
@ -0,0 +1,31 @@
|
||||
#include "filesystem_remove.h"
|
||||
|
||||
#define _XOPEN_SOURCE 500
|
||||
#include <stdio.h>
|
||||
#include <ftw.h>
|
||||
|
||||
static
|
||||
int remove_wrapper(
|
||||
const char * fpath,
|
||||
const struct stat * sb,
|
||||
int typeflag,
|
||||
struct FTW * ftwbuf
|
||||
) {
|
||||
if (typeflag == FTW_DNR
|
||||
|| typeflag == FTW_NS) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (remove(fpath)) { return 2; }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool filesystem_remove(const char * const p) {
|
||||
#define NOPENFD 256
|
||||
const int result = nftw(p, remove_wrapper, NOPENFD, FTW_DEPTH | FTW_PHYS);
|
||||
if (result) { return false; }
|
||||
|
||||
return true;
|
||||
#undef NOPENFD
|
||||
}
|
10
filesystem_remove.h
Normal file
10
filesystem_remove.h
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef FILESYSTEM_REMOVE
|
||||
#define FILESYSTEM_REMOVE
|
||||
#include <stdbool.h>
|
||||
|
||||
/* C replication of `std::filesystem::remove` of C++17
|
||||
* Unlike standard C remove(3), it can remove recursively.
|
||||
*/
|
||||
bool filesystem_remove(const char * const p);
|
||||
|
||||
#endif
|
1
linked_file.txt
Normal file
1
linked_file.txt
Normal file
@ -0,0 +1 @@
|
||||
testdir/ soft links to this file
|
6
test.c
Normal file
6
test.c
Normal file
@ -0,0 +1,6 @@
|
||||
// @BAKE gcc -o $*.out $@ filesystem_remove.c -ggdb
|
||||
#include "filesystem_remove.h"
|
||||
|
||||
signed main(void) {
|
||||
return !filesystem_remove("testdir/");
|
||||
}
|
1
testdir/file.txt
Normal file
1
testdir/file.txt
Normal file
@ -0,0 +1 @@
|
||||
this is a text file with contents
|
1
testdir/subdir/comment.txt
Normal file
1
testdir/subdir/comment.txt
Normal file
@ -0,0 +1 @@
|
||||
this is a comment
|
1
testdir/subdir/link
Symbolic link
1
testdir/subdir/link
Symbolic link
@ -0,0 +1 @@
|
||||
../../linked_file.txt
|
1
testdir/subdir/note.txt
Normal file
1
testdir/subdir/note.txt
Normal file
@ -0,0 +1 @@
|
||||
this is a note
|
Loading…
x
Reference in New Issue
Block a user