From d783e794c2fa6a9e6bffff9f41cdb7e8033bf3c3 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 27 Feb 2026 12:30:45 +0100 Subject: Add http_strncasecmp(3) POSIX.1-2008 does not any locale-specific version of strncasecmp(3), so conversions to lowercase depend on the system locale. Since HTTP header fields must be checked without case sensitivity and not depend on the system locale, a specialised function that forces the "POSIX" locale is required. --- doc/man3/Makefile | 1 + doc/man3/http_strncasecmp.3 | 52 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 doc/man3/http_strncasecmp.3 (limited to 'doc') diff --git a/doc/man3/Makefile b/doc/man3/Makefile index cdfff3d..ffdbf16 100644 --- a/doc/man3/Makefile +++ b/doc/man3/Makefile @@ -28,6 +28,7 @@ OBJECTS = \ $(DESTDIR)$(man3dir)/http_encode_url.3 \ $(DESTDIR)$(man3dir)/http_free.3 \ $(DESTDIR)$(man3dir)/http_response_add_header.3 \ + $(DESTDIR)$(man3dir)/http_strncasecmp.3 \ $(DESTDIR)$(man3dir)/http_update.3 all: diff --git a/doc/man3/http_strncasecmp.3 b/doc/man3/http_strncasecmp.3 new file mode 100644 index 0000000..0d5449f --- /dev/null +++ b/doc/man3/http_strncasecmp.3 @@ -0,0 +1,52 @@ +.TH HTTP_STRNCASECMP 3 2026-02-27 0.6.0 "libweb Library Reference" + +.SH NAME +http_strncasecmp \- compare two strings ignoring case as "POSIX" locale + +.SH SYNOPSIS +.LP +.nf +#include +.P +char *http_strncasecmp(const char *\fIs1\fP, const char *\fIs2\fP, size_t \fIn\fP); +.fi + +.SH DESCRIPTION +The +.IR http_strncasecmp () +function compares two strings as done by +.IR strncasecmp (3), +but forces the use of the "POSIX" locale, so that characters are converted +to lowercase with +.IR tolower_l (3), +rather than relying on the locale configured by the system. + +This makes +.IR http_strncasecmp () +ideal to compare HTTP headers, which must be checked without case sensitivity +according to RFC 9110. + +.SH RETURN VALUE +If the comparison is successful, zero is returned. If the two strings +are not equal (case ignored) or any of their characters could not be converted +by +.IR tolower_l(3) , +a positive integer is returned. +Otherwise, a negative integer is returned. + +.SH ERRORS +No errors are defined. + +.SH SEE ALSO +.BR libweb_http (7), +.BR http_strcasecmp (3). + +.B https://www.rfc-editor.org/rfc/rfc9110#name-field-names + +.SH COPYRIGHT +Copyright (C) 2023-2026 libweb contributors +.P +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. -- cgit v1.2.3