| diff -urN gdbm-1.15_orig/compat/dbmopen.c gdbm-1.15/compat/dbmopen.c |
| --- gdbm-1.15_orig/compat/dbmopen.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/compat/dbmopen.c 2018-06-17 20:55:43.784407600 +0300 |
| @@ -58,13 +58,17 @@ |
| |
| /* FIXME: revise return codes */ |
| static int |
| -ndbm_open_dir_file0 (const char *file_name, int pagfd, int mode) |
| +ndbm_open_dir_file0 (const char *file_name, struct gdbm_file_info *pag, int mode) |
| { |
| int fd = -1; |
| struct stat st, pagst; |
| unsigned char dirbuf[DEF_DIR_SIZE]; |
| int flags = (mode & GDBM_OPENMASK) == GDBM_READER ? |
| O_RDONLY : O_RDWR; |
| + int pagfd = pag->desc; |
| +#ifdef _WIN32 |
| + HANDLE hFile; |
| +#endif |
| |
| if (mode & GDBM_CLOEXEC) |
| flags |= O_CLOEXEC; |
| @@ -76,22 +80,49 @@ |
| } |
| |
| /* Previous versions of GDBM linked pag to dir. Try to detect this: */ |
| +#ifdef _WIN32 |
| + hFile = CreateFile(file_name, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, |
| + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, |
| + NULL); |
| + |
| + if (hFile != INVALID_HANDLE_VALUE) |
| + { |
| + BY_HANDLE_FILE_INFORMATION fileInfo; |
| + GetFileInformationByHandle (hFile, &fileInfo); |
| + CloseHandle (hFile); |
| + st.st_size = (fileInfo.nFileSizeHigh * MAXDWORD) + fileInfo.nFileSizeLow; |
| + |
| + if (fileInfo.nNumberOfLinks >= 2) |
| + { |
| + BY_HANDLE_FILE_INFORMATION pagInfo; |
| + GetFileInformationByHandle ((HANDLE)_get_osfhandle (pagfd), &pagInfo); |
| + if ((fileInfo.nFileIndexLow == pagInfo.nFileIndexLow) && |
| + (fileInfo.nFileIndexHigh == pagInfo.nFileIndexHigh)) |
| + { |
| + /* Close pag because unlink dir file fails on Windows */ |
| + close (pagfd); |
| +#else |
| if (stat (file_name, &st) == 0) |
| { |
| if (st.st_nlink >= 2) |
| { |
| if (st.st_dev == pagst.st_dev && st.st_ino == pagst.st_ino) |
| { |
| - if (unlink (file_name)) |
| +#endif |
| + int ret = unlink (file_name); |
| +#ifdef _WIN32 |
| + pagfd = pag->desc = open(pag->name, flags | O_BINARY); |
| +#endif |
| + if (ret) |
| { |
| if ((mode & GDBM_OPENMASK) == GDBM_READER) |
| /* Ok, try to cope with it. */ |
| return pagfd; |
| else if (errno != ENOENT) |
| { |
| - gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, TRUE); |
| + gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, TRUE); |
| return -1; |
| - } |
| + } |
| } |
| } |
| else |
| @@ -109,7 +140,7 @@ |
| } |
| else |
| { |
| - fd = open (file_name, flags); |
| + fd = open (file_name, flags | O_BINARY); |
| if (fd == -1) |
| { |
| gdbm_set_errno (NULL, GDBM_FILE_OPEN_ERROR, FALSE); |
| @@ -141,7 +172,7 @@ |
| } |
| |
| /* File does not exist. Create it. */ |
| - fd = open (file_name, flags | O_CREAT, pagst.st_mode & 0777); |
| + fd = open (file_name, flags | O_CREAT | O_BINARY, pagst.st_mode & 0777); |
| if (fd >= 0) |
| { |
| putint (dirbuf, GDBM_DIR_MAGIC); |
| @@ -161,10 +192,11 @@ |
| } |
| |
| static int |
| -ndbm_open_dir_file (const char *base, int pagfd, int mode) |
| +ndbm_open_dir_file (const char *base, struct gdbm_file_info *pag, int mode) |
| { |
| char *file_name = malloc (strlen (base) + sizeof (DIRSUF)); |
| int fd; |
| + int pagfd = pag->desc; |
| |
| if (!file_name) |
| { |
| @@ -172,7 +204,7 @@ |
| return -1; |
| } |
| fd = ndbm_open_dir_file0 (strcat (strcpy (file_name, base), DIRSUF), |
| - pagfd, mode); |
| + pag, mode); |
| free (file_name); |
| return fd; |
| } |
| @@ -265,7 +297,7 @@ |
| } |
| else |
| { |
| - dbm->dirfd = ndbm_open_dir_file (file, dbm->file->desc, open_flags); |
| + dbm->dirfd = ndbm_open_dir_file (file, dbm->file, open_flags); |
| if (dbm->dirfd == -1) |
| { |
| gdbm_close (dbm->file); |
| diff -urN gdbm-1.15_orig/compat/Makefile.am gdbm-1.15/compat/Makefile.am |
| --- gdbm-1.15_orig/compat/Makefile.am 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/compat/Makefile.am 2018-06-17 20:55:43.786407700 +0300 |
| @@ -52,5 +52,5 @@ |
| |
| libgdbm_compat_la_SOURCES = $(DBM_CF) $(NDBM_CF) |
| |
| -libgdbm_compat_la_LDFLAGS = -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| +libgdbm_compat_la_LDFLAGS = -no-undefined -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| |
| diff -urN gdbm-1.15_orig/compat/Makefile.in gdbm-1.15/compat/Makefile.in |
| --- gdbm-1.15_orig/compat/Makefile.in 2018-06-15 23:14:27.000000000 +0300 |
| +++ gdbm-1.15/compat/Makefile.in 2018-06-17 22:30:53.220968700 +0300 |
| @@ -417,7 +417,7 @@ |
| dbmrdonly.c |
| |
| libgdbm_compat_la_SOURCES = $(DBM_CF) $(NDBM_CF) |
| -libgdbm_compat_la_LDFLAGS = -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| +libgdbm_compat_la_LDFLAGS = -no-undefined -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| all: all-am |
| |
| .SUFFIXES: |
| diff -urN gdbm-1.15_orig/configure gdbm-1.15/configure |
| --- gdbm-1.15_orig/configure 2018-06-15 23:14:27.000000000 +0300 |
| +++ gdbm-1.15/configure 2018-06-17 21:24:30.141149600 +0300 |
| @@ -639,6 +639,8 @@ |
| LTLIBOBJS |
| LIBOBJS |
| AUTOM4TE |
| +WIN32_FALSE |
| +WIN32_TRUE |
| COND_GDBMTOOL_DEBUG_FALSE |
| COND_GDBMTOOL_DEBUG_TRUE |
| LFLAGS_DEBUG |
| @@ -15169,6 +15171,27 @@ |
| fi |
| |
| |
| +if test x$host_os = xmingw32 |
| +then |
| + if true; then |
| + WIN32_TRUE= |
| + WIN32_FALSE='#' |
| +else |
| + WIN32_TRUE='#' |
| + WIN32_FALSE= |
| +fi |
| + |
| +else |
| + if false; then |
| + WIN32_TRUE= |
| + WIN32_FALSE='#' |
| +else |
| + WIN32_TRUE='#' |
| + WIN32_FALSE= |
| +fi |
| + |
| +fi |
| + |
| # Initialize the test suite. |
| ac_config_commands="$ac_config_commands tests/atconfig" |
| |
| @@ -15333,6 +15356,14 @@ |
| as_fn_error $? "conditional \"COND_GDBMTOOL_DEBUG\" was never defined. |
| Usually this means the macro was only invoked conditionally." "$LINENO" 5 |
| fi |
| +if test -z "${WIN32_TRUE}" && test -z "${WIN32_FALSE}"; then |
| + as_fn_error $? "conditional \"WIN32\" was never defined. |
| +Usually this means the macro was only invoked conditionally." "$LINENO" 5 |
| +fi |
| +if test -z "${WIN32_TRUE}" && test -z "${WIN32_FALSE}"; then |
| + as_fn_error $? "conditional \"WIN32\" was never defined. |
| +Usually this means the macro was only invoked conditionally." "$LINENO" 5 |
| +fi |
| |
| : "${CONFIG_STATUS=./config.status}" |
| ac_write_fail=0 |
| diff -urN gdbm-1.15_orig/configure.ac gdbm-1.15/configure.ac |
| --- gdbm-1.15_orig/configure.ac 2018-06-15 23:14:19.000000000 +0300 |
| +++ gdbm-1.15/configure.ac 2018-06-17 20:55:43.812409200 +0300 |
| @@ -192,6 +192,13 @@ |
| |
| AM_CONDITIONAL([COND_GDBMTOOL_DEBUG], [test "$want_gdbmtool_debug" = yes]) |
| |
| +if test x$host_os = xmingw32 |
| +then |
| + AM_CONDITIONAL(WIN32, true) |
| +else |
| + AM_CONDITIONAL(WIN32, false) |
| +fi |
| + |
| # Initialize the test suite. |
| AC_CONFIG_TESTDIR(tests) |
| AC_CONFIG_FILES([tests/Makefile tests/atlocal po/Makefile.in]) |
| diff -urN gdbm-1.15_orig/src/fullio.c gdbm-1.15/src/fullio.c |
| --- gdbm-1.15_orig/src/fullio.c 2018-05-30 14:04:21.000000000 +0300 |
| +++ gdbm-1.15/src/fullio.c 2018-06-17 21:33:28.588947000 +0300 |
| @@ -81,7 +81,13 @@ |
| int |
| _gdbm_file_extend (GDBM_FILE dbf, off_t size) |
| { |
| +#ifdef _WIN32 |
| + SYSTEM_INFO si; |
| + GetSystemInfo(&si); |
| + size_t page_size = si.dwPageSize; |
| +#else |
| size_t page_size = sysconf (_SC_PAGESIZE); |
| +#endif |
| char *buf; |
| off_t file_end; |
| |
| diff -urN gdbm-1.15_orig/src/gdbm_load.c gdbm-1.15/src/gdbm_load.c |
| --- gdbm-1.15_orig/src/gdbm_load.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/gdbm_load.c 2018-06-17 20:55:43.821409700 +0300 |
| @@ -18,16 +18,12 @@ |
| # include "gdbm.h" |
| # include "gdbmapp.h" |
| # include "gdbmdefs.h" |
| -# include <pwd.h> |
| -# include <grp.h> |
| |
| int replace = 0; |
| int meta_mask = 0; |
| int no_meta_option; |
| |
| int mode; |
| -uid_t owner_uid; |
| -gid_t owner_gid; |
| |
| char *parseopt_program_doc = "load a GDBM database from a file"; |
| char *parseopt_program_args = "FILE [DB_FILE]"; |
| @@ -45,6 +41,7 @@ |
| static int |
| set_meta_info (GDBM_FILE dbf) |
| { |
| +#if 0 |
| if (meta_mask) |
| { |
| int fd = gdbm_fdesc (dbf); |
| @@ -63,6 +60,7 @@ |
| return 1; |
| } |
| } |
| +#endif |
| return 0; |
| } |
| |
| @@ -139,6 +137,7 @@ |
| } |
| break; |
| |
| +#if 0 |
| case 'u': |
| { |
| size_t len; |
| @@ -198,6 +197,7 @@ |
| meta_mask |= GDBM_META_MASK_OWNER; |
| } |
| break; |
| +#endif |
| |
| case 'r': |
| replace = 1; |
| diff -urN gdbm-1.15_orig/src/gdbmdump.c gdbm-1.15/src/gdbmdump.c |
| --- gdbm-1.15_orig/src/gdbmdump.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/gdbmdump.c 2018-06-17 20:55:43.828410100 +0300 |
| @@ -17,8 +17,6 @@ |
| # include "autoconf.h" |
| # include "gdbmdefs.h" |
| # include "gdbm.h" |
| -# include <pwd.h> |
| -# include <grp.h> |
| # include <time.h> |
| |
| static int |
| @@ -56,8 +54,6 @@ |
| time_t t; |
| int fd; |
| struct stat st; |
| - struct passwd *pw; |
| - struct group *gr; |
| datum key; |
| size_t count = 0; |
| unsigned char *buffer = NULL; |
| @@ -76,13 +72,7 @@ |
| |
| fprintf (fp, "#:file=%s\n", dbf->name); |
| fprintf (fp, "#:uid=%lu,", (unsigned long) st.st_uid); |
| - pw = getpwuid (st.st_uid); |
| - if (pw) |
| - fprintf (fp, "user=%s,", pw->pw_name); |
| fprintf (fp, "gid=%lu,", (unsigned long) st.st_gid); |
| - gr = getgrgid (st.st_gid); |
| - if (gr) |
| - fprintf (fp, "group=%s,", gr->gr_name); |
| fprintf (fp, "mode=%03o\n", st.st_mode & 0777); |
| fprintf (fp, "# End of header\n"); |
| |
| @@ -172,7 +162,7 @@ |
| switch (open_flags) |
| { |
| case GDBM_WRCREAT: |
| - nfd = open (filename, O_WRONLY | O_CREAT | O_EXCL, mode); |
| + nfd = open (filename, O_WRONLY | O_BINARY | O_CREAT | O_EXCL, mode); |
| if (nfd == -1) |
| { |
| GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE); |
| @@ -180,7 +170,7 @@ |
| } |
| break; |
| case GDBM_NEWDB: |
| - nfd = open (filename, O_WRONLY | O_CREAT | O_TRUNC, mode); |
| + nfd = open (filename, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, mode); |
| if (nfd == -1) |
| { |
| GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE); |
| diff -urN gdbm-1.15_orig/src/gdbmexp.c gdbm-1.15/src/gdbmexp.c |
| --- gdbm-1.15_orig/src/gdbmexp.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/gdbmexp.c 2018-06-17 20:55:43.832410400 +0300 |
| @@ -19,7 +19,11 @@ |
| |
| /* Include system configuration before all else. */ |
| # include "autoconf.h" |
| +#ifdef _WIN32 |
| +# include <winsock2.h> |
| +#else |
| # include <arpa/inet.h> |
| +#endif |
| |
| #ifdef GDBM_EXPORT_18 |
| # define GDBM_SET_ERRNO(dbf, ec, fatal) gdbm_errno = ec |
| @@ -104,7 +108,7 @@ |
| switch (flags) |
| { |
| case GDBM_WRCREAT: |
| - nfd = open (exportfile, O_WRONLY | O_CREAT | O_EXCL, mode); |
| + nfd = open (exportfile, O_WRONLY | O_BINARY | O_CREAT | O_EXCL, mode); |
| if (nfd == -1) |
| { |
| GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE); |
| @@ -112,7 +116,7 @@ |
| } |
| break; |
| case GDBM_NEWDB: |
| - nfd = open (exportfile, O_WRONLY | O_CREAT | O_TRUNC, mode); |
| + nfd = open (exportfile, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, mode); |
| if (nfd == -1) |
| { |
| GDBM_SET_ERRNO (NULL, GDBM_FILE_OPEN_ERROR, FALSE); |
| @@ -128,7 +132,7 @@ |
| return -1; |
| } |
| |
| - fp = fdopen (nfd, "w"); |
| + fp = fdopen (nfd, "wb"); |
| if (!fp) |
| { |
| close (nfd); |
| diff -urN gdbm-1.15_orig/src/gdbmimp.c gdbm-1.15/src/gdbmimp.c |
| --- gdbm-1.15_orig/src/gdbmimp.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/gdbmimp.c 2018-06-17 20:55:43.834410500 +0300 |
| @@ -18,7 +18,11 @@ |
| along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| # include "autoconf.h" |
| +#ifdef _WIN32 |
| +# include <winsock2.h> |
| +#else |
| # include <arpa/inet.h> |
| +#endif |
| # include <limits.h> |
| |
| # include "gdbmdefs.h" |
| diff -urN gdbm-1.15_orig/src/gdbmload.c gdbm-1.15/src/gdbmload.c |
| --- gdbm-1.15_orig/src/gdbmload.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/gdbmload.c 2018-06-17 20:55:43.837410600 +0300 |
| @@ -18,8 +18,6 @@ |
| # include "gdbmdefs.h" |
| # include "gdbm.h" |
| # include <sys/types.h> |
| -# include <pwd.h> |
| -# include <grp.h> |
| |
| struct datbuf |
| { |
| @@ -289,13 +287,12 @@ |
| _set_gdbm_meta_info (GDBM_FILE dbf, char *param, int meta_mask) |
| { |
| unsigned long n; |
| - uid_t owner_uid; |
| - uid_t owner_gid; |
| mode_t mode; |
| int meta_flags = 0; |
| const char *p; |
| char *end; |
| |
| +#if 0 |
| if (!(meta_mask & GDBM_META_MASK_OWNER)) |
| { |
| p = getparm (param, "user"); |
| @@ -341,6 +338,7 @@ |
| } |
| } |
| } |
| +#endif |
| |
| if (!(meta_mask & GDBM_META_MASK_MODE)) |
| { |
| @@ -357,6 +355,7 @@ |
| } |
| } |
| |
| +#if 0 |
| if (meta_flags) |
| { |
| int fd = gdbm_fdesc (dbf); |
| @@ -387,6 +386,7 @@ |
| return 1; |
| } |
| } |
| +#endif |
| return 0; |
| } |
| |
| diff -urN gdbm-1.15_orig/src/gdbmopen.c gdbm-1.15/src/gdbmopen.c |
| --- gdbm-1.15_orig/src/gdbmopen.c 2018-05-30 16:55:36.000000000 +0300 |
| +++ gdbm-1.15/src/gdbmopen.c 2018-06-17 21:11:42.126221600 +0300 |
| @@ -33,7 +33,7 @@ |
| #endif |
| |
| static void |
| -compute_directory_size (blksize_t block_size, |
| +compute_directory_size (ssize_t block_size, |
| int *ret_dir_size, int *ret_dir_bits) |
| { |
| /* Create the initial hash table directory. */ |
| @@ -224,7 +224,7 @@ |
| return ftruncate (dbf->desc, 0); |
| #else |
| int fd; |
| - fd = open (dbf->name, O_RDWR|O_TRUNC, mode); |
| + fd = open (dbf->name, O_RDWR|O_TRUNC|O_BINARY, mode); |
| if (fd == -1) |
| return -1; |
| return close (fd); |
| @@ -355,8 +355,7 @@ |
| if (!(flags & GDBM_CLOERROR)) |
| dbf->desc = -1; |
| gdbm_close (dbf); |
| - GDBM_SET_ERRNO2 (NULL, GDBM_BLOCK_SIZE_ERROR, FALSE, |
| - GDBM_DEBUG_OPEN); |
| + GDBM_SET_ERRNO2 (NULL, GDBM_BLOCK_SIZE_ERROR, FALSE,GDBM_DEBUG_OPEN); |
| return NULL; |
| } |
| else |
| @@ -656,6 +657,8 @@ |
| } |
| if (flags & GDBM_CLOEXEC) |
| fbits |= O_CLOEXEC; |
| + |
| + fbits |= O_BINARY; |
| |
| fd = open (file, fbits, mode); |
| if (fd < 0) |
| @@ -689,7 +690,7 @@ |
| for (index = 0; index < size; index++) |
| { |
| (dbf->bucket_cache[index]).ca_bucket = |
| - malloc (dbf->header->bucket_size); |
| + calloc (1, dbf->header->bucket_size); |
| if ((dbf->bucket_cache[index]).ca_bucket == NULL) |
| { |
| GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE); |
| diff -urN gdbm-1.15_orig/src/gdbmtool.c gdbm-1.15/src/gdbmtool.c |
| --- gdbm-1.15_orig/src/gdbmtool.c 2018-06-14 14:53:35.000000000 +0300 |
| +++ gdbm-1.15/src/gdbmtool.c 2018-06-17 20:55:52.053880600 +0300 |
| @@ -22,9 +22,6 @@ |
| #include <errno.h> |
| #include <ctype.h> |
| #include <signal.h> |
| -#include <pwd.h> |
| -#include <sys/ioctl.h> |
| -#include <termios.h> |
| #include <stdarg.h> |
| #ifdef HAVE_LOCALE_H |
| # include <locale.h> |
| @@ -1993,6 +1995,7 @@ |
| { |
| istr = instream_file_create (GDBMTOOLRC); |
| } |
| +#if 0 |
| else |
| { |
| char *fname; |
| @@ -2023,6 +2024,7 @@ |
| exit (EXIT_FATAL); |
| yyparse (); |
| } |
| +#endif |
| } |
| |
| #if GDBM_DEBUG_ENABLE |
| @@ -2167,8 +2167,6 @@ |
| } |
| } |
| |
| - signal (SIGPIPE, SIG_IGN); |
| - |
| memset (¶m, 0, sizeof (param)); |
| argmax = 0; |
| |
| diff -urN gdbm-1.15_orig/src/lock.c gdbm-1.15/src/lock.c |
| --- gdbm-1.15_orig/src/lock.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/lock.c 2018-06-17 20:55:52.058880900 +0300 |
| @@ -24,7 +24,7 @@ |
| |
| #include <errno.h> |
| |
| -#if HAVE_FLOCK |
| +#if HAVE_FLOCK || defined(_WIN32) |
| # ifndef LOCK_SH |
| # define LOCK_SH 1 |
| # endif |
| @@ -42,6 +42,83 @@ |
| # endif |
| #endif |
| |
| +#ifdef _WIN32 |
| +#include <errno.h> |
| +#include <limits.h> |
| + |
| +/* |
| + * flock support code for windows |
| + * |
| + * This code is derived from ruby (http://www.ruby-lang.org/). |
| + * Original copyright notice is below. |
| + */ |
| +/* |
| + * Copyright (c) 1993, Intergraph Corporation |
| + * |
| + * You may distribute under the terms of either the GNU General Public |
| + * License or the Artistic License, as specified in the perl README file. |
| + * |
| + * Various Unix compatibility functions and NT specific functions. |
| + * |
| + * Some of this code was derived from the MSDOS port(s) and the OS/2 port. |
| + * |
| + */ |
| + |
| +#ifndef EWOULDBLOCK |
| +#define EWOULDBLOCK 10035 /* EBASEERR + 35 (winsock.h) */ |
| +#endif |
| + |
| +#define LK_ERR(f,i) ((f) ? (i = 0) : (errno = GetLastError() == ERROR_LOCK_VIOLATION ? EWOULDBLOCK : EACCES)) |
| +#define LK_LEN ULONG_MAX |
| + |
| +static int |
| +flock_winnt(HANDLE fh, int oper) |
| +{ |
| + OVERLAPPED o; |
| + int i = -1; |
| + |
| + memset(&o, 0, sizeof(o)); |
| + |
| + switch(oper) { |
| + case LOCK_SH: /* shared lock */ |
| + LK_ERR(LockFileEx(fh, 0, 0, LK_LEN, LK_LEN, &o), i); |
| + break; |
| + case LOCK_EX: /* exclusive lock */ |
| + LK_ERR(LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, LK_LEN, LK_LEN, &o), i); |
| + break; |
| + case LOCK_SH|LOCK_NB: /* non-blocking shared lock */ |
| + LK_ERR(LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY, 0, LK_LEN, LK_LEN, &o), i); |
| + break; |
| + case LOCK_EX|LOCK_NB: /* non-blocking exclusive lock */ |
| + LK_ERR(LockFileEx(fh, |
| + LOCKFILE_EXCLUSIVE_LOCK|LOCKFILE_FAIL_IMMEDIATELY, |
| + 0, LK_LEN, LK_LEN, &o), i); |
| + break; |
| + case LOCK_UN: /* unlock lock */ |
| + LK_ERR(UnlockFileEx(fh, 0, LK_LEN, LK_LEN, &o), i); |
| + break; |
| + default: /* unknown */ |
| + errno = EINVAL; |
| + break; |
| + } |
| + return i; |
| +} |
| + |
| +#undef LK_ERR |
| + |
| +int |
| +flock(int fd, int oper) |
| +{ |
| + static int (*locker)(HANDLE, int) = NULL; |
| + |
| + if (!locker) { |
| + locker = flock_winnt; |
| + } |
| + |
| + return locker((HANDLE)_get_osfhandle(fd), oper); |
| +} |
| +#endif /* _WIN32 */ |
| + |
| #if defined(F_SETLK) && defined(F_RDLCK) && defined(F_WRLCK) |
| # define HAVE_FCNTL_LOCK 1 |
| #else |
| @@ -66,7 +143,7 @@ |
| switch (dbf->lock_type) |
| { |
| case LOCKING_FLOCK: |
| -#if HAVE_FLOCK |
| +#if HAVE_FLOCK || defined(_WIN32) |
| flock (dbf->desc, LOCK_UN); |
| #endif |
| break; |
| @@ -102,7 +179,7 @@ |
| #endif |
| int lock_val = -1; |
| |
| -#if HAVE_FLOCK |
| +#if HAVE_FLOCK || defined(_WIN32) |
| if (dbf->read_write == GDBM_READER) |
| lock_val = flock (dbf->desc, LOCK_SH + LOCK_NB); |
| else |
| diff -urN gdbm-1.15_orig/src/Makefile.am gdbm-1.15/src/Makefile.am |
| --- gdbm-1.15_orig/src/Makefile.am 2018-06-15 23:11:53.000000000 +0300 |
| +++ gdbm-1.15/src/Makefile.am 2018-06-17 20:55:52.060881000 +0300 |
| @@ -74,7 +74,7 @@ |
| libgdbm_la_SOURCES += debug.c |
| endif |
| |
| -libgdbm_la_LDFLAGS = -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| +libgdbm_la_LDFLAGS = -no-undefined -lws2_32 -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| |
| noinst_LIBRARIES = libgdbmapp.a |
| |
| diff -urN gdbm-1.15_orig/src/Makefile.in gdbm-1.15/src/Makefile.in |
| --- gdbm-1.15_orig/src/Makefile.in 2018-06-15 23:14:27.000000000 +0300 |
| +++ gdbm-1.15/src/Makefile.in 2018-06-17 22:31:16.905323400 +0300 |
| @@ -474,7 +474,7 @@ |
| gdbmsetopt.c gdbmstore.c gdbmsync.c base64.c bucket.c falloc.c \ |
| findkey.c fullio.c hash.c lock.c mmap.c recover.c update.c \ |
| version.c $(am__append_1) |
| -libgdbm_la_LDFLAGS = -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| +libgdbm_la_LDFLAGS = -no-undefined -lws2_32 -version-info $(VI_CURRENT):$(VI_REVISION):$(VI_AGE) |
| noinst_LIBRARIES = libgdbmapp.a |
| libgdbmapp_a_SOURCES = \ |
| err.c\ |
| diff -urN gdbm-1.15_orig/src/mem.c gdbm-1.15/src/mem.c |
| --- gdbm-1.15_orig/src/mem.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/mem.c 2018-06-17 20:55:52.066881300 +0300 |
| @@ -14,7 +14,7 @@ |
| 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 "../autoconf.h" |
| # include "gdbm.h" |
| # include "gdbmapp.h" |
| # include "gdbmdefs.h" |
| diff -urN gdbm-1.15_orig/src/parseopt.c gdbm-1.15/src/parseopt.c |
| --- gdbm-1.15_orig/src/parseopt.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/parseopt.c 2018-06-17 20:55:52.069881500 +0300 |
| @@ -14,10 +14,11 @@ |
| 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 "../autoconf.h" |
| # include "gdbm.h" |
| # include "gdbmapp.h" |
| # include "gdbmdefs.h" |
| +#include "autoconf.h" |
| # include <stdio.h> |
| # include <stdarg.h> |
| # include <errno.h> |
| diff -urN gdbm-1.15_orig/src/progname.c gdbm-1.15/src/progname.c |
| --- gdbm-1.15_orig/src/progname.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/progname.c 2018-06-17 20:55:52.071881600 +0300 |
| @@ -14,7 +14,7 @@ |
| 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 "../autoconf.h" |
| # include "gdbm.h" |
| # include "gdbmapp.h" |
| # include <string.h> |
| diff -urN gdbm-1.15_orig/src/proto.h gdbm-1.15/src/proto.h |
| --- gdbm-1.15_orig/src/proto.h 2018-05-30 14:14:11.000000000 +0300 |
| +++ gdbm-1.15/src/proto.h 2018-06-17 22:10:50.270163800 +0300 |
| @@ -122,6 +122,8 @@ |
| GDBM_SET_ERRNO (dbf, GDBM_FILE_SYNC_ERROR, TRUE); |
| return 1; |
| } |
| +#elif _WIN32 |
| + FlushFileBuffers(dbf); |
| #else |
| sync (); |
| sync (); |
| diff -urN gdbm-1.15_orig/src/recover.c gdbm-1.15/src/recover.c |
| --- gdbm-1.15_orig/src/recover.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/recover.c 2018-06-17 20:55:52.074881800 +0300 |
| @@ -19,6 +19,20 @@ |
| |
| #define TMPSUF ".XXXXXX" |
| |
| +#if !HAVE_RENAME |
| +#if defined(_WIN32) |
| +static int |
| +_gdbm_rename (char *old_name, char *new_name) |
| +{ |
| + if (!MoveFileEx (old_name, new_name, MOVEFILE_REPLACE_EXISTING)) |
| + return -1; |
| + |
| + return 0; |
| +} |
| +#define rename _gdbm_rename |
| +#endif |
| +#endif |
| + |
| int |
| gdbm_copy_meta (GDBM_FILE dst, GDBM_FILE src) |
| { |
| @@ -29,16 +29,20 @@ |
| GDBM_SET_ERRNO (src, GDBM_FILE_STAT_ERROR, src->need_recovery); |
| return -1; |
| } |
| +#if HAVE_FCHOWN |
| if (fchown (dst->desc, st.st_uid, st.st_gid)) |
| { |
| GDBM_SET_ERRNO (dst, GDBM_ERR_FILE_OWNER, dst->need_recovery); |
| return -1; |
| } |
| +#endif |
| +#if HAVE_FCHMOD |
| if (fchmod (dst->desc, st.st_mode & 0777)) |
| { |
| GDBM_SET_ERRNO (dst, GDBM_ERR_FILE_MODE, dst->need_recovery); |
| return -1; |
| } |
| +#endif |
| return 0; |
| } |
| |
| @@ -130,18 +134,34 @@ |
| } |
| |
| /* Move the new file to old name. */ |
| +#ifdef _WIN32 |
| + close (new_dbf->desc); |
| |
| + if (dbf->file_locking) |
| + { |
| + _gdbm_unlock_file (dbf); |
| + } |
| + close (dbf->desc); |
| +#endif |
| if (rename (new_dbf->name, dbf->name) != 0) |
| { |
| GDBM_SET_ERRNO (NULL, GDBM_REORGANIZE_FAILED, FALSE); |
| +#ifdef _WIN32 |
| + dbf->desc = open (dbf->name, O_RDWR|O_BINARY, 0); |
| + new_dbf->desc = open (new_dbf->name, O_RDWR|O_BINARY, 0); |
| +#endif |
| gdbm_close (new_dbf); |
| return -1; |
| } |
| |
| /* Fix up DBF to have the correct information for the new file. */ |
| +#ifdef _WIN32 |
| + new_dbf->desc = open (dbf->name, O_RDWR|O_BINARY, 0); |
| +#else |
| if (dbf->file_locking) |
| _gdbm_unlock_file (dbf); |
| close (dbf->desc); |
| +#endif |
| free (dbf->header); |
| free (dbf->dir); |
| |
| diff -urN gdbm-1.15_orig/src/systems.h gdbm-1.15/src/systems.h |
| --- gdbm-1.15_orig/src/systems.h 2018-05-30 12:43:12.000000000 +0300 |
| +++ gdbm-1.15/src/systems.h 2018-06-17 21:16:30.716728100 +0300 |
| @@ -18,6 +18,11 @@ |
| along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| /* Include all system headers first. */ |
| +#ifdef _WIN32 |
| +# undef _WIN32_WINNT |
| +# define _WIN32_WINNT 0x0601 |
| +# include <windows.h> |
| +#endif |
| #include <sys/types.h> |
| #include <stdio.h> |
| #if HAVE_SYS_FILE_H |
| @@ -43,6 +48,10 @@ |
| # define O_CLOEXEC 0 |
| #endif |
| |
| +#ifndef O_BINARY |
| +# define O_BINARY 0 |
| +#endif |
| + |
| /* Default block size. Some systems do not have blocksize in their |
| stat record. This code uses the BSD blocksize from stat. */ |
| |
| @@ -62,4 +62,7 @@ |
| # define STDERR_FILENO 2 |
| #endif |
| |
| - |
| +/* Windows port of flock */ |
| +#ifdef _WIN32 |
| +extern int flock(int fd, int oper); |
| +#endif |
| diff -urN gdbm-1.15_orig/src/util.c gdbm-1.15/src/util.c |
| --- gdbm-1.15_orig/src/util.c 2018-05-30 12:39:15.000000000 +0300 |
| +++ gdbm-1.15/src/util.c 2018-06-17 20:55:52.082882300 +0300 |
| @@ -16,7 +16,6 @@ |
| along with GDBM. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| #include "gdbmtool.h" |
| -#include <pwd.h> |
| |
| char * |
| mkfilename (const char *dir, const char *file, const char *suf) |
| @@ -45,6 +44,7 @@ |
| char * |
| tildexpand (char *s) |
| { |
| +#if 0 |
| if (s[0] == '~') |
| { |
| char *p = s + 1; |
| @@ -65,6 +65,7 @@ |
| if (pw) |
| return mkfilename (pw->pw_dir, p + len + 1, NULL); |
| } |
| +#endif |
| return estrdup (s); |
| } |
| |
| diff -urN gdbm-1.15_orig/tests/blocksize02.at gdbm-1.15/tests/blocksize02.at |
| --- gdbm-1.15_orig/tests/blocksize02.at 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/blocksize02.at 2018-06-18 10:58:25.793417500 +0300 |
| @@ -22,7 +22,6 @@ |
| ], |
| [1], |
| [], |
| -[gdbm_open failed: Block size error |
| -]) |
| +[gdbm_open failed: Block size error]) |
| |
| AT_CLEANUP |
| diff -urN gdbm-1.15_orig/tests/dbmdel01.at gdbm-1.15/tests/dbmdel01.at |
| --- gdbm-1.15_orig/tests/dbmdel01.at 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/dbmdel01.at 2018-06-17 20:55:52.085882400 +0300 |
| @@ -25,7 +25,7 @@ |
| ], |
| [2], |
| [], |
| -[dtdel: cannot delete 11: Item not found |
| +[dtdel.exe: cannot delete 11: Item not found |
| ]) |
| |
| AT_CLEANUP |
| diff -urN gdbm-1.15_orig/tests/dbmfetch01.at gdbm-1.15/tests/dbmfetch01.at |
| --- gdbm-1.15_orig/tests/dbmfetch01.at 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/dbmfetch01.at 2018-06-17 20:55:52.086882500 +0300 |
| @@ -24,7 +24,7 @@ |
| ], |
| [2], |
| [], |
| -[dtfetch: 0: not found |
| +[dtfetch.exe: 0: not found |
| ]) |
| |
| AT_CLEANUP |
| diff -urN gdbm-1.15_orig/tests/delete01.at gdbm-1.15/tests/delete01.at |
| --- gdbm-1.15_orig/tests/delete01.at 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/delete01.at 2018-06-17 20:55:52.088882600 +0300 |
| @@ -24,7 +24,7 @@ |
| ], |
| [2], |
| [], |
| -[gtdel: cannot delete 11: Item not found |
| +[gtdel.exe: cannot delete 11: Item not found |
| ]) |
| |
| AT_CLEANUP |
| diff -urN gdbm-1.15_orig/tests/dtdel.c gdbm-1.15/tests/dtdel.c |
| --- gdbm-1.15_orig/tests/dtdel.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/dtdel.c 2018-06-17 20:55:52.089882700 +0300 |
| @@ -16,6 +16,7 @@ |
| */ |
| #include "autoconf.h" |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include "dbm.h" |
| @@ -30,7 +31,12 @@ |
| int flags = 0; |
| int data_z = 0; |
| int rc = 0; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| + _setmode(_fileno(stderr), O_BINARY); |
| +#endif |
| + |
| while (--argc) |
| { |
| char *arg = *++argv; |
| diff -urN gdbm-1.15_orig/tests/dtdump.c gdbm-1.15/tests/dtdump.c |
| --- gdbm-1.15_orig/tests/dtdump.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/dtdump.c 2018-06-17 20:55:52.091882800 +0300 |
| @@ -16,10 +16,13 @@ |
| */ |
| #include "autoconf.h" |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include "dbm.h" |
| #include "progname.h" |
| +#include "../src/gdbm.h" |
| +#include "../compat/dbm.h" |
| |
| int |
| main (int argc, char **argv) |
| @@ -29,7 +32,12 @@ |
| datum key; |
| datum data; |
| int delim = '\t'; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| + _setmode(_fileno(stderr), O_BINARY); |
| +#endif |
| + |
| while (--argc) |
| { |
| char *arg = *++argv; |
| diff -urN gdbm-1.15_orig/tests/dtfetch.c gdbm-1.15/tests/dtfetch.c |
| --- gdbm-1.15_orig/tests/dtfetch.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/dtfetch.c 2018-06-17 20:55:52.092882800 +0300 |
| @@ -16,6 +16,7 @@ |
| */ |
| #include "autoconf.h" |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include "dbm.h" |
| @@ -44,7 +45,12 @@ |
| int data_z = 0; |
| int delim = 0; |
| int rc = 0; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| + _setmode(_fileno(stderr), O_BINARY); |
| +#endif |
| + |
| while (--argc) |
| { |
| char *arg = *++argv; |
| diff -urN gdbm-1.15_orig/tests/dtload.c gdbm-1.15/tests/dtload.c |
| --- gdbm-1.15_orig/tests/dtload.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/dtload.c 2018-06-17 20:55:52.094882900 +0300 |
| @@ -16,6 +16,7 @@ |
| */ |
| #include "autoconf.h" |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <unistd.h> |
| @@ -39,7 +40,13 @@ |
| datum data; |
| int delim = '\t'; |
| int data_z = 0; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdin), O_BINARY); |
| + _setmode(_fileno(stdout), O_BINARY); |
| + _setmode(_fileno(stderr), O_BINARY); |
| +#endif |
| + |
| while (--argc) |
| { |
| char *arg = *++argv; |
| diff -urN gdbm-1.15_orig/tests/fetch01.at gdbm-1.15/tests/fetch01.at |
| --- gdbm-1.15_orig/tests/fetch01.at 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/fetch01.at 2018-06-17 20:55:52.095883000 +0300 |
| @@ -23,7 +23,7 @@ |
| ], |
| [2], |
| [], |
| -[gtfetch: 0: not found |
| +[gtfetch.exe: 0: not found |
| ]) |
| |
| AT_CLEANUP |
| diff -urN gdbm-1.15_orig/tests/gdbmtool03.at gdbm-1.15/tests/gdbmtool03.at |
| --- gdbm-1.15_orig/tests/gdbmtool03.at 2018-05-24 07:15:19.000000000 +0300 |
| +++ gdbm-1.15/tests/gdbmtool03.at 2018-06-18 10:57:39.968796500 +0300 |
| @@ -17,12 +17,13 @@ |
| AT_SETUP([Initialization file]) |
| AT_KEYWORDS([gdbmtool]) |
| AT_CHECK([ |
| -AT_DATA([.gdbmtoolrc], |
| -[open t.db |
| -]) |
| -gdbmtool <<EOT |
| +AT_DATA([.gdbmtoolrc],[ |
| +open t.db |
| status |
| +quit |
| EOT |
| +]) |
| +gdbmtool < .gdbmtoolrc |
| ], |
| [0], |
| [Database file: t.db |
| diff -urN gdbm-1.15_orig/tests/gtdel.c gdbm-1.15/tests/gtdel.c |
| --- gdbm-1.15_orig/tests/gtdel.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/gtdel.c 2018-06-17 20:55:52.097883100 +0300 |
| @@ -16,6 +16,7 @@ |
| */ |
| #include "autoconf.h" |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include "gdbm.h" |
| @@ -31,7 +32,12 @@ |
| GDBM_FILE dbf; |
| int data_z = 0; |
| int rc = 0; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| + _setmode(_fileno(stderr), O_BINARY); |
| +#endif |
| + |
| while (--argc) |
| { |
| char *arg = *++argv; |
| diff -urN gdbm-1.15_orig/tests/gtdump.c gdbm-1.15/tests/gtdump.c |
| --- gdbm-1.15_orig/tests/gtdump.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/gtdump.c 2018-06-17 20:55:52.098883200 +0300 |
| @@ -17,6 +17,7 @@ |
| #include "autoconf.h" |
| #include <stdio.h> |
| #include <stdlib.h> |
| +#include <fcntl.h> |
| #include <string.h> |
| #include "gdbm.h" |
| #include "progname.h" |
| @@ -31,7 +32,12 @@ |
| int flags = 0; |
| GDBM_FILE dbf; |
| int delim = '\t'; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdin), O_BINARY); |
| + _setmode(_fileno(stdout), O_BINARY); |
| +#endif |
| + |
| while (--argc) |
| { |
| char *arg = *++argv; |
| diff -urN gdbm-1.15_orig/tests/gtfetch.c gdbm-1.15/tests/gtfetch.c |
| --- gdbm-1.15_orig/tests/gtfetch.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/gtfetch.c 2018-06-17 20:55:52.100883300 +0300 |
| @@ -16,6 +16,7 @@ |
| */ |
| #include "autoconf.h" |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include "gdbm.h" |
| @@ -46,7 +47,12 @@ |
| int data_z = 0; |
| int delim = 0; |
| int rc = 0; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| + _setmode(_fileno(stderr), O_BINARY); |
| +#endif |
| + |
| while (--argc) |
| { |
| char *arg = *++argv; |
| diff -urN gdbm-1.15_orig/tests/gtload.c gdbm-1.15/tests/gtload.c |
| --- gdbm-1.15_orig/tests/gtload.c 2018-05-30 12:16:40.000000000 +0300 |
| +++ gdbm-1.15/tests/gtload.c 2018-06-17 20:55:52.101883300 +0300 |
| @@ -16,6 +16,7 @@ |
| */ |
| #include "autoconf.h" |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <stdlib.h> |
| #include <stdarg.h> |
| #include <string.h> |
| @@ -102,6 +103,11 @@ |
| #ifdef GDBM_DEBUG_ENABLE |
| gdbm_debug_printer = debug_printer; |
| #endif |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdin), O_BINARY); |
| + _setmode(_fileno(stdout), O_BINARY); |
| +#endif |
| |
| while (--argc) |
| { |
| @@ -199,7 +205,7 @@ |
| dbf = gdbm_open (dbname, block_size, mode|flags, 00664, NULL); |
| if (!dbf) |
| { |
| - fprintf (stderr, "gdbm_open failed: %s\n", gdbm_strerror (gdbm_errno)); |
| + fprintf (stderr, "gdbm_open failed: %s", gdbm_strerror (gdbm_errno)); |
| exit (1); |
| } |
| |
| diff -urN gdbm-1.15_orig/tests/gtopt.c gdbm-1.15/tests/gtopt.c |
| --- gdbm-1.15_orig/tests/gtopt.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/gtopt.c 2018-06-17 20:55:52.104883500 +0300 |
| @@ -178,7 +178,11 @@ |
| int |
| test_maxmapsize (void *valptr) |
| { |
| +#ifdef _SC_PAGESIZE |
| size_t page_size = sysconf (_SC_PAGESIZE); |
| +#else |
| + size_t page_size = 4096; |
| +#endif |
| size_t expected_size = ((mapped_size_max + page_size - 1) / page_size) * |
| page_size; |
| return (*(size_t*) valptr == expected_size) ? RES_PASS : RES_FAIL; |
| @@ -308,7 +312,11 @@ |
| { |
| GDBM_FILE dbf; |
| struct optest *op; |
| - |
| + |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| +#endif |
| + |
| progname = canonical_progname (argv[0]); |
| while (--argc) |
| { |
| diff -urN gdbm-1.15_orig/tests/gtver.c gdbm-1.15/tests/gtver.c |
| --- gdbm-1.15_orig/tests/gtver.c 2018-02-10 08:05:11.000000000 +0200 |
| +++ gdbm-1.15/tests/gtver.c 2018-06-17 20:55:52.105883600 +0300 |
| @@ -17,6 +17,7 @@ |
| #include "autoconf.h" |
| #include <stdlib.h> |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <string.h> |
| #include "gdbm.h" |
| #include "progname.h" |
| @@ -31,6 +32,10 @@ |
| const char *progname = canonical_progname (argv[0]); |
| int library = 0; |
| |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| +#endif |
| + |
| if (argc == 1) |
| { |
| printf ("%s\n", gdbm_version); |
| diff -urN gdbm-1.15_orig/tests/num2word.c gdbm-1.15/tests/num2word.c |
| --- gdbm-1.15_orig/tests/num2word.c 2018-05-29 10:11:50.000000000 +0300 |
| +++ gdbm-1.15/tests/num2word.c 2018-06-17 22:06:14.980418200 +0300 |
| @@ -17,6 +17,7 @@ |
| #include "autoconf.h" |
| #include <stdlib.h> |
| #include <stdio.h> |
| +#include <fcntl.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include <errno.h> |
| @@ -328,6 +329,10 @@ |
| int |
| main (int argc, char **argv) |
| { |
| +#ifdef _WIN32 |
| + _setmode(_fileno(stdout), O_BINARY); |
| +#endif |
| + |
| progname = *argv++; |
| --argc; |
| |
| @@ -403,10 +408,10 @@ |
| |
| if (random_option) |
| { |
| - srandom (time (NULL)); |
| + srand (time (NULL)); |
| while (range_total) |
| { |
| - numeral_t n = range_get (random () % range_total); |
| + numeral_t n = range_get (rand () % range_total); |
| print_number (n); |
| } |
| } |
| diff -urN gdbm-1.15_orig/tests/testsuite gdbm-1.15/tests/testsuite |
| --- gdbm-1.15_orig/tests/testsuite 2018-06-15 23:14:42.000000000 +0300 |
| +++ gdbm-1.15/tests/testsuite 2018-06-17 22:36:55.525691300 +0300 |
| @@ -2166,7 +2166,7 @@ |
| ) >>"$at_stdout" 2>>"$at_stderr" 5>&- |
| at_status=$? at_failed=false |
| $at_check_filter |
| -echo >>"$at_stderr"; $as_echo "gtfetch: 0: not found |
| +echo >>"$at_stderr"; $as_echo "gtfetch.exe: 0: not found |
| " | \ |
| $at_diff - "$at_stderr" || at_failed=: |
| at_fn_diff_devnull "$at_stdout" || at_failed=: |
| @@ -2262,7 +2262,7 @@ |
| ) >>"$at_stdout" 2>>"$at_stderr" 5>&- |
| at_status=$? at_failed=false |
| $at_check_filter |
| -echo >>"$at_stderr"; $as_echo "gtdel: cannot delete 11: Item not found |
| +echo >>"$at_stderr"; $as_echo "gtdel.exe: cannot delete 11: Item not found |
| " | \ |
| $at_diff - "$at_stderr" || at_failed=: |
| at_fn_diff_devnull "$at_stdout" || at_failed=: |
| @@ -2627,7 +2627,7 @@ |
| ) >>"$at_stdout" 2>>"$at_stderr" 5>&- |
| at_status=$? at_failed=false |
| $at_check_filter |
| -echo >>"$at_stderr"; $as_echo "dtfetch: 0: not found |
| +echo >>"$at_stderr"; $as_echo "dtfetch.exe: 0: not found |
| " | \ |
| $at_diff - "$at_stderr" || at_failed=: |
| at_fn_diff_devnull "$at_stdout" || at_failed=: |
| @@ -2835,7 +2835,7 @@ |
| ) >>"$at_stdout" 2>>"$at_stderr" 5>&- |
| at_status=$? at_failed=false |
| $at_check_filter |
| -echo >>"$at_stderr"; $as_echo "dtdel: cannot delete 11: Item not found |
| +echo >>"$at_stderr"; $as_echo "dtdel.exe: cannot delete 11: Item not found |
| " | \ |
| $at_diff - "$at_stderr" || at_failed=: |
| at_fn_diff_devnull "$at_stdout" || at_failed=: |