diff --git a/linux/linux.c b/linux/linux.c index 9d622a800c0..78b1e678bac 100644 --- a/linux/linux.c +++ b/linux/linux.c @@ -282,6 +282,13 @@ toku_os_get_processor_frequency(uint64_t *hzret) { return r; } +int +toku_dup2(int fd, int fd2) { + int r; + r = dup2(fd, fd2); + return r; +} + #if __GNUC__ && __i386__ // workaround for a gcc 4.1.2 bug on 32 bit platforms. diff --git a/newbrt/brt-serialize.c b/newbrt/brt-serialize.c index 8c19fc336e1..2e2ff421cb0 100644 --- a/newbrt/brt-serialize.c +++ b/newbrt/brt-serialize.c @@ -991,7 +991,7 @@ toku_deserialize_brtnode_from (int fd, BLOCKNUM blocknum, u_int32_t fullhash, BR #if DO_TOKU_TRACE if (toku_trace_fd == -1) - toku_trace_fd = open("/dev/null", O_WRONLY); + toku_trace_fd = open(DEV_NULL_FILE, O_WRONLY); toku_trace("deserial start"); #endif diff --git a/newbrt/tests/recovery-cbegin-cend-hello.c b/newbrt/tests/recovery-cbegin-cend-hello.c index 1eea963c951..66446e758d8 100644 --- a/newbrt/tests/recovery-cbegin-cend-hello.c +++ b/newbrt/tests/recovery-cbegin-cend-hello.c @@ -34,9 +34,9 @@ run_test(void) { } // redirect stderr - int devnul = open("/dev/null", O_WRONLY); + int devnul = open(DEV_NULL_FILE, O_WRONLY); assert(devnul>=0); - r = dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); + r = toku_dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); r = close(devnul); assert(r==0); // run recovery diff --git a/newbrt/tests/recovery-cbegin.c b/newbrt/tests/recovery-cbegin.c index 41d44b5b5c0..6fde03d5a9f 100644 --- a/newbrt/tests/recovery-cbegin.c +++ b/newbrt/tests/recovery-cbegin.c @@ -22,10 +22,12 @@ run_test(void) { r = toku_logger_close(&logger); assert(r == 0); // run recovery - int devnul = open("/dev/null", O_WRONLY); + int devnul = open(DEV_NULL_FILE, O_WRONLY); assert(devnul>=0); - r = dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); - r = close(devnul); assert(r==0); + r = toku_dup2(devnul, fileno(stderr)); + assert(r==fileno(stderr)); + r = close(devnul); + assert(r==0); r = tokudb_recover(TESTDIR, TESTDIR, 0, 0, NULL, NULL, NULL, NULL, 0); assert(r == 0); diff --git a/newbrt/tests/recovery-fopen-missing-file.c b/newbrt/tests/recovery-fopen-missing-file.c index 48035939c01..cf1af0829c4 100644 --- a/newbrt/tests/recovery-fopen-missing-file.c +++ b/newbrt/tests/recovery-fopen-missing-file.c @@ -28,9 +28,9 @@ run_test(void) { r = toku_logger_close(&logger); assert(r == 0); // redirect stderr - int devnul = open("/dev/null", O_WRONLY); + int devnul = open(DEV_NULL_FILE, O_WRONLY); assert(devnul>=0); - r = dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); + r = toku_dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); r = close(devnul); assert(r==0); // run recovery diff --git a/newbrt/tests/recovery-hello.c b/newbrt/tests/recovery-hello.c index cd1741c0025..d94d905f15e 100644 --- a/newbrt/tests/recovery-hello.c +++ b/newbrt/tests/recovery-hello.c @@ -28,9 +28,9 @@ run_test(void) { r = toku_logger_close(&logger); assert(r == 0); // redirect stderr - int devnul = open("/dev/null", O_WRONLY); + int devnul = open(DEV_NULL_FILE, O_WRONLY); assert(devnul>=0); - r = dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); + r = toku_dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); r = close(devnul); assert(r==0); // run recovery diff --git a/newbrt/tests/recovery-no-datadir.c b/newbrt/tests/recovery-no-datadir.c index 5b829d86efe..45f9a439ce4 100644 --- a/newbrt/tests/recovery-no-datadir.c +++ b/newbrt/tests/recovery-no-datadir.c @@ -22,9 +22,9 @@ run_test(void) { r = toku_logger_close(&logger); assert(r == 0); // redirect stderr - int devnul = open("/dev/null", O_WRONLY); + int devnul = open(DEV_NULL_FILE, O_WRONLY); assert(devnul>=0); - r = dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); + r = toku_dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); r = close(devnul); assert(r==0); // run recovery diff --git a/newbrt/tests/recovery-no-log.c b/newbrt/tests/recovery-no-log.c index a756e035a4c..a23f98de3ee 100644 --- a/newbrt/tests/recovery-no-log.c +++ b/newbrt/tests/recovery-no-log.c @@ -14,9 +14,9 @@ run_test(void) { r = toku_os_mkdir(TESTDIR, S_IRWXU); assert(r == 0); // redirect stderr - int devnul = open("/dev/null", O_WRONLY); + int devnul = open(DEV_NULL_FILE, O_WRONLY); assert(devnul>=0); - r = dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); + r = toku_dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); r = close(devnul); assert(r==0); // run recovery diff --git a/release/examples/db-scan.c b/release/examples/db-scan.c index 2ef5e81a800..e82d0218fd9 100644 --- a/release/examples/db-scan.c +++ b/release/examples/db-scan.c @@ -222,7 +222,7 @@ static void scanscan_lwc (void) { #endif static void scanscan_range (void) { - int fnull = open("/dev/null", O_WRONLY); assert(fnull >= 0); // use with strace + int fnull = open(DEV_NULL_FILE, O_WRONLY); assert(fnull >= 0); // use with strace int r; double tstart = gettime(); DBC *dbc; diff --git a/src/tests/diskfull.c b/src/tests/diskfull.c index e895c500a47..e48cfec05e3 100644 --- a/src/tests/diskfull.c +++ b/src/tests/diskfull.c @@ -178,9 +178,9 @@ do_writes_that_fail (void) { write_count=0; pid_t child; if ((child=fork())==0) { - int devnul = open("/dev/null", O_WRONLY); + int devnul = open(DEV_NULL_FILE, O_WRONLY); assert(devnul>=0); - { int r = dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); } + { int r = toku_dup2(devnul, fileno(stderr)); assert(r==fileno(stderr)); } { int r = close(devnul); assert(r==0); } do_db_work(); exit(1); diff --git a/src/tests/test_abort_delete_first.c b/src/tests/test_abort_delete_first.c index db86373abb7..793751af952 100644 --- a/src/tests/test_abort_delete_first.c +++ b/src/tests/test_abort_delete_first.c @@ -119,7 +119,7 @@ do_abort_delete_first_or_last(int N, r=db->close(db, 0); CKERR(r); r=env->close(env, 0); CKERR(r); #if defined(TOKUDB) && defined(__unix__) - r=system("../../utils/tokudb_dump_static -h " ENVDIR " foo.db > /dev/null"); + r=system("../../utils/tokudb_dump_static -h " ENVDIR " foo.db > " DEV_NULL_FILE); CKERR(r); #endif } diff --git a/toku_include/toku_os.h b/toku_include/toku_os.h index b54c128aaa4..a6e70d45314 100644 --- a/toku_include/toku_os.h +++ b/toku_include/toku_os.h @@ -79,6 +79,9 @@ int toku_stat(const char *name, toku_struct_stat *statbuf) __attribute__((__visi // Portable linux 'fstat' int toku_fstat(int fd, toku_struct_stat *statbuf) __attribute__((__visibility__("default"))); +// Portable linux 'dup2' +int toku_dup2(int fd, int fd2) __attribute__((__visibility__("default"))); + #if defined __cplusplus }; #endif diff --git a/toku_include/toku_portability.h b/toku_include/toku_portability.h index d1aa3384c0a..69ae88d6d74 100644 --- a/toku_include/toku_portability.h +++ b/toku_include/toku_portability.h @@ -94,6 +94,10 @@ typedef int64_t toku_off_t; # ifndef DONT_DEPRECATE_MALLOC # pragma deprecated (malloc, free, realloc) # endif +# ifndef TOKU_WINDOWS_ALLOW_DEPRECATED +# pragma poison dup2 +# pragma poison _dup2 +# endif # else int creat(const char *pathname, mode_t mode) __attribute__((__deprecated__)); int fstat(int fd, struct stat *buf) __attribute__((__deprecated__)); @@ -103,6 +107,8 @@ long int syscall(long int __sysno, ...) __attribute__((__deprecated_ // Sadly, dlmalloc needs sysconf, and on linux this causes trouble with -combine. So let the warnings show up under windows only. // long int sysconf(int) __attribute__((__deprecated__)); int mkdir(const char *pathname, mode_t mode) __attribute__((__deprecated__)); +int dup2(int fd, int fd2) __attribute__((__deprecated__)); +int _dup2(int fd, int fd2) __attribute__((__deprecated__)); // strdup is a macro in some libraries. #undef strdup char* strdup(const char *) __attribute__((__deprecated__)); diff --git a/windows/Makefile b/windows/Makefile index 64966e4b0b9..c4f99f55576 100644 --- a/windows/Makefile +++ b/windows/Makefile @@ -26,6 +26,8 @@ $(TARGET): $(OBJS) check: $(TARGET) cd tests && $(MAKE) check +$(OBJS): CFLAGS += -DTOKU_WINDOWS_ALLOW_DEPRECATED + clean: rm -rf $(TARGET) $(LIBPORTABILITY) $(PTHREAD_LIB) cd tests && $(MAKE) clean diff --git a/windows/windows.c b/windows/windows.c index 63b029f1e9b..31cef7d4aea 100644 --- a/windows/windows.c +++ b/windows/windows.c @@ -315,3 +315,13 @@ toku_os_get_processor_frequency(uint64_t *hzret) { return 0; } +int +toku_dup2(int fd, int fd2) { + int r; + r = _dup2(fd, fd2); + if (r==0) //success + r = fd2; + return r; + +} +