// // aegis - project change supervisor // Copyright (C) 1999, 2004-2006, 2008 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #include #include #include #include static int memcasecmp(const char *s1, const char *s2, size_t n) { unsigned char c1; unsigned char c2; while (n > 0) { c1 = *s1++; if (isupper((unsigned char)c1)) c1 = tolower(c1); c2 = *s2++; if (isupper((unsigned char)c2)) c1 = tolower(c2); if (c1 != c2) return (c1 - c2); --n; } return 0; } static int look_for_suffix(const char *stem, const char *suffix) { size_t stem_len; size_t suffix_len; size_t idx; stem_len = strlen(stem); suffix_len = strlen(suffix); if (stem_len < suffix_len) return -1; idx = stem_len - suffix_len; if (0 != memcasecmp(stem + idx, suffix, suffix_len)) return -1; return idx; } int exeext(const char *s) { const char *cfg; int n; cfg = configured_exeext(); if (!*cfg) return -1; n = look_for_suffix(s, cfg); if (n >= 0) return n; #if defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(__NUTC__) n = look_for_suffix(s, ".exe"); if (n >= 0) return n; n = look_for_suffix(s, ".bat"); if (n >= 0) return n; n = look_for_suffix(s, ".cmd"); if (n >= 0) return n; n = look_for_suffix(s, ".com"); if (n >= 0) return n; #endif return -1; }