summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2016-06-10 11:40:33 +0200
committerAndreas Schneider <asn@cryptomilk.org>2016-06-13 14:11:11 +0200
commit46916b24e9c8b56a14152488e270a05064cf4586 (patch)
treea58821237154f85c1d76498006fd3ca8cfc73a41 /lib
parent55529d0f857ce11a1a0096850b1001d59dd6cb1d (diff)
downloadsamba-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.c33
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;
}