diff options
author | Volker Lendecke <vl@samba.org> | 2016-06-10 11:40:33 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2016-06-13 14:11:11 +0200 |
commit | 46916b24e9c8b56a14152488e270a05064cf4586 (patch) | |
tree | a58821237154f85c1d76498006fd3ca8cfc73a41 /lib | |
parent | 55529d0f857ce11a1a0096850b1001d59dd6cb1d (diff) | |
download | samba-46916b24e9c8b56a14152488e270a05064cf4586.tar.gz |
lib: Add a little closefrom() test
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Mon Jun 13 14:11:11 CEST 2016 on sn-devel-144
Diffstat (limited to 'lib')
-rw-r--r-- | lib/replace/test/testsuite.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/replace/test/testsuite.c b/lib/replace/test/testsuite.c index 961b77d9eaf..dba545e27a2 100644 --- a/lib/replace/test/testsuite.c +++ b/lib/replace/test/testsuite.c @@ -1063,6 +1063,38 @@ static int test_memmem(void) return true; } +static bool test_closefrom(void) +{ + int i, fd; + + for (i=0; i<100; i++) { + fd = dup(0); + if (fd == -1) { + perror("dup failed"); + return false; + } + + /* 1000 is just an arbitrarily chosen upper bound */ + + if (fd >= 1000) { + printf("fd=%d\n", fd); + return false; + } + } + + closefrom(3); + + for (i=3; i<=fd; i++) { + off_t off; + off = lseek(i, 0, SEEK_CUR); + if ((off != (off_t)-1) || (errno != EBADF)) { + printf("fd %d not closed\n", i); + return false; + } + } + + return true; +} bool torture_local_replace(struct torture_context *ctx) { @@ -1113,6 +1145,7 @@ bool torture_local_replace(struct torture_context *ctx) ret &= test_utime(); ret &= test_utimes(); ret &= test_memmem(); + ret &= test_closefrom(); return ret; } |