summaryrefslogtreecommitdiff
path: root/src/mongo/shell/linenoise.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/shell/linenoise.cpp')
-rw-r--r--src/mongo/shell/linenoise.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/mongo/shell/linenoise.cpp b/src/mongo/shell/linenoise.cpp
index 8bd30c9f744..b4e87449b0a 100644
--- a/src/mongo/shell/linenoise.cpp
+++ b/src/mongo/shell/linenoise.cpp
@@ -2764,7 +2764,17 @@ int linenoiseHistorySetMaxLen(int len) {
/* Save the history in the specified file. On success 0 is returned
* otherwise -1 is returned. */
int linenoiseHistorySave(const char* filename) {
- FILE* fp = fopen(filename, "wt");
+ FILE* fp;
+#if _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE || defined(__APPLE__)
+ int fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR);
+ if (fd == -1) {
+ // report errno somehow?
+ return -1;
+ }
+ fp = fdopen(fd, "wt");
+#else
+ fp = fopen(filename, "wt");
+#endif // _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE || defined(__APPLE__)
if (fp == NULL) {
return -1;
}
@@ -2774,7 +2784,7 @@ int linenoiseHistorySave(const char* filename) {
fprintf(fp, "%s\n", history[j]);
}
}
- fclose(fp);
+ fclose(fp); // Also causes fd to be closed.
return 0;
}