aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xbuild_tools/lint.fish23
-rw-r--r--src/fish.cpp49
2 files changed, 30 insertions, 42 deletions
diff --git a/build_tools/lint.fish b/build_tools/lint.fish
index 7182322f..9585d4e6 100755
--- a/build_tools/lint.fish
+++ b/build_tools/lint.fish
@@ -34,13 +34,8 @@ if test $all = yes
else
# We haven't been asked to lint all the source. If there are uncommitted
# changes lint those, else lint the files in the most recent commit.
- set pending (git status --porcelain --short --untracked-files=all | sed -e 's/^ *//')
- if set -q pending[1]
- # There are pending changes so lint those files.
- for arg in $pending
- set files $files (string split -m 1 ' ' $arg)[2]
- end
- else
+ set files (git status --porcelain --short --untracked-files=all | sed -e 's/^ *[^ ]* *//')
+ if not set -q files[1]
# No pending changes so lint the files in the most recent commit.
set files (git show --word-diff=porcelain --name-only --pretty=oneline head)[2..-1]
end
@@ -56,10 +51,9 @@ if set -q c_files[1]
echo ========================================
echo Running cppcheck
echo ========================================
- # The stderr to stdout redirection is because cppcheck, incorrectly
- # IMHO, writes its diagnostic messages to stderr. Anyone running
- # this who wants to capture its output will expect those messages to be
- # written to stdout.
+ # The stderr to stdout redirection is because cppcheck, incorrectly IMHO, writes its
+ # diagnostic messages to stderr. Anyone running this who wants to capture its output will
+ # expect those messages to be written to stdout.
cppcheck -q --verbose --std=posix --std=c11 --language=c++ --template "[{file}:{line}]: {severity} ({id}): {message}" --suppress=missingIncludeSystem --inline-suppr --enable=$cppchecks $cppcheck_args $c_files 2>& 1
end
@@ -68,10 +62,9 @@ if set -q c_files[1]
echo ========================================
echo Running oclint
echo ========================================
- # The stderr to stdout redirection is because oclint, incorrectly
- # writes its final summary counts of the errors detected to stderr.
- # Anyone running this who wants to capture its output will expect those
- # messages to be written to stdout.
+ # The stderr to stdout redirection is because oclint, incorrectly writes its final summary
+ # counts of the errors detected to stderr. Anyone running this who wants to capture its
+ # output will expect those messages to be written to stdout.
if test (uname -s) = "Darwin"
if not test -f compile_commands.json
xcodebuild > xcodebuild.log
diff --git a/src/fish.cpp b/src/fish.cpp
index 17cd1f16..bde7854e 100644
--- a/src/fish.cpp
+++ b/src/fish.cpp
@@ -92,39 +92,34 @@ extern "C" {
int _NSGetExecutablePath(char* buf, uint32_t* bufsize);
}
-/* Return the path to the current executable. This needs to be realpath'd. */
+// Return the path to the current executable. This needs to be realpath'd.
static std::string get_executable_path(const char *argv0)
{
- char buff[PATH_MAX];
+ char buff[PATH_MAX + 1];
+
#if __APPLE__
- {
- /* Returns 0 on success, -1 if the buffer is too small */
- uint32_t buffSize = sizeof buff;
- if (0 == _NSGetExecutablePath(buff, &buffSize))
- return std::string(buff);
-
- /* Loop until we're big enough */
- char *mbuff = (char *)malloc(buffSize);
- while (0 > _NSGetExecutablePath(mbuff, &buffSize))
- mbuff = (char *)realloc(mbuff, buffSize);
-
- /* Return the string */
- std::string result = mbuff;
- free(mbuff);
- return result;
- }
-#endif
- {
- /* On other Unixes, try /proc directory. This might be worth breaking out into macros. */
- if (0 < readlink("/proc/self/exe", buff, sizeof buff) || // Linux
- 0 < readlink("/proc/curproc/file", buff, sizeof buff) || // BSD
- 0 < readlink("/proc/self/path/a.out", buff, sizeof buff)) // Solaris
- {
- return std::string(buff);
+ // On OS X use it's proprietary API to get the path to the executable.
+ uint32_t buffSize = sizeof buff;
+ if (_NSGetExecutablePath(buff, &buffSize) == 0) return std::string(buff);
+#else
+ // On non-OS X UNIXes, try /proc directory.
+ ssize_t len;
+ len = readlink("/proc/self/exe", buff, sizeof buff); // Linux
+ if (len == -1) {
+ len = readlink("/proc/curproc/file", buff, sizeof buff); // BSD
+ if (len == -1) {
+ len = readlink("/proc/self/path/a.out", buff, sizeof buff); // Solaris
}
}
+ if (len > 0) {
+ buff[len] = '\0';
+ return std::string(buff);
+ }
+#endif
- /* Just return argv0, which probably won't work (i.e. it's not an absolute path or a path relative to the working directory, but instead something the caller found via $PATH). We'll eventually fall back to the compile time paths. */
+ // Just return argv0, which probably won't work (i.e. it's not an absolute path or a path
+ // relative to the working directory, but instead something the caller found via $PATH). We'll
+ // eventually fall back to the compile time paths.
return std::string(argv0 ? argv0 : "");
}