#include <archive.h>
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
+
#include <pakfire/digest.h>
#include <pakfire/pakfire.h>
int pakfire_rlimit_set(struct pakfire* pakfire, int limit);
int pakfire_rlimit_reset_nofile(struct pakfire* pakfire);
+// Regex
+
+int pakfire_compile_regex(struct pakfire* pakfire, pcre2_code** regex,
+ const char* pattern);
+
#endif
#endif /* PAKFIRE_UTIL_H */
// Regular expressions
pcre2_code* regex_command;
pcre2_code* regex_variable;
-};
-
-static int pakfire_parser_compile_regex(struct pakfire_parser* parser, pcre2_code** regex,
- const char* pattern) {
- int pcre2_errno;
- size_t pcre2_offset;
- PCRE2_UCHAR errmsg[256];
-
- // Compile the regular expression
- *regex = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, 0,
- &pcre2_errno, &pcre2_offset, NULL);
-
- if (!*regex) {
- pcre2_get_error_message(pcre2_errno, errmsg, sizeof(errmsg));
- ERROR(parser->pakfire, "PCRE2 compilation failed for '%s' at offset %zu: %s\n",
- pattern, pcre2_offset, errmsg);
- return 1;
- }
- // Enable JIT
- pcre2_errno = pcre2_jit_compile(*regex, PCRE2_JIT_COMPLETE);
- if (pcre2_errno) {
- pcre2_get_error_message(pcre2_errno, errmsg, sizeof(errmsg));
- ERROR(parser->pakfire, "Enabling JIT on '%s' failed: %s\n", pattern, errmsg);
- return 1;
- }
-
- return 0;
-}
+ // XXX THESE ARE NEVER FREED
+};
static int pakfire_parser_compile_regexes(struct pakfire_parser* parser) {
int r;
// Commands
if (!parser->regex_command && (parser->flags & PAKFIRE_PARSER_FLAGS_EXPAND_COMMANDS)) {
- r = pakfire_parser_compile_regex(parser,
- &parser->regex_command, "%(\\(((?>[^()]|(?1))*)\\))");
+ r = pakfire_compile_regex(parser->pakfire, &parser->regex_command,
+ "%(\\(((?>[^()]|(?1))*)\\))");
if (r)
return r;
}
// Variables
if (!parser->regex_variable) {
- r = pakfire_parser_compile_regex(parser,
- &parser->regex_variable, "%\\{([A-Za-z0-9_\\-]+)\\}");
+ r = pakfire_compile_regex(parser->pakfire, &parser->regex_variable,
+ "%\\{([A-Za-z0-9_\\-]+)\\}");
if (r)
return r;
}
#include <json.h>
#include <uuid/uuid.h>
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
+
#include <pakfire/constants.h>
#include <pakfire/logging.h>
#include <pakfire/package.h>
int pakfire_rlimit_reset_nofile(struct pakfire* pakfire) {
return pakfire_rlimit_set(pakfire, FD_SETSIZE);
}
+
+// Regex
+
+int pakfire_compile_regex(struct pakfire* pakfire, pcre2_code** regex, const char* pattern) {
+ int pcre2_errno;
+ size_t pcre2_offset;
+ PCRE2_UCHAR errmsg[256];
+
+ // Compile the regular expression
+ *regex = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, 0,
+ &pcre2_errno, &pcre2_offset, NULL);
+
+ if (!*regex) {
+ pcre2_get_error_message(pcre2_errno, errmsg, sizeof(errmsg));
+ ERROR(pakfire, "PCRE2 compilation failed for '%s' at offset %zu: %s\n",
+ pattern, pcre2_offset, errmsg);
+ return 1;
+ }
+
+ // Enable JIT
+ pcre2_errno = pcre2_jit_compile(*regex, PCRE2_JIT_COMPLETE);
+ if (pcre2_errno) {
+ pcre2_get_error_message(pcre2_errno, errmsg, sizeof(errmsg));
+ ERROR(pakfire, "Enabling JIT on '%s' failed: %s\n", pattern, errmsg);
+ return 1;
+ }
+
+ return 0;
+}