aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/env_universal_common.cpp
diff options
context:
space:
mode:
authorGravatar Kurtis Rader <krader@skepticism.us>2016-04-04 14:34:28 -0700
committerGravatar Kurtis Rader <krader@skepticism.us>2016-04-04 14:34:28 -0700
commit47f1a92cc4c3c7056f4172974f10a8dd402cf55c (patch)
tree34bf83341006081f8a07bc6ca77cac03c603eb97 /src/env_universal_common.cpp
parent0953590cca7cdc2dab75af5a85c8e2f15d4b8ab2 (diff)
fixes for cppcheck lint warnings
Refine the linting behavior. Fix several of the, mostly trivial, lint errors.
Diffstat (limited to 'src/env_universal_common.cpp')
-rw-r--r--src/env_universal_common.cpp46
1 files changed, 22 insertions, 24 deletions
diff --git a/src/env_universal_common.cpp b/src/env_universal_common.cpp
index a3815886..75113615 100644
--- a/src/env_universal_common.cpp
+++ b/src/env_universal_common.cpp
@@ -663,47 +663,44 @@ bool env_universal_t::load()
return success;
}
-bool env_universal_t::open_temporary_file(const wcstring &directory, wcstring *out_path, int *out_fd)
+bool env_universal_t::open_temporary_file(const wcstring &directory, wcstring *out_path,
+ int *out_fd)
{
- /* Create and open a temporary file for writing within the given directory */
- /* Try to create a temporary file, up to 10 times. We don't use mkstemps because we want to open it CLO_EXEC. This should almost always succeed on the first try. */
- assert(! string_suffixes_string(L"/", directory));
-
+ // Create and open a temporary file for writing within the given directory. Try to create a
+ // temporary file, up to 10 times. We don't use mkstemps because we want to open it CLO_EXEC.
+ // This should almost always succeed on the first try.
+ assert(!string_suffixes_string(L"/", directory));
+
bool success = false;
+ int saved_errno;
const wcstring tmp_name_template = directory + L"/fishd.tmp.XXXXXX";
wcstring tmp_name;
+
for (size_t attempt = 0; attempt < 10 && ! success; attempt++)
{
int result_fd = -1;
char *narrow_str = wcs2str(tmp_name_template.c_str());
#if HAVE_MKOSTEMP
result_fd = mkostemp(narrow_str, O_CLOEXEC);
- if (result_fd >= 0)
- {
- tmp_name = str2wcstring(narrow_str);
- }
#else
- if (mktemp(narrow_str))
+ // cppcheck-suppress redundantAssignment
+ result_fd = mkstemp(narrow_str);
+ if (result_fd != -1)
{
- /* It was successfully templated; try opening it atomically */
- tmp_name = str2wcstring(narrow_str);
- result_fd = wopen_cloexec(tmp_name, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, 0644);
+ fcntl(result_fd, F_SETFD, O_CLOEXEC);
}
#endif
-
- if (result_fd >= 0)
- {
- /* Success */
- *out_fd = result_fd;
- *out_path = str2wcstring(narrow_str);
- success = true;
- }
+
+ saved_errno = errno;
+ success = result_fd != -1;
+ *out_fd = result_fd;
+ *out_path = str2wcstring(narrow_str);
free(narrow_str);
}
- if (! success)
+
+ if (!success)
{
- int err = errno;
- report_error(err, L"Unable to open file '%ls'", tmp_name.c_str());
+ report_error(saved_errno, L"Unable to open file '%ls'", out_path->c_str());
}
return success;
}
@@ -1228,6 +1225,7 @@ class universal_notifier_shmem_poller_t : public universal_notifier_t
/* Read the current seed */
this->poll();
+ // cppcheck-suppress memleak // addr not really leaked
}
public: