diff --git a/fallback.cpp b/fallback.cpp index a88f00f73..7e215bbe7 100644 --- a/fallback.cpp +++ b/fallback.cpp @@ -817,7 +817,7 @@ static wchar_t *wcsdup_fallback(const wchar_t *in) return out; } -int wcscasecmp_fallback(const wchar_t *a, const wchar_t *b) +static int wcscasecmp_fallback(const wchar_t *a, const wchar_t *b) { if (*a == 0) { @@ -834,6 +834,26 @@ int wcscasecmp_fallback(const wchar_t *a, const wchar_t *b) return wcscasecmp_fallback(a+1,b+1); } +static int wcsncasecmp_fallback(const wchar_t *a, const wchar_t *b, size_t count) +{ + if (count == 0) + return 0; + + if (*a == 0) + { + return (*b==0)?0:-1; + } + else if (*b == 0) + { + return 1; + } + int diff = towlower(*a)-towlower(*b); + if (diff != 0) + return diff; + else + return wcsncasecmp_fallback(a+1,b+1, count-1); +} + #if __APPLE__ && __DARWIN_C_LEVEL >= 200809L /* Note parens avoid the macro expansion */ @@ -851,6 +871,13 @@ int wcscasecmp_use_weak(const wchar_t *a, const wchar_t *b) return wcscasecmp_fallback(a, b); } +int wcsncasecmp_use_weak(const wchar_t *s1, const wchar_t *s2, size_t n) +{ + if (wcsncasecmp != NULL) + return (wcsncasecmp)(s1, s2, n); + return wcsncasecmp_fallback(s1, s2, n); +} + #else //__APPLE__ #ifndef HAVE_WCSDUP @@ -881,24 +908,9 @@ size_t wcslen(const wchar_t *in) #endif #ifndef HAVE_WCSNCASECMP -int wcsncasecmp(const wchar_t *a, const wchar_t *b, int count) +int wcsncasecmp(const wchar_t *a, const wchar_t *b, size_t count) { - if (count == 0) - return 0; - - if (*a == 0) - { - return (*b==0)?0:-1; - } - else if (*b == 0) - { - return 1; - } - int diff = towlower(*a)-towlower(*b); - if (diff != 0) - return diff; - else - return wcsncasecmp(a+1,b+1, count-1); + return wcsncasecmp_fallback(a, b, count); } #endif diff --git a/fallback.h b/fallback.h index 433f48d58..eba91be6c 100644 --- a/fallback.h +++ b/fallback.h @@ -217,8 +217,10 @@ int wcwidth(wchar_t c); #if __APPLE__ && __DARWIN_C_LEVEL >= 200809L wchar_t *wcsdup_use_weak(const wchar_t *); int wcscasecmp_use_weak(const wchar_t *, const wchar_t *); +int wcsncasecmp_use_weak(const wchar_t *s1, const wchar_t *s2, size_t n); #define wcsdup(a) wcsdup_use_weak((a)) #define wcscasecmp(a, b) wcscasecmp_use_weak((a), (b)) +#define wcsncasecmp(a, b, c) wcsncasecmp_use_weak((a), (b), (c)) #else @@ -273,7 +275,7 @@ size_t wcslen(const wchar_t *in); fish and guaranteed to be a sane, english word. Using wcsncasecmp on a user-supplied string should be considered a bug. */ -int wcsncasecmp(const wchar_t *a, const wchar_t *b, int count); +int wcsncasecmp(const wchar_t *a, const wchar_t *b, size_t count); /** Returns a newly allocated wide character string wich is a copy of diff --git a/osx/install.sh b/osx/install.sh new file mode 100755 index 000000000..44a790410 --- /dev/null +++ b/osx/install.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +# Die if anything has an error +set -e + +# Make sure we're run as root +scriptname=`basename "$0"` +if [[ $UID -ne 0 ]]; then + echo "${scriptname} must be run as root" + exit 1 +fi + +# Set the prefix for installation +PREFIX=/usr/local + +# Jump to the Resources directory +cd "$(dirname "$0")" + +# Add us to the shells list +./add-shell "${PREFIX}/bin/fish" + +# Ditto the base directory to the right place +ditto ./base "${PREFIX}" + +# Announce our success +echo "fish has been installed under ${PREFIX}/ and added to /etc/shells (if it was not already present)" +echo "To start fish, run:" +echo " ${PREFIX}/bin/fish" +echo "If you wish to change your default shell to fish, run:" +echo " chsh -s ${PREFIX}/bin/fish" +echo "Enjoy!" diff --git a/osx/launch_fish.scpt b/osx/launch_fish.scpt index 0afefdb67..dc39dd52e 100644 Binary files a/osx/launch_fish.scpt and b/osx/launch_fish.scpt differ