null+****@clear*****
null+****@clear*****
2012年 2月 24日 (金) 07:05:43 JST
Daijiro MORI 2012-02-24 07:05:43 +0900 (Fri, 24 Feb 2012)
New Revision: 17036219086403106190a4716d3ed4fcdbddbe0e
Log:
Define GRN_MKOSTEMP.
Modified files:
lib/groonga_in.h
lib/ii.c
Modified: lib/groonga_in.h (+15 -1)
===================================================================
--- lib/groonga_in.h 2012-02-23 20:44:15 +0900 (6a02b6a)
+++ lib/groonga_in.h 2012-02-24 07:05:43 +0900 (8cd9e16)
@@ -375,7 +375,7 @@ typedef int grn_cond;
#endif /* WIN32 */
#ifdef __GNUC__
-
+# include <features.h>
# if (defined(__i386__) || defined(__x86_64__)) /* ATOMIC ADD */
# define GRN_ATOMIC_ADD_EX(p,i,r) \
__asm__ __volatile__ ("lock; xaddl %0,%1" : "=r"(r), "=m"(*p) : "0"(i), "m" (*p))
@@ -414,6 +414,13 @@ typedef int grn_cond;
(void)atomic_swap_64(p, v)
# endif /* ATOMIC 64BIT SET */
+# if __GNUC_PREREQ(2, 7)
+# define GRN_MKOSTEMP mkostemp
+# else /* __GNUC_PREREQ(2, 7) */
+# define GRN_MKOSTEMP(template,flags) \
+ (mktemp(template), open((template),flags))
+# endif /* __GNUC_PREREQ(2, 7) */
+
#elif (defined(WIN32) || defined (_WIN64)) /* __GNUC__ */
# define GRN_ATOMIC_ADD_EX(p,i,r) \
@@ -444,6 +451,9 @@ typedef int grn_cond;
# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
# define GRN_BIT_SCAN_REV0 GRN_BIT_SCAN_REV
+# define GRN_MKOSTEMP(template,flags) \
+ (mktemp(template), open((template),((flags)|O_BINARY)))
+
#else /* __GNUC__ */
# if (defined(__sun) && defined(__SVR4)) /* ATOMIC ADD */
@@ -461,6 +471,10 @@ typedef int grn_cond;
/* todo */
# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
# define GRN_BIT_SCAN_REV0 GRN_BIT_SCAN_REV
+
+# define GRN_MKOSTEMP(template,flags) \
+ (mktemp(template), open((template),flags))
+
#endif /* __GNUC__ */
typedef uint8_t byte;
Modified: lib/ii.c (+2 -8)
===================================================================
--- lib/ii.c 2012-02-23 20:44:15 +0900 (f4e2031)
+++ lib/ii.c 2012-02-24 07:05:43 +0900 (e41bc97)
@@ -7097,14 +7097,8 @@ grn_ii_buffer_open(grn_ctx *ctx, grn_ii *ii,
snprintf(ii_buffer->tmpfpath, PATH_MAX,
"%sXXXXXX", grn_io_path(ii->seg));
ii_buffer->block_buf_size = II_BUFFER_BLOCK_SIZE;
-#ifdef WIN32
- mktemp(ii_buffer->tmpfpath);
- ii_buffer->tmpfd = open(ii_buffer->tmpfpath,
- O_WRONLY|O_CREAT|O_TRUNC|O_BINARY);
-#else /* WIN32 */
- ii_buffer->tmpfd = mkostemp(ii_buffer->tmpfpath,
- O_WRONLY|O_CREAT|O_TRUNC);
-#endif /* WIN32 */
+ ii_buffer->tmpfd = GRN_MKOSTEMP(ii_buffer->tmpfpath,
+ O_WRONLY|O_CREAT|O_TRUNC);
if (ii_buffer->tmpfd != -1) {
grn_obj_flags flags;
grn_table_get_info(ctx, ii->lexicon, &flags, NULL, NULL);