diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-11-11 18:39:42 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-11-11 18:39:42 +0000 |
commit | bc12482932a6771566c7dcabc53f34e6297510f2 (patch) | |
tree | b6f3f100201a5475fecdd1df66a45b1178831457 /tests/g_open_ce.c | |
parent | 894b78d5bcb7b609a3b52ce804306a63c4761282 (diff) | |
download | gdbm-bc12482932a6771566c7dcabc53f34e6297510f2.tar.gz gdbm-bc12482932a6771566c7dcabc53f34e6297510f2.tar.bz2 |
Implement cloexec in gdbm_reorganize. Add test cases.
* compat/dbmopen.c: Apply O_CLOEXEC for newly created dir
file, if requested.
* src/gdbmdefs.h (gdbm_file_info) <cloexec>: New member.
* src/gdbmopen.c (gdbm_open): Initialize cloexec member.
* src/gdbmreorg.c (gdbm_reorganize): Propagate cloexec bit
to the new database.
* tests/.cvsignore: Update.
* tests/cloexec00.at: New test case.
* tests/cloexec01.at: Likewise.
* tests/cloexec02.at: Likewise.
* tests/cloexec03.at: Likewise.
* fdop.c: New auxiliary program.
* g_open_ce: New test program.
* g_reorg_ce: New test program.
* d_creat_ce: New test program.
* tests/Makefile.am: Add new test cases and test programs.
* tests/testsuite.at: Include new test cases.
* doc/gdbm.texinfo: Minor change.
Diffstat (limited to 'tests/g_open_ce.c')
-rw-r--r-- | tests/g_open_ce.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/g_open_ce.c b/tests/g_open_ce.c new file mode 100644 index 0000000..4f1fcd4 --- /dev/null +++ b/tests/g_open_ce.c @@ -0,0 +1,66 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> +#include <gdbm.h> + +char * +ntos (int n, char *buf, size_t size) +{ + char *p = buf + size; + *--p = 0; + do + { + int x = n % 10; + *--p = '0' + x; + n /= 10; + } + while (n); + return p; +} + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + +int +main (int argc, char *argv[]) +{ + GDBM_FILE d; + char fdbuf[80]; + + if (argc != 2) + { + fprintf (stderr, "usage: %s PATH-TO-FDOP\n", argv[0]); + return 2; + } + if (!O_CLOEXEC) + return 77; + d = gdbm_open ("file.db", 0, GDBM_NEWDB|GDBM_CLOEXEC, 0600, NULL); + if (!d) + { + fprintf (stderr, "gdbm_open: %s\n", gdbm_strerror (gdbm_errno)); + return 3; + } + execl (argv[1], "fdop", + ntos (gdbm_fdesc (d), fdbuf, sizeof (fdbuf)), NULL); + return 127; +} + |