summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSusan LoVerso <sue@wiredtiger.com>2015-03-24 11:35:24 -0400
committerSusan LoVerso <sue@wiredtiger.com>2015-03-24 11:35:24 -0400
commit1df7f45ff9834c5eeb77b979339c3529df9f620f (patch)
treebf60bccf8bae4935a5bb9c42c0748273967881e4
parent2a6f8372f8a116bb515a380a80498853f7f3e97e (diff)
downloadmongo-1df7f45ff9834c5eeb77b979339c3529df9f620f.tar.gz
Add a single set of fhandle flags for open and close. #1785
-rw-r--r--dist/s_string.ok2
-rw-r--r--src/btree/bt_debug.c4
-rw-r--r--src/btree/bt_huffman.c7
-rw-r--r--src/conn/conn_api.c5
-rw-r--r--src/conn/conn_stat.c6
-rw-r--r--src/cursor/cur_backup.c6
-rw-r--r--src/include/extern.h4
-rw-r--r--src/include/misc.h17
-rw-r--r--src/meta/meta_turtle.c10
-rw-r--r--src/os_posix/os_stdio.c30
-rw-r--r--src/support/filename.c2
11 files changed, 54 insertions, 39 deletions
diff --git a/dist/s_string.ok b/dist/s_string.ok
index 86004e3d314..8589f50fd21 100644
--- a/dist/s_string.ok
+++ b/dist/s_string.ok
@@ -918,6 +918,7 @@ qsort
quartile
qup
rS
+rb
rbrace
rbracket
rdlock
@@ -1162,6 +1163,7 @@ vtype
vunpack
vupdate
walk's
+wb
wiredtiger
workFactor
wrapup
diff --git a/src/btree/bt_debug.c b/src/btree/bt_debug.c
index fd5c5485050..fa7cff35e5f 100644
--- a/src/btree/bt_debug.c
+++ b/src/btree/bt_debug.c
@@ -99,7 +99,7 @@ __debug_config(WT_SESSION_IMPL *session, WT_DBG *ds, const char *ofile)
return (__wt_scr_alloc(session, 512, &ds->msg));
/* If we're using a file, flush on each line. */
- WT_RET(__wt_fopen(session, ofile, WT_FOPEN_WRITE, 0, &ds->fp));
+ WT_RET(__wt_fopen(session, ofile, WT_FHANDLE_WRITE, 0, &ds->fp));
(void)setvbuf(ds->fp, NULL, _IOLBF, 0);
return (0);
@@ -131,7 +131,7 @@ __dmsg_wrapup(WT_DBG *ds)
}
/* Close any file we opened. */
- (void)__wt_fclose(session, &ds->fp, WT_FCLOSE_WRITE);
+ (void)__wt_fclose(session, &ds->fp, WT_FHANDLE_WRITE);
}
/*
diff --git a/src/btree/bt_huffman.c b/src/btree/bt_huffman.c
index 11321db0a76..6604bd9c9e1 100644
--- a/src/btree/bt_huffman.c
+++ b/src/btree/bt_huffman.c
@@ -157,11 +157,12 @@ __huffman_confchk_file(
/* Check the file exists. */
WT_RET(__wt_strndup(session, v->str + len, v->len - len, &fname));
- WT_ERR(__wt_fopen(session, fname, WT_FOPEN_READ, WT_FOPEN_FIXED, &fp));
+ WT_ERR(__wt_fopen(session,
+ fname, WT_FHANDLE_READ, WT_FOPEN_FIXED, &fp));
/* Optionally return the file handle. */
if (fpp == NULL)
- (void)__wt_fclose(session, &fp, WT_FCLOSE_READ);
+ (void)__wt_fclose(session, &fp, WT_FHANDLE_READ);
else
*fpp = fp;
@@ -367,7 +368,7 @@ __wt_huffman_read(WT_SESSION_IMPL *session, WT_CONFIG_ITEM *ip,
if (0) {
err: __wt_free(session, table);
}
- (void)__wt_fclose(session, &fp, WT_FCLOSE_READ);
+ (void)__wt_fclose(session, &fp, WT_FHANDLE_READ);
return (ret);
}
diff --git a/src/conn/conn_api.c b/src/conn/conn_api.c
index 7aabd88ba90..b41cad25914 100644
--- a/src/conn/conn_api.c
+++ b/src/conn/conn_api.c
@@ -1494,7 +1494,8 @@ __conn_write_base_config(WT_SESSION_IMPL *session, const char *cfg[])
if (exist)
return (0);
- WT_RET(__wt_fopen(session, WT_BASECONFIG_SET, WT_FOPEN_WRITE, 0, &fp));
+ WT_RET(__wt_fopen(session,
+ WT_BASECONFIG_SET, WT_FHANDLE_WRITE, 0, &fp));
fprintf(fp, "%s\n\n",
"# Do not modify this file.\n"
@@ -1551,7 +1552,7 @@ __conn_write_base_config(WT_SESSION_IMPL *session, const char *cfg[])
session, &fp, WT_BASECONFIG_SET, WT_BASECONFIG));
/* Close any file handle left open, remove any temporary file. */
-err: WT_TRET(__wt_fclose(session, &fp, WT_FCLOSE_WRITE));
+err: WT_TRET(__wt_fclose(session, &fp, WT_FHANDLE_WRITE));
WT_TRET(__wt_remove_if_exists(session, WT_BASECONFIG_SET));
return (ret);
diff --git a/src/conn/conn_stat.c b/src/conn/conn_stat.c
index 6767cc20309..83c8d539662 100644
--- a/src/conn/conn_stat.c
+++ b/src/conn/conn_stat.c
@@ -300,11 +300,11 @@ __statlog_log_one(WT_SESSION_IMPL *session, WT_ITEM *path, WT_ITEM *tmp)
if ((log_file = conn->stat_fp) == NULL ||
path == NULL || strcmp(tmp->mem, path->mem) != 0) {
conn->stat_fp = NULL;
- WT_RET(__wt_fclose(session, &log_file, WT_FCLOSE_APPEND));
+ WT_RET(__wt_fclose(session, &log_file, WT_FHANDLE_APPEND));
if (path != NULL)
(void)strcpy(path->mem, tmp->mem);
WT_RET(__wt_fopen(session,
- tmp->mem, WT_FOPEN_APPEND, WT_FOPEN_FIXED, &log_file));
+ tmp->mem, WT_FHANDLE_APPEND, WT_FOPEN_FIXED, &log_file));
}
conn->stat_fp = log_file;
@@ -529,7 +529,7 @@ __wt_statlog_destroy(WT_SESSION_IMPL *session, int is_close)
conn->stat_session = NULL;
conn->stat_tid_set = 0;
conn->stat_format = NULL;
- WT_TRET(__wt_fclose(session, &conn->stat_fp, WT_FCLOSE_APPEND));
+ WT_TRET(__wt_fclose(session, &conn->stat_fp, WT_FHANDLE_APPEND));
conn->stat_path = NULL;
conn->stat_sources = NULL;
conn->stat_stamp = NULL;
diff --git a/src/cursor/cur_backup.c b/src/cursor/cur_backup.c
index a0885b0294d..5b47c2c1a73 100644
--- a/src/cursor/cur_backup.c
+++ b/src/cursor/cur_backup.c
@@ -248,7 +248,7 @@ __backup_start(
* Close any hot backup file.
* We're about to open the incremental backup file.
*/
- WT_TRET(__wt_fclose(session, &cb->bfp, WT_FCLOSE_WRITE));
+ WT_TRET(__wt_fclose(session, &cb->bfp, WT_FHANDLE_WRITE));
WT_ERR(__backup_file_create(session, cb, log_only));
WT_ERR(__backup_list_append(
session, cb, WT_INCREMENTAL_BACKUP));
@@ -266,7 +266,7 @@ __backup_start(
}
err: /* Close the hot backup file. */
- WT_TRET(__wt_fclose(session, &cb->bfp, WT_FCLOSE_WRITE));
+ WT_TRET(__wt_fclose(session, &cb->bfp, WT_FHANDLE_WRITE));
if (ret != 0) {
WT_TRET(__backup_cleanup_handles(session, cb));
WT_TRET(__backup_stop(session));
@@ -456,7 +456,7 @@ __backup_file_create(
{
return (__wt_fopen(session,
incremental ? WT_INCREMENTAL_BACKUP : WT_METADATA_BACKUP,
- WT_FOPEN_WRITE, 0, &cb->bfp));
+ WT_FHANDLE_WRITE, 0, &cb->bfp));
}
/*
diff --git a/src/include/extern.h b/src/include/extern.h
index e9c37e62bb6..fe717f47853 100644
--- a/src/include/extern.h
+++ b/src/include/extern.h
@@ -490,11 +490,11 @@ extern int __wt_rename(WT_SESSION_IMPL *session, const char *from, const char *t
extern int __wt_read( WT_SESSION_IMPL *session, WT_FH *fh, wt_off_t offset, size_t len, void *buf);
extern int __wt_write(WT_SESSION_IMPL *session, WT_FH *fh, wt_off_t offset, size_t len, const void *buf);
extern void __wt_sleep(uint64_t seconds, uint64_t micro_seconds);
-extern int __wt_fopen(WT_SESSION_IMPL *session, const char *name, const char *mode, u_int flags, FILE **fpp);
+extern int __wt_fopen(WT_SESSION_IMPL *session, const char *name, WT_FHANDLE_MODE mode_flag, u_int flags, FILE **fpp);
extern int __wt_vfprintf(WT_SESSION_IMPL *session, FILE *fp, const char *fmt, va_list ap);
extern int __wt_fprintf(WT_SESSION_IMPL *session, FILE *fp, const char *fmt, ...) WT_GCC_FUNC_DECL_ATTRIBUTE((format (printf, 3, 4)));
extern int __wt_fflush(WT_SESSION_IMPL *session, FILE *fp);
-extern int __wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, int iswrite);
+extern int __wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, WT_FHANDLE_MODE mode_flag);
extern uint64_t __wt_strtouq(const char *nptr, char **endptr, int base);
extern int __wt_thread_create(WT_SESSION_IMPL *session, wt_thread_t *tidret, void *(*func)(void *), void *arg);
extern int __wt_thread_join(WT_SESSION_IMPL *session, wt_thread_t tid);
diff --git a/src/include/misc.h b/src/include/misc.h
index aaec41f6bc4..158903fcf7d 100644
--- a/src/include/misc.h
+++ b/src/include/misc.h
@@ -34,12 +34,23 @@
/*
* FILE handle close/open configuration.
*/
-#define WT_FCLOSE_APPEND 1
-#define WT_FCLOSE_READ 0
-#define WT_FCLOSE_WRITE 1
+typedef enum {
+ WT_FHANDLE_APPEND, WT_FHANDLE_READ, WT_FHANDLE_WRITE
+} WT_FHANDLE_MODE;
+
+#ifdef _WIN32
+/*
+ * Open in binary (untranslated) mode; translations involving
+ * carriage-return and linefeed characters are suppressed.
+ */
+#define WT_FOPEN_APPEND "ab"
+#define WT_FOPEN_READ "rb"
+#define WT_FOPEN_WRITE "wb"
+#else
#define WT_FOPEN_APPEND "a"
#define WT_FOPEN_READ "r"
#define WT_FOPEN_WRITE "w"
+#endif
#define WT_FOPEN_FIXED 0x1 /* Path isn't relative to home */
diff --git a/src/meta/meta_turtle.c b/src/meta/meta_turtle.c
index 49442dcf1d2..7e3ac3530f8 100644
--- a/src/meta/meta_turtle.c
+++ b/src/meta/meta_turtle.c
@@ -78,7 +78,8 @@ __metadata_load_hot_backup(WT_SESSION_IMPL *session)
WT_RET(__wt_exist(session, WT_METADATA_BACKUP, &exist));
if (!exist)
return (0);
- WT_RET(__wt_fopen(session, WT_METADATA_BACKUP, WT_FOPEN_READ, 0, &fp));
+ WT_RET(__wt_fopen(session,
+ WT_METADATA_BACKUP, WT_FHANDLE_READ, 0, &fp));
/* Read line pairs and load them into the metadata file. */
WT_ERR(__wt_scr_alloc(session, 512, &key));
@@ -95,7 +96,7 @@ __metadata_load_hot_backup(WT_SESSION_IMPL *session)
F_SET(S2C(session), WT_CONN_WAS_BACKUP);
-err: WT_TRET(__wt_fclose(session, &fp, WT_FCLOSE_READ));
+err: WT_TRET(__wt_fclose(session, &fp, WT_FHANDLE_READ));
__wt_scr_free(session, &key);
__wt_scr_free(session, &value);
return (ret);
@@ -235,7 +236,8 @@ __wt_turtle_read(WT_SESSION_IMPL *session, const char *key, char **valuep)
if (!exist)
return (strcmp(key, WT_METAFILE_URI) == 0 ?
__metadata_config(session, valuep) : WT_NOTFOUND);
- WT_RET(__wt_fopen(session, WT_METADATA_TURTLE, WT_FOPEN_READ, 0, &fp));
+ WT_RET(__wt_fopen(session,
+ WT_METADATA_TURTLE, WT_FHANDLE_READ, 0, &fp));
/* Search for the key. */
WT_ERR(__wt_scr_alloc(session, 512, &buf));
@@ -257,7 +259,7 @@ __wt_turtle_read(WT_SESSION_IMPL *session, const char *key, char **valuep)
/* Copy the value for the caller. */
WT_ERR(__wt_strdup(session, buf->data, valuep));
-err: WT_TRET(__wt_fclose(session, &fp, WT_FCLOSE_READ));
+err: WT_TRET(__wt_fclose(session, &fp, WT_FHANDLE_READ));
__wt_scr_free(session, &buf);
return (ret);
}
diff --git a/src/os_posix/os_stdio.c b/src/os_posix/os_stdio.c
index 071bdd9fd33..0f2355aa70d 100644
--- a/src/os_posix/os_stdio.c
+++ b/src/os_posix/os_stdio.c
@@ -14,10 +14,10 @@
*/
int
__wt_fopen(WT_SESSION_IMPL *session,
- const char *name, const char *mode, u_int flags, FILE **fpp)
+ const char *name, WT_FHANDLE_MODE mode_flag, u_int flags, FILE **fpp)
{
WT_DECL_RET;
- const char *path;
+ const char *mode, *path;
char *pathbuf;
WT_RET(__wt_verbose(session, WT_VERB_FILEOPS, "%s: fopen", name));
@@ -30,20 +30,18 @@ __wt_fopen(WT_SESSION_IMPL *session,
path = pathbuf;
}
-#ifdef _WIN32
- {
- char buf[10];
- /*
- * Open in binary (untranslated) mode; translations involving
- * carriage-return and linefeed characters are suppressed.
- */
- (void)snprintf(buf, sizeof(buf), "%s" "b", mode);
-
- *fpp = fopen(path, buf);
+ switch (mode_flag) {
+ case WT_FHANDLE_APPEND:
+ mode = WT_FOPEN_APPEND;
+ break;
+ case WT_FHANDLE_READ:
+ mode = WT_FOPEN_READ;
+ break;
+ case WT_FHANDLE_WRITE:
+ mode = WT_FOPEN_WRITE;
+ break;
}
-#else
*fpp = fopen(path, mode);
-#endif
if (*fpp == NULL)
ret = __wt_errno();
@@ -105,7 +103,7 @@ __wt_fflush(WT_SESSION_IMPL *session, FILE *fp)
* Close a FILE handle.
*/
int
-__wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, int iswrite)
+__wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, WT_FHANDLE_MODE mode_flag)
{
FILE *fp;
WT_DECL_RET;
@@ -120,7 +118,7 @@ __wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, int iswrite)
* If the handle was opened for writing, flush the file to the backing
* OS buffers, then flush the OS buffers to the backing disk.
*/
- if (iswrite) {
+ if (mode_flag == WT_FHANDLE_APPEND || mode_flag == WT_FHANDLE_WRITE) {
ret = __wt_fflush(session, fp);
if (fsync(fileno(fp)) != 0)
WT_TRET(__wt_errno());
diff --git a/src/support/filename.c b/src/support/filename.c
index 57fdad61d5a..db466ed3bd4 100644
--- a/src/support/filename.c
+++ b/src/support/filename.c
@@ -104,7 +104,7 @@ __wt_sync_and_rename_fp(
*fpp = NULL;
/* Flush to disk and close the handle. */
- WT_RET(__wt_fclose(session, &fp, WT_FCLOSE_WRITE));
+ WT_RET(__wt_fclose(session, &fp, WT_FHANDLE_WRITE));
/* Rename the source file to the target. */
WT_RET(__wt_rename(session, from, to));