15ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen/***************************************************************************
25ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *                                  _   _ ____  _
35ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *  Project                     ___| | | |  _ \| |
45ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *                             / __| | | | |_) | |
55ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *                            | (__| |_| |  _ <| |___
65ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *                             \___|\___/|_| \_\_____|
75ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *
8e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
95ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *
105ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * This software is licensed as described in the file COPYING, which
115ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * you should have received as part of this distribution. The terms
125ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * are also available at http://curl.haxx.se/docs/copyright.html.
135ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *
145ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * You may opt to use, copy, modify, merge, publish, distribute and/or sell
155ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * copies of the Software, and permit persons to whom the Software is
165ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * furnished to do so, under the terms of the COPYING file.
175ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *
185ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
195ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * KIND, either express or implied.
205ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen *
215ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen ***************************************************************************/
225ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen
23e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curl_setup.h"
245ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen
255ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#ifdef HAVE_STRINGS_H
265ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#include <strings.h>
275ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#endif
285ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen
295ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#include "strequal.h"
305ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen
31e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/*
32e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * @unittest: 1301
33e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET */
345ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsenint curl_strequal(const char *first, const char *second)
355ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen{
365ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#if defined(HAVE_STRCASECMP)
375ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return !(strcasecmp)(first, second);
385ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#elif defined(HAVE_STRCMPI)
395ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return !(strcmpi)(first, second);
405ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#elif defined(HAVE_STRICMP)
415ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return !(stricmp)(first, second);
425ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#else
435ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  while(*first && *second) {
445ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    if(toupper(*first) != toupper(*second)) {
455ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen      break;
465ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    }
475ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    first++;
485ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    second++;
495ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  }
505ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return toupper(*first) == toupper(*second);
515ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#endif
525ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen}
535ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen
54e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/*
55e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * @unittest: 1301
56e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET */
575ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsenint curl_strnequal(const char *first, const char *second, size_t max)
585ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen{
595ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#if defined(HAVE_STRNCASECMP)
605ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return !strncasecmp(first, second, max);
615ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#elif defined(HAVE_STRNCMPI)
625ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return !strncmpi(first, second, max);
635ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#elif defined(HAVE_STRNICMP)
645ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return !strnicmp(first, second, max);
655ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#else
665ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  while(*first && *second && max) {
675ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    if(toupper(*first) != toupper(*second)) {
685ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen      break;
695ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    }
705ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    max--;
715ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    first++;
725ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    second++;
735ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  }
745ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  if(0 == max)
755ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen    return 1; /* they are equal this far */
765ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen
775ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen  return toupper(*first) == toupper(*second);
785ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#endif
795ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen}
80