forked from krb5/krb5
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add regexp support on Windows using std::regex
Provide glue code in libkrb5support to emulate the POSIX regex(3) interface by calling into the C++ std::regex classes. Eliminate compatibility code for pre-POSIX regex functions. [ghudson@mit.edu: additional cleanup of regexp callers; minor style adjustments; removed regerrlen field; edited commit message]
- Loading branch information
1 parent
27d1775
commit d70692e
Showing
14 changed files
with
311 additions
and
235 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ | ||
/* include/k5-regex.h - Compatibility glue for std::regex on Windows */ | ||
|
||
/* | ||
* Copyright (C) 2024 United States Government as represented by the | ||
* Secretary of the Navy. | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* | ||
* * Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* | ||
* * Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in | ||
* the documentation and/or other materials provided with the | ||
* distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | ||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
* OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
/* | ||
* On POSIX platforms we can use the standardized regcomp()/regexec() function | ||
* calls. Windows does not provide POSIX regex functions, but does provide a | ||
* C++ interface (std::regex) that has the same functionality. | ||
*/ | ||
|
||
#ifndef _K5_REGEX_H_ | ||
#define _K5_REGEX_H_ | ||
|
||
#ifndef _WIN32 | ||
|
||
/* On POSIX platforms, just include regex.h. */ | ||
#include <regex.h> | ||
|
||
#else /* _WIN32 */ | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif /* __cplusplus */ | ||
|
||
/* On Windows, emulate the POSIX interface using functions from | ||
* libkrb5support. */ | ||
|
||
typedef struct { | ||
size_t re_nsub; /* Number of subexpressions */ | ||
void *regex; /* Pointer to std::basic_regex */ | ||
char errmsg[128]; /* Regular expression error message */ | ||
} regex_t; | ||
|
||
typedef ssize_t regoff_t; | ||
|
||
typedef struct { | ||
regoff_t rm_so; | ||
regoff_t rm_eo; | ||
} regmatch_t; | ||
|
||
/* | ||
* Flags to k5_regcomp() | ||
*/ | ||
|
||
#define REG_BASIC 0x00 /* Basic regular expressions */ | ||
#define REG_EXTENDED 0x01 /* Extended regular expressions */ | ||
#define REG_ICASE 0x02 /* Case-insensitive match */ | ||
#define REG_NOSUB 0x04 /* Do not do submatching */ | ||
|
||
/* | ||
* Flags to k5_regexec() | ||
*/ | ||
|
||
#define REG_NOTBOL 0x01 /* First character not at beginning of line */ | ||
#define REG_NOTEOL 0x02 /* Last character not at end of line */ | ||
|
||
/* | ||
* Error return codes for k5_regcomp()/k5_regexec() | ||
* | ||
* We only define REG_NOMATCH and REG_BADPAT, since no Kerberos code looks | ||
* for anything other than success and REG_NOMATCH. | ||
*/ | ||
|
||
#define REG_NOMATCH 1 | ||
#define REG_BADPAT 2 | ||
|
||
/* | ||
* Note that we don't follow the POSIX API exactly because k5_regexec() | ||
* doesn't declare regex_t as const; that's so we can store an error | ||
* string. | ||
*/ | ||
int k5_regcomp(regex_t *preg, const char *pattern, int flags); | ||
int k5_regexec(regex_t *preg, const char *string, size_t, | ||
regmatch_t pmatch[], int flags); | ||
size_t k5_regerror(int code, const regex_t *preg, char *errmsg, | ||
size_t errmsg_size); | ||
void k5_regfree(regex_t *preg); | ||
|
||
#define regcomp k5_regcomp | ||
#define regexec k5_regexec | ||
#define regerror k5_regerror | ||
#define regfree k5_regfree | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif /* __cplusplus */ | ||
#endif /* _WIN32 */ | ||
#endif /* _K5_REGEX_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.