From 52ce8163177f87f6bba677ee3006af9309cf9c82 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 24 Oct 2017 07:21:42 -0700 Subject: [PATCH] Avoid using strcasecmp --- examples/alure-hrtf.cpp | 4 ++-- examples/alure-physfs.cpp | 2 +- examples/alure-reverb.cpp | 25 ++++++++++++++++++++----- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/examples/alure-hrtf.cpp b/examples/alure-hrtf.cpp index e650ccc..d4d8e26 100644 --- a/examples/alure-hrtf.cpp +++ b/examples/alure-hrtf.cpp @@ -46,7 +46,7 @@ int main(int argc, char *argv[]) alure::Vector attrs; attrs.push_back({ALC_HRTF_SOFT, ALC_TRUE}); - if(argc-fileidx > 1 && strcasecmp(argv[fileidx], "-hrtf") == 0) + if(argc-fileidx > 1 && alure::StringView("-hrtf") == argv[fileidx]) { // Find the given HRTF and add it to the attributes list const char *hrtf_name = argv[fileidx+1]; @@ -66,7 +66,7 @@ int main(int argc, char *argv[]) for(int i = fileidx;i < argc;i++) { - if(argc-i > 1 && strcasecmp(argv[i], "-hrtf") == 0) + if(argc-i > 1 && alure::StringView("-hrtf") == argv[i]) { // Find the given HRTF and reset the device using it auto iter = std::find(hrtf_names.begin(), hrtf_names.end(), argv[i+1]); diff --git a/examples/alure-physfs.cpp b/examples/alure-physfs.cpp index d7f2a34..56e46a2 100644 --- a/examples/alure-physfs.cpp +++ b/examples/alure-physfs.cpp @@ -225,7 +225,7 @@ int main(int argc, char *argv[]) for(int i = fileidx;i < argc;i++) { - if(strcasecmp(argv[i], "-add") == 0 && argc-i > 1) + if(alure::StringView("-add") == argv[i] && argc-i > 1) { FileFactory::Mount(argv[++i]); std::cout<<"Available files:\n"; diff --git a/examples/alure-reverb.cpp b/examples/alure-reverb.cpp index 866e2bd..489b0f7 100644 --- a/examples/alure-reverb.cpp +++ b/examples/alure-reverb.cpp @@ -13,9 +13,24 @@ #include "efx-presets.h" -template -static inline size_t countof(const T(&)[N]) -{ return N; } +// Not UTF-8 aware! +int ci_compare(alure::StringView lhs, alure::StringView rhs) +{ + using traits = alure::StringView::traits_type; + + auto left = lhs.begin(); + auto right = rhs.begin(); + for(;left != lhs.end() && right != rhs.end();++left,++right) + { + int diff = std::tolower(traits::to_int_type(*left)) - + std::tolower(traits::to_int_type(*right)); + if(diff != 0) return (diff < 0) ? -1 : 1; + } + if(right != rhs.end()) return -1; + if(left != lhs.end()) return 1; + return 0; +} + #define DECL(x) { #x, EFX_REVERB_PRESET_##x } static const struct ReverbEntry { @@ -175,14 +190,14 @@ int main(int argc, char *argv[]) bool gotreverb = false; alure::Effect effect = ctx.createEffect(); - if(argc-fileidx >= 2 && strcasecmp(argv[fileidx], "-preset") == 0) + if(argc-fileidx >= 2 && alure::StringView("-preset") == argv[fileidx]) { const char *reverb_name = argv[fileidx+1]; fileidx += 2; auto iter = std::find_if(std::begin(reverblist), std::end(reverblist), [reverb_name](const ReverbEntry &entry) -> bool - { return strcasecmp(reverb_name, entry.name) == 0; } + { return ci_compare(reverb_name, entry.name) == 0; } ); if(iter != std::end(reverblist)) { -- 2.11.4.GIT