From 7cc80bfd7c250e713d8909decb2f5bb3ba30f054 Mon Sep 17 00:00:00 2001 From: Eric Dong Date: Wed, 6 May 2015 10:39:26 +0000 Subject: [PATCH] MdePkg: Add Regular Expression Protocol and match2 opcode definition. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong Reviewed-by: Liming Gao Reviewed-by: Samer El-Haj-Mahmoud git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17339 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Protocol/RegularExpressionProtocol.h | 178 ++++++++++++++++++ .../Uefi/UefiInternalFormRepresentation.h | 6 + MdePkg/MdePkg.dec | 11 ++ 3 files changed, 195 insertions(+) create mode 100644 MdePkg/Include/Protocol/RegularExpressionProtocol.h diff --git a/MdePkg/Include/Protocol/RegularExpressionProtocol.h b/MdePkg/Include/Protocol/RegularExpressionProtocol.h new file mode 100644 index 0000000000..e02dbbddd1 --- /dev/null +++ b/MdePkg/Include/Protocol/RegularExpressionProtocol.h @@ -0,0 +1,178 @@ +/** @file + This section defines the Regular Expression Protocol. This protocol isused to match + Unicode strings against Regular Expression patterns. + +Copyright (c) 2015, Intel Corporation. All rights reserved.
+This program and the accompanying materials are licensed and made available under +the terms and conditions of the BSD License that accompanies this distribution. +The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php. + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef __REGULAR_EXPRESSION_PROTOCOL_H__ +#define __REGULAR_EXPRESSION_PROTOCOL_H__ + +#define EFI_REGULAR_EXPRESSION_PROTOCOL_GUID \ + { \ + 0xB3F79D9A, 0x436C, 0xDC11, {0xB0, 0x52, 0xCD, 0x85, 0xDF, 0x52, 0x4C, 0xE6 } \ + } + +#define EFI_REGEX_SYNTAX_TYPE_POSIX_EXTENDED_GUID \ + { \ + 0x5F05B20F, 0x4A56, 0xC231, {0xFA, 0x0B, 0xA7, 0xB1, 0xF1, 0x10, 0x04, 0x1D } \ + } + +#define EFI_REGEX_SYNTAX_TYPE_PERL_GUID \ + { \ + 0x63E60A51, 0x497D, 0xD427, {0xC4, 0xA5, 0xB8, 0xAB, 0xDC, 0x3A, 0xAE, 0xB6 } \ + } + +#define EFI_REGEX_SYNTAX_TYPE_ECMA_262_GUID \ + { \ + 0x9A473A4A, 0x4CEB, 0xB95A, {0x41, 0x5E, 0x5B, 0xA0, 0xBC, 0x63, 0x9B, 0x2E } \ + } + +typedef struct _EFI_REGULAR_EXPRESSION_PROTOCOL EFI_REGULAR_EXPRESSION_PROTOCOL; + + +typedef struct { + CONST CHAR16 *CapturePtr; // Pointer to the start of the captured sub-expression + // within matched String. + + UINTN Length; // Length of captured sub-expression. +} EFI_REGEX_CAPTURE; + +typedef EFI_GUID EFI_REGEX_SYNTAX_TYPE; + +// +// Protocol member functions +// +/** + Returns information about the regular expression syntax types supported + by the implementation. + + This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL + instance. + + RegExSyntaxTypeListSize On input, the size in bytes of RegExSyntaxTypeList. + On output with a return code of EFI_SUCCESS, the + size in bytes of the data returned in + RegExSyntaxTypeList. On output with a return code + of EFI_BUFFER_TOO_SMALL, the size of + RegExSyntaxTypeListrequired to obtain the list. + + RegExSyntaxTypeList A caller-allocated memory buffer filled by the + driver with one EFI_REGEX_SYNTAX_TYPEelement + for each supported Regular expression syntax + type. The list must not change across multiple + calls to the same driver. The first syntax + type in the list is the default type for the + driver. + + @retval EFI_SUCCESS The regular expression syntax types list + was returned successfully. + @retval EFI_UNSUPPORTED The service is not supported by this driver. + @retval EFI_DEVICE_ERROR The list of syntax types could not be + retrieved due to a hardware or firmware error. + @retval EFI_BUFFER_TOO_SMALL The buffer RegExSyntaxTypeList is too small + to hold the result. + @retval EFI_INVALID_PARAMETER RegExSyntaxTypeListSize is NULL + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_REGULAR_EXPRESSION_GET_INFO) ( + IN EFI_REGULAR_EXPRESSION_PROTOCOL *This, + IN OUT UINTN *RegExSyntaxTypeListSize, + OUT EFI_REGEX_SYNTAX_TYPE *RegExSyntaxTypeList + ); + +/** + Checks if the input string matches to the regular expression pattern. + + This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL instance. + Type EFI_REGULAR_EXPRESSION_PROTOCOL is defined in Section + XYZ. + + String A pointer to a NULL terminated string to match against the + regular expression string specified by Pattern. + + Pattern A pointer to a NULL terminated string that represents the + regular expression. + + SyntaxType A pointer to the EFI_REGEX_SYNTAX_TYPE that identifies the + regular expression syntax type to use. May be NULL in which + case the function will use its default regular expression + syntax type. + + Result On return, points to TRUE if String fully matches against + the regular expression Pattern using the regular expression + SyntaxType. Otherwise, points to FALSE. + + Captures A Pointer to an array of EFI_REGEX_CAPTURE objects to receive + the captured groups in the event of a match. The full + sub-string match is put in Captures[0], and the results of N + capturing groups are put in Captures[1:N]. If Captures is + NULL, then this function doesn't allocate the memory for the + array and does not build up the elements. It only returns the + number of matching patterns in CapturesCount. If Captures is + not NULL, this function returns a pointer to an array and + builds up the elements in the array. CapturesCount is also + updated to the number of matching patterns found. It is the + caller's responsibility to free the memory pool in Captures + and in each CapturePtr in the array elements. + + CapturesCount On output, CapturesCount is the number of matching patterns + found in String. Zero means no matching patterns were found + in the string. + + @retval EFI_SUCCESS The regular expression string matching + completed successfully. + @retval EFI_UNSUPPORTED The regular expression syntax specified by + SyntaxTypeis not supported by this driver. + @retval EFI_DEVICE_ERROR The regular expression string matching + failed due to a hardware or firmware error. + @retval EFI_INVALID_PARAMETER String, Pattern, Result, or CapturesCountis + NULL. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_REGULAR_EXPRESSION_MATCH) ( + IN EFI_REGULAR_EXPRESSION_PROTOCOL *This, + IN CHAR16 *String, + IN CHAR16 *Pattern, + IN EFI_REGEX_SYNTAX_TYPE *SyntaxType, OPTIONAL + OUT BOOLEAN *Result, + OUT EFI_REGEX_CAPTURE **Captures, OPTIONAL + OUT UINTN *CapturesCount + ); + +struct _EFI_REGULAR_EXPRESSION_PROTOCOL { + EFI_REGULAR_EXPRESSION_MATCH MatchString; + EFI_REGULAR_EXPRESSION_GET_INFO GetInfo; +} ; + +extern EFI_GUID gEfiRegularExpressionProtocolGuid; + +// +// For regular expression rules specified in the POSIX Extended Regular +// Expression (ERE) Syntax: +// +extern EFI_GUID gEfiRegexSyntaxTypePosixExtendedGuid; + +// +// For regular expression rules specifiedin the ECMA 262 Specification +// +extern EFI_GUID gEfiRegexSyntaxTypeEcma262Guid; + +// +// For regular expression rules specified in the Perl standard: +// +extern EFI_GUID gEfiRegexSyntaxTypePerlGuid; + +#endif diff --git a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h b/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h index 70b037488d..4f9549dfcc 100644 --- a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h +++ b/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h @@ -780,6 +780,7 @@ typedef union { #define EFI_IFR_MODAL_TAG_OP 0x61 #define EFI_IFR_REFRESH_ID_OP 0x62 #define EFI_IFR_WARNING_IF_OP 0x63 +#define EFI_IFR_MATCH2_OP 0x64 // // Definitions of IFR Standard Headers @@ -1399,6 +1400,11 @@ typedef struct _EFI_IFR_MATCH { EFI_IFR_OP_HEADER Header; } EFI_IFR_MATCH; +typedef struct _EFI_IFR_MATCH2 { + EFI_IFR_OP_HEADER Header; + EFI_GUID SyntaxType; +} EFI_IFR_MATCH2; + typedef struct _EFI_IFR_MULTIPLY { EFI_IFR_OP_HEADER Header; } EFI_IFR_MULTIPLY; diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index bce005b7fa..a80b8e9bd9 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -563,6 +563,14 @@ ## Include/Protocol/AdapterInformation.h gEfiAdapterInfoUndiIpv6SupportGuid = { 0x4bd56be3, 0x4975, 0x4d8a, {0xa0, 0xad, 0xc4, 0x91, 0x20, 0x4b, 0x5d, 0x4d }} + ## Include/Protocol/RegularExpressionProtocol.h + gEfiRegexSyntaxTypePosixExtendedGuid = {0x5F05B20F, 0x4A56, 0xC231, {0xFA, 0x0B, 0xA7, 0xB1, 0xF1, 0x10, 0x04, 0x1D }} + + ## Include/Protocol/RegularExpressionProtocol.h + gEfiRegexSyntaxTypeEcma262Guid = { 0x9A473A4A, 0x4CEB, 0xB95A, {0x41, 0x5E, 0x5B, 0xA0, 0xBC, 0x63, 0x9B, 0x2E }} + + ## Include/Protocol/RegularExpressionProtocol.h + gEfiRegexSyntaxTypePerlGuid = {0x63E60A51, 0x497D, 0xD427, {0xC4, 0xA5, 0xB8, 0xAB, 0xDC, 0x3A, 0xAE, 0xB6 }} # # GUID defined in PI1.0 @@ -1457,6 +1465,9 @@ ## Include/Protocol/BluetoothConfig.h gEfiBluetoothConfigProtocolGuid = { 0x62960cf3, 0x40ff, 0x4263, { 0xa7, 0x7c, 0xdf, 0xde, 0xbd, 0x19, 0x1b, 0x4b }} + ## Include/Protocol/RegularExpressionProtocol.h + gEfiRegularExpressionProtocolGuid = { 0xB3F79D9A, 0x436C, 0xDC11, {0xB0, 0x52, 0xCD, 0x85, 0xDF, 0x52, 0x4C, 0xE6 }} + # # [Error.gEfiMdePkgTokenSpaceGuid] # 0x80000001 | Invalid value provided. -- 2.39.2