mirror of
https://github.com/curl/curl.git
synced 2026-04-14 22:11:45 +03:00
Discovered with clang-tidy checker `readability-inconsistent-declaration-parameter-name`. Also: - do not enforce the above because of inconsistencies still present between public API prototypes and definitions. (Also betwen man page protos, and man page examples, and other parts of the code, e.g. `easy` vs `curl` vs `d` vs `handle`) Perhaps subject for a future effort: https://github.com/curl/curl/actions/runs/22166472728/job/64094691653 - enable and fix `readability-named-parameter` where missing. Refs: https://clang.llvm.org/extra/clang-tidy/checks/readability/inconsistent-declaration-parameter-name.html https://clang.llvm.org/extra/clang-tidy/checks/readability/named-parameter.html Closes #20624
95 lines
3.1 KiB
C
95 lines
3.1 KiB
C
/***************************************************************************
|
|
* _ _ ____ _
|
|
* Project ___| | | | _ \| |
|
|
* / __| | | | |_) | |
|
|
* | (__| |_| | _ <| |___
|
|
* \___|\___/|_| \_\_____|
|
|
*
|
|
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
*
|
|
* This software is licensed as described in the file COPYING, which
|
|
* you should have received as part of this distribution. The terms
|
|
* are also available at https://curl.se/docs/copyright.html.
|
|
*
|
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
* copies of the Software, and permit persons to whom the Software is
|
|
* furnished to do so, under the terms of the COPYING file.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
* SPDX-License-Identifier: curl
|
|
*
|
|
***************************************************************************/
|
|
#include "curl_setup.h"
|
|
|
|
#include "strcase.h"
|
|
|
|
/*
|
|
* curl_strequal() is for doing "raw" case insensitive strings. This is meant
|
|
* to be locale independent and only compare strings we know are safe for
|
|
* this. See https://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for
|
|
* further explanations as to why this function is necessary.
|
|
*/
|
|
|
|
static int casecompare(const char *first, const char *second)
|
|
{
|
|
while(*first) {
|
|
if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
|
|
/* get out of the loop as soon as they do not match */
|
|
return 0;
|
|
first++;
|
|
second++;
|
|
}
|
|
/* If we are here either the strings are the same or the length is different.
|
|
We can just test if the "current" character is non-zero for one and zero
|
|
for the other. Note that the characters may not be exactly the same even
|
|
if they match, we only want to compare zero-ness. */
|
|
return !*first == !*second;
|
|
}
|
|
|
|
static int ncasecompare(const char *first, const char *second, size_t max)
|
|
{
|
|
while(*first && max) {
|
|
if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
|
|
return 0;
|
|
max--;
|
|
first++;
|
|
second++;
|
|
}
|
|
if(max == 0)
|
|
return 1; /* they are equal this far */
|
|
|
|
return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
|
|
}
|
|
|
|
/*
|
|
* Only "raw" case insensitive strings. This is meant to be locale independent
|
|
* and only compare strings we know are safe for this.
|
|
*
|
|
* The function is capable of comparing a-z case insensitively.
|
|
*
|
|
* Result is 1 if text matches and 0 if not.
|
|
*/
|
|
|
|
/* --- public function --- */
|
|
int curl_strequal(const char *s1, const char *s2)
|
|
{
|
|
if(s1 && s2)
|
|
/* both pointers point to something then compare them */
|
|
return casecompare(s1, s2);
|
|
|
|
/* if both pointers are NULL then treat them as equal */
|
|
return NULL == s1 && NULL == s2;
|
|
}
|
|
|
|
/* --- public function --- */
|
|
int curl_strnequal(const char *s1, const char *s2, size_t n)
|
|
{
|
|
if(s1 && s2)
|
|
/* both pointers point to something then compare them */
|
|
return ncasecompare(s1, s2, n);
|
|
|
|
/* if both pointers are NULL then treat them as equal if max is non-zero */
|
|
return NULL == s1 && NULL == s2 && n;
|
|
}
|