null+****@clear*****
null+****@clear*****
2012年 2月 28日 (火) 13:30:33 JST
Susumu Yata 2012-02-28 13:30:33 +0900 (Tue, 28 Feb 2012)
New Revision: a46240d9cb657ce161247e436a3e432cd9405a13
Log:
add new macros GRN_OPEN, GRN_CLOSE, GRN_READ and GRN_WRITE.
Modified files:
configure.ac
lib/com.c
lib/dat.cpp
lib/dat/file-impl.hpp
lib/groonga_in.h
lib/ii.c
lib/io.c
lib/proc.c
src/groonga.c
Modified: configure.ac (+1 -0)
===================================================================
--- configure.ac 2012-02-28 13:10:38 +0900 (d08ea8d)
+++ configure.ac 2012-02-28 13:30:33 +0900 (70352e9)
@@ -310,6 +310,7 @@ AC_CHECK_HEADERS(sys/mman.h sys/time.h sys/timeb.h sys/param.h sys/types.h sys/r
AC_CHECK_HEADERS(netdb.h sys/wait.h sys/socket.h netinet/in.h netinet/tcp.h)
AC_CHECK_HEADERS(ucontext.h signal.h errno.h execinfo.h sys/sysctl.h)
AC_CHECK_HEADERS(time.h)
+AC_CHECK_FUNCS(open close read write)
AC_CHECK_FUNCS(localtime_r gmtime_r mkostemp)
BACKTRACE_LIBS=
AC_CHECK_FUNCS(backtrace,
Modified: lib/com.c (+2 -2)
===================================================================
--- lib/com.c 2012-02-28 13:10:38 +0900 (da028ec)
+++ lib/com.c 2012-02-28 13:30:33 +0900 (f8449e5)
@@ -328,10 +328,10 @@ grn_com_event_fin(grn_ctx *ctx, grn_com_event *ev)
#ifndef USE_SELECT
if (ev->events) { GRN_FREE(ev->events); }
#ifdef USE_EPOLL
- close(ev->epfd);
+ GRN_CLOSE(ev->epfd);
#endif /* USE_EPOLL */
#ifdef USE_KQUEUE
- close(ev->kqfd);
+ GRN_CLOSE(ev->kqfd);
#endif /* USE_KQUEUE*/
#endif /* USE_SELECT */
return GRN_SUCCESS;
Modified: lib/dat.cpp (+1 -11)
===================================================================
--- lib/dat.cpp 2012-02-28 13:10:38 +0900 (04b56d8)
+++ lib/dat.cpp 2012-02-28 13:30:33 +0900 (2422577)
@@ -1,5 +1,5 @@
/* -*- c-basic-offset: 2 -*- */
-/* Copyright(C) 2011 Brazil
+/* Copyright(C) 2011-2012 Brazil
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -24,16 +24,6 @@
#include "dat.h"
#include "util.h"
-/*
- When this code is compiled with MinGW, a macro "open" is defined to replace
- "open()" by "_open()". This causes a critical problem because grn::dat::Trie
- and grn::dat::CursorFactory have member functions named "open()". So, the
- macro must be undefined before the following #includes.
- */
-#ifdef open
-# undef open
-#endif
-
#include "dat/trie.hpp"
#include "dat/cursor-factory.hpp"
Modified: lib/dat/file-impl.hpp (+1 -4)
===================================================================
--- lib/dat/file-impl.hpp 2012-02-28 13:10:38 +0900 (7d4da15)
+++ lib/dat/file-impl.hpp 2012-02-28 13:30:33 +0900 (f44f424)
@@ -1,5 +1,5 @@
/* -*- c-basic-offset: 2 -*- */
-/* Copyright(C) 2011 Brazil
+/* Copyright(C) 2011-2012 Brazil
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -20,9 +20,6 @@
#ifdef WIN32
#include <windows.h>
-# ifdef open
-# undef open
-# endif // open
#endif // WIN32
#include "dat.hpp"
Modified: lib/groonga_in.h (+28 -9)
===================================================================
--- lib/groonga_in.h 2012-02-28 13:10:38 +0900 (0bf117a)
+++ lib/groonga_in.h 2012-02-28 13:30:33 +0900 (67a136e)
@@ -1,5 +1,5 @@
/* -*- c-basic-offset: 2 -*- */
-/* Copyright(C) 2009-2011 Brazil
+/* Copyright(C) 2009-2012 Brazil
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -70,6 +70,30 @@
# define GRN_VAR extern
#endif
+#ifdef HAVE_OPEN
+# define GRN_OPEN(pathname, ...) open(pathname, __VA_ARGS__)
+#else
+# define GRN_OPEN(pathname, ...) _open(pathname, __VA_ARGS__)
+#endif /* HAVE_OPEN */
+
+#ifdef HAVE_CLOSE
+# define GRN_CLOSE(fd) close(fd)
+#else
+# define GRN_CLOSE(fd) _close(fd)
+#endif /* HAVE_CLOSE */
+
+#ifdef HAVE_READ
+# define GRN_READ(fd, buf, count) read(fd, buf, count)
+#else
+# define GRN_READ(fd, buf, count) _read(fd, buf, count)
+#endif /* HAVE_READ */
+
+#ifdef HAVE_WRITE
+# define GRN_WRITE(fd, buf, count) write(fd, buf, count)
+#else
+# define GRN_WRITE(fd, buf, count) _write(fd, buf, count)
+#endif /* HAVE_WRITE */
+
#ifdef WIN32
#if defined(__GNUC__) && !defined(WINVER)
@@ -98,22 +122,17 @@
#define vsnprintf _vsnprintf
#endif /* _MSC_VER < 1500 */
#define unlink _unlink
-#define open _open
#define lseek _lseek
-#define read _read
#define getpid _getpid
#if !defined(__GNUC__) && _MSC_VER < 1400
# define fstat _fstat
#endif /* !defined(__GNUC__) && _MSC_VER < 1400 */
-#define write _write
-#define close _close
#define usleep(x) Sleep((x) / 1000)
#define sleep(x) Sleep((x) * 1000)
#if !defined(strcasecmp)
# define strcasecmp stricmp
#endif /* !defined(strcasecmp) */
-
#ifdef __GNUC__
#include <stdint.h>
#else
@@ -417,7 +436,7 @@ typedef int grn_cond;
# define GRN_MKOSTEMP mkostemp
# else /* HAVE_MKOSTEMP */
# define GRN_MKOSTEMP(template,flags) \
- (mktemp(template), open((template),flags))
+ (mktemp(template), GRN_OPEN((template),flags))
# endif /* HAVE_MKOSTEMP */
#elif (defined(WIN32) || defined (_WIN64)) /* __GNUC__ */
@@ -451,7 +470,7 @@ typedef int grn_cond;
# define GRN_BIT_SCAN_REV0 GRN_BIT_SCAN_REV
# define GRN_MKOSTEMP(template,flags) \
- (mktemp(template), open((template),((flags)|O_BINARY)))
+ (mktemp(template), GRN_OPEN((template),((flags)|O_BINARY)))
#else /* __GNUC__ */
@@ -472,7 +491,7 @@ typedef int grn_cond;
# define GRN_BIT_SCAN_REV0 GRN_BIT_SCAN_REV
# define GRN_MKOSTEMP(template,flags) \
- (mktemp(template), open((template),flags))
+ (mktemp(template), GRN_OPEN((template),flags))
#endif /* __GNUC__ */
Modified: lib/ii.c (+6 -6)
===================================================================
--- lib/ii.c 2012-02-28 13:10:38 +0900 (e41bc97)
+++ lib/ii.c 2012-02-28 13:30:33 +0900 (f2770b5)
@@ -6627,7 +6627,7 @@ grn_ii_buffer_flush(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
encode_postings(ctx, ii_buffer, outbuf);
encode_last_tf(ctx, ii_buffer, outbuf);
{
- ssize_t r = write(ii_buffer->tmpfd, outbuf, encsize);
+ ssize_t r = GRN_WRITE(ii_buffer->tmpfd, outbuf, encsize);
if (r != encsize) {
ERR(GRN_INPUT_OUTPUT_ERROR, "write returned %d != %d", r, encsize);
return;
@@ -7137,7 +7137,7 @@ grn_ii_buffer_commit(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
grn_ii_buffer_flush(ctx, ii_buffer);
}
if (ii_buffer->tmpfd != -1) {
- close(ii_buffer->tmpfd);
+ GRN_CLOSE(ii_buffer->tmpfd);
}
if (ii_buffer->block_buf) {
GRN_FREE(ii_buffer->block_buf);
@@ -7164,9 +7164,9 @@ grn_ii_buffer_commit(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
datavec_init(ctx, ii_buffer->data_vectors, ii_buffer->ii->n_elements, 0, 0);
#ifdef WIN32
- ii_buffer->tmpfd = open(ii_buffer->tmpfpath, O_RDONLY|O_BINARY);
+ ii_buffer->tmpfd = GRN_OPEN(ii_buffer->tmpfpath, O_RDONLY|O_BINARY);
#else /* WIN32 */
- ii_buffer->tmpfd = open(ii_buffer->tmpfpath, O_RDONLY);
+ ii_buffer->tmpfd = GRN_OPEN(ii_buffer->tmpfpath, O_RDONLY);
#endif /* WIN32 */
if (ii_buffer->tmpfd == -1) {
SERR("oepn");
@@ -7208,7 +7208,7 @@ grn_ii_buffer_commit(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
datavec_fin(ctx, ii_buffer->data_vectors);
GRN_LOG(ctx, GRN_LOG_NOTICE, "tmpfile_size:%jd > total_chunk_size:%zu",
ii_buffer->filepos, ii_buffer->total_chunk_size);
- close(ii_buffer->tmpfd);
+ GRN_CLOSE(ii_buffer->tmpfd);
unlink(ii_buffer->tmpfpath);
ii_buffer->tmpfd = -1;
return ctx->rc;
@@ -7227,7 +7227,7 @@ grn_ii_buffer_close(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
grn_obj_close(ctx, ii_buffer->tmp_lexicon);
}
if (ii_buffer->tmpfd != -1) {
- close(ii_buffer->tmpfd);
+ GRN_CLOSE(ii_buffer->tmpfd);
unlink(ii_buffer->tmpfpath);
}
if (ii_buffer->block_buf) {
Modified: lib/io.c (+6 -6)
===================================================================
--- lib/io.c 2012-02-28 13:10:38 +0900 (dcb0026)
+++ lib/io.c 2012-02-28 13:30:33 +0900 (5f07600)
@@ -381,7 +381,7 @@ grn_io_detect_type(grn_ctx *ctx, const char *path)
{
struct _grn_io_header h;
uint32_t res = 0;
- int fd = open(path, O_RDWR);
+ int fd = GRN_OPEN(path, O_RDWR);
if (fd != -1) {
struct stat s;
if (fstat(fd, &s) != -1 && s.st_size >= sizeof(struct _grn_io_header)) {
@@ -397,7 +397,7 @@ grn_io_detect_type(grn_ctx *ctx, const char *path)
} else {
ERR(GRN_INVALID_FORMAT, "grn_io_detect_type failed");
}
- close(fd);
+ GRN_CLOSE(fd);
} else {
SERR(path);
}
@@ -417,7 +417,7 @@ grn_io_open(grn_ctx *ctx, const char *path, grn_io_mode mode)
if (!path || !*path || (strlen(path) > PATH_MAX - 4)) { return NULL; }
{
struct _grn_io_header h;
- int fd = open(path, O_RDWR);
+ int fd = GRN_OPEN(path, O_RDWR);
if (fd == -1) { SERR(path); return NULL; }
if (fstat(fd, &s) != -1 && s.st_size >= sizeof(struct _grn_io_header)) {
if (read(fd, &h, sizeof(struct _grn_io_header)) == sizeof(struct _grn_io_header)) {
@@ -431,7 +431,7 @@ grn_io_open(grn_ctx *ctx, const char *path, grn_io_mode mode)
}
}
}
- close(fd);
+ GRN_CLOSE(fd);
if (!segment_size) { return NULL; }
}
total_header_size = IO_HEADER_SIZE + header_size;
@@ -1810,7 +1810,7 @@ inline static grn_rc
grn_open(grn_ctx *ctx, fileinfo *fi, const char *path, int flags, size_t maxsize)
{
struct stat st;
- if ((fi->fd = open(path, flags, 0666)) == -1) {
+ if ((fi->fd = GRN_OPEN(path, flags, 0666)) == -1) {
SERR(path);
return ctx->rc;
}
@@ -1839,7 +1839,7 @@ inline static grn_rc
grn_close(grn_ctx *ctx, fileinfo *fi)
{
if (fi->fd != -1) {
- if (close(fi->fd) == -1) {
+ if (GRN_CLOSE(fi->fd) == -1) {
SERR("close");
return ctx->rc;
}
Modified: lib/proc.c (+4 -4)
===================================================================
--- lib/proc.c 2012-02-28 13:10:38 +0900 (613f1f8)
+++ lib/proc.c 2012-02-28 13:30:33 +0900 (07292d9)
@@ -45,7 +45,7 @@ grn_bulk_put_from_file(grn_ctx *ctx, grn_obj *bulk, const char *path)
/* FIXME: implement more smartly with grn_bulk */
int fd, ret = 0;
struct stat stat;
- if ((fd = open(path, O_RDONLY|O_NOFOLLOW)) == -1) {
+ if ((fd = GRN_OPEN(path, O_RDONLY|O_NOFOLLOW)) == -1) {
switch (errno) {
case EACCES :
ERR(GRN_OPERATION_NOT_PERMITTED, "request is not allowed: <%s>", path);
@@ -60,7 +60,7 @@ grn_bulk_put_from_file(grn_ctx *ctx, grn_obj *bulk, const char *path)
break;
#endif /* WIN32 */
default :
- ERR(GRN_UNKNOWN_ERROR, "open() failed(errno: %d): <%s>", errno, path);
+ ERR(GRN_UNKNOWN_ERROR, "GRN_OPEN() failed(errno: %d): <%s>", errno, path);
break;
}
return 0;
@@ -71,7 +71,7 @@ grn_bulk_put_from_file(grn_ctx *ctx, grn_obj *bulk, const char *path)
if ((buf = GRN_MALLOC(rest))) {
ssize_t ss;
for (bp = buf; rest; rest -= ss, bp += ss) {
- if ((ss = read(fd, bp, rest)) == -1) { goto exit; }
+ if ((ss = GRN_READ(fd, bp, rest)) == -1) { goto exit; }
}
GRN_TEXT_PUT(ctx, bulk, buf, stat.st_size);
ret = 1;
@@ -81,7 +81,7 @@ grn_bulk_put_from_file(grn_ctx *ctx, grn_obj *bulk, const char *path)
ERR(GRN_INVALID_ARGUMENT, "cannot stat file: <%s>", path);
}
exit :
- close(fd);
+ GRN_CLOSE(fd);
return ret;
}
Modified: src/groonga.c (+2 -2)
===================================================================
--- src/groonga.c 2012-02-28 13:10:38 +0900 (7cac88e)
+++ src/groonga.c 2012-02-28 13:30:33 +0900 (8e8706a)
@@ -1999,12 +1999,12 @@ do_daemon(char *path)
_exit(0);
}
{
- int null_fd = open("/dev/null", O_RDWR, 0);
+ int null_fd = GRN_OPEN("/dev/null", O_RDWR, 0);
if (null_fd != -1) {
dup2(null_fd, 0);
dup2(null_fd, 1);
dup2(null_fd, 2);
- if (null_fd > 2) { close(null_fd); }
+ if (null_fd > 2) { GRN_CLOSE(null_fd); }
}
}
#endif /* WIN32 */