mirror of
https://github.com/swaywm/sway.git
synced 2024-11-24 17:01:29 +00:00
Replace pcre with pcre2
Closes: https://github.com/swaywm/sway/issues/6838
This commit is contained in:
parent
04676936e7
commit
f614f35e73
|
@ -12,6 +12,7 @@ packages:
|
||||||
- mesa-dev
|
- mesa-dev
|
||||||
- meson
|
- meson
|
||||||
- pango-dev
|
- pango-dev
|
||||||
|
- pcre2-dev
|
||||||
- pixman-dev
|
- pixman-dev
|
||||||
- scdoc
|
- scdoc
|
||||||
- wayland-dev
|
- wayland-dev
|
||||||
|
|
|
@ -9,6 +9,7 @@ packages:
|
||||||
- libxkbcommon
|
- libxkbcommon
|
||||||
- meson
|
- meson
|
||||||
- pango
|
- pango
|
||||||
|
- pcre2
|
||||||
- scdoc
|
- scdoc
|
||||||
- wayland
|
- wayland
|
||||||
- wayland-protocols
|
- wayland-protocols
|
||||||
|
|
|
@ -4,6 +4,7 @@ packages:
|
||||||
- devel/json-c
|
- devel/json-c
|
||||||
- devel/libevdev
|
- devel/libevdev
|
||||||
- devel/meson
|
- devel/meson
|
||||||
|
- devel/pcre2
|
||||||
- devel/pkgconf
|
- devel/pkgconf
|
||||||
- graphics/cairo
|
- graphics/cairo
|
||||||
- graphics/gdk-pixbuf2
|
- graphics/gdk-pixbuf2
|
||||||
|
|
|
@ -18,7 +18,7 @@ sway benötigt die folgenden Pakete:
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols\*
|
* wayland-protocols\*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -29,7 +29,7 @@ Installationsafhængigheder:
|
||||||
* [wlroots]
|
* [wlroots]
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -28,7 +28,7 @@ Instale las dependencias:
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -35,7 +35,7 @@ Installez les dépendances :
|
||||||
* [wlroots]
|
* [wlroots]
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -28,7 +28,7 @@ sway και wlroots γιά τεστάρισμα ή development.
|
||||||
* [wlroots]
|
* [wlroots]
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -28,7 +28,7 @@ Telepítsd a függőségeket:
|
||||||
* [wlroots]
|
* [wlroots]
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -29,7 +29,7 @@ Patreon با نام کاربری SirCmpwn](https://patreon.com/sircmpwn) مرا
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -30,7 +30,7 @@ Swayは沢山のディストリビューションで提供されています。"
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -27,7 +27,7 @@ IRC 채널을 방문하거나 sir@cmpwn.com으로 이메일을 보내 상담 받
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -27,7 +27,7 @@ Install dependencies:
|
||||||
* [wlroots]
|
* [wlroots]
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -28,7 +28,7 @@ Afhankelijkheden installeren:
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -28,7 +28,7 @@ Zainstaluj zależności:
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -30,7 +30,7 @@ Instale as dependências:
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -25,7 +25,7 @@ Dependențe pentru instalare:
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -29,7 +29,7 @@ sway и wlroots для тестирования или разработки.
|
||||||
* [wlroots]
|
* [wlroots]
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -26,7 +26,7 @@ Aşağıdaki bağımlılıkları yükleyin:
|
||||||
* [wlroots]
|
* [wlroots]
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -39,7 +39,7 @@ Sway доступний у багатьох дистрибутивах Linux (а
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -28,7 +28,7 @@ Sway 在很多发行版中可用. 尝试在你的发行版中安装 "sway" 包.
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -28,7 +28,7 @@ Sway 在許多發行版都有提供。請自己嘗試於你的發行版安裝
|
||||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||||
* wayland
|
* wayland
|
||||||
* wayland-protocols \*
|
* wayland-protocols \*
|
||||||
* pcre
|
* pcre2
|
||||||
* json-c
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#ifndef _SWAY_CRITERIA_H
|
#ifndef _SWAY_CRITERIA_H
|
||||||
#define _SWAY_CRITERIA_H
|
#define _SWAY_CRITERIA_H
|
||||||
|
|
||||||
#include <pcre.h>
|
#define PCRE2_CODE_UNIT_WIDTH 8
|
||||||
|
#include <pcre2.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
#include "tree/view.h"
|
#include "tree/view.h"
|
||||||
|
@ -15,13 +16,13 @@ enum criteria_type {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum pattern_type {
|
enum pattern_type {
|
||||||
PATTERN_PCRE,
|
PATTERN_PCRE2,
|
||||||
PATTERN_FOCUSED,
|
PATTERN_FOCUSED,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pattern {
|
struct pattern {
|
||||||
enum pattern_type match_type;
|
enum pattern_type match_type;
|
||||||
pcre *regex;
|
pcre2_code *regex;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct criteria {
|
struct criteria {
|
||||||
|
|
|
@ -45,7 +45,7 @@ subproject(
|
||||||
)
|
)
|
||||||
|
|
||||||
jsonc = dependency('json-c', version: '>=0.13')
|
jsonc = dependency('json-c', version: '>=0.13')
|
||||||
pcre = dependency('libpcre')
|
pcre2 = dependency('libpcre2-8')
|
||||||
wayland_server = dependency('wayland-server', version: '>=1.20.0')
|
wayland_server = dependency('wayland-server', version: '>=1.20.0')
|
||||||
wayland_client = dependency('wayland-client')
|
wayland_client = dependency('wayland-client')
|
||||||
wayland_cursor = dependency('wayland-cursor')
|
wayland_cursor = dependency('wayland-cursor')
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include <pcre.h>
|
#define PCRE2_CODE_UNIT_WIDTH 8
|
||||||
|
#include <pcre2.h>
|
||||||
#include "sway/criteria.h"
|
#include "sway/criteria.h"
|
||||||
#include "sway/tree/container.h"
|
#include "sway/tree/container.h"
|
||||||
#include "sway/config.h"
|
#include "sway/config.h"
|
||||||
|
@ -40,17 +41,19 @@ bool criteria_is_empty(struct criteria *criteria) {
|
||||||
char *error = NULL;
|
char *error = NULL;
|
||||||
|
|
||||||
// Returns error string on failure or NULL otherwise.
|
// Returns error string on failure or NULL otherwise.
|
||||||
static bool generate_regex(pcre **regex, char *value) {
|
static bool generate_regex(pcre2_code **regex, char *value) {
|
||||||
const char *reg_err;
|
int errorcode;
|
||||||
int offset;
|
PCRE2_SIZE offset;
|
||||||
|
|
||||||
*regex = pcre_compile(value, PCRE_UTF8 | PCRE_UCP, ®_err, &offset, NULL);
|
|
||||||
|
|
||||||
|
*regex = pcre2_compile((PCRE2_SPTR)value, PCRE2_ZERO_TERMINATED, PCRE2_UTF | PCRE2_UCP, &errorcode, &offset, NULL);
|
||||||
if (!*regex) {
|
if (!*regex) {
|
||||||
|
PCRE2_UCHAR buffer[256];
|
||||||
|
pcre2_get_error_message(errorcode, buffer, sizeof(buffer));
|
||||||
|
|
||||||
const char *fmt = "Regex compilation for '%s' failed: %s";
|
const char *fmt = "Regex compilation for '%s' failed: %s";
|
||||||
int len = strlen(fmt) + strlen(value) + strlen(reg_err) - 3;
|
int len = strlen(fmt) + strlen(value) + strlen((char*) buffer) - 3;
|
||||||
error = malloc(len);
|
error = malloc(len);
|
||||||
snprintf(error, len, fmt, value, reg_err);
|
snprintf(error, len, fmt, value, buffer);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +69,7 @@ static bool pattern_create(struct pattern **pattern, char *value) {
|
||||||
if (strcmp(value, "__focused__") == 0) {
|
if (strcmp(value, "__focused__") == 0) {
|
||||||
(*pattern)->match_type = PATTERN_FOCUSED;
|
(*pattern)->match_type = PATTERN_FOCUSED;
|
||||||
} else {
|
} else {
|
||||||
(*pattern)->match_type = PATTERN_PCRE;
|
(*pattern)->match_type = PATTERN_PCRE2;
|
||||||
if (!generate_regex(&(*pattern)->regex, value)) {
|
if (!generate_regex(&(*pattern)->regex, value)) {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
@ -77,7 +80,7 @@ static bool pattern_create(struct pattern **pattern, char *value) {
|
||||||
static void pattern_destroy(struct pattern *pattern) {
|
static void pattern_destroy(struct pattern *pattern) {
|
||||||
if (pattern) {
|
if (pattern) {
|
||||||
if (pattern->regex) {
|
if (pattern->regex) {
|
||||||
pcre_free(pattern->regex);
|
pcre2_code_free(pattern->regex);
|
||||||
}
|
}
|
||||||
free(pattern);
|
free(pattern);
|
||||||
}
|
}
|
||||||
|
@ -99,8 +102,11 @@ void criteria_destroy(struct criteria *criteria) {
|
||||||
free(criteria);
|
free(criteria);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int regex_cmp(const char *item, const pcre *regex) {
|
static int regex_cmp(const char *item, const pcre2_code *regex) {
|
||||||
return pcre_exec(regex, NULL, item, strlen(item), 0, 0, NULL, 0);
|
pcre2_match_data *match_data = pcre2_match_data_create_from_pattern(regex, NULL);
|
||||||
|
int result = pcre2_match(regex, (PCRE2_SPTR)item, strlen(item), 0, 0, match_data, NULL);
|
||||||
|
pcre2_match_data_free(match_data);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_XWAYLAND
|
#if HAVE_XWAYLAND
|
||||||
|
@ -192,7 +198,7 @@ static bool criteria_matches_view(struct criteria *criteria,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PATTERN_PCRE:
|
case PATTERN_PCRE2:
|
||||||
if (regex_cmp(title, criteria->title->regex) != 0) {
|
if (regex_cmp(title, criteria->title->regex) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -212,7 +218,7 @@ static bool criteria_matches_view(struct criteria *criteria,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PATTERN_PCRE:
|
case PATTERN_PCRE2:
|
||||||
if (regex_cmp(shell, criteria->shell->regex) != 0) {
|
if (regex_cmp(shell, criteria->shell->regex) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -232,7 +238,7 @@ static bool criteria_matches_view(struct criteria *criteria,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PATTERN_PCRE:
|
case PATTERN_PCRE2:
|
||||||
if (regex_cmp(app_id, criteria->app_id->regex) != 0) {
|
if (regex_cmp(app_id, criteria->app_id->regex) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -264,7 +270,7 @@ static bool criteria_matches_view(struct criteria *criteria,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PATTERN_PCRE:
|
case PATTERN_PCRE2:
|
||||||
if (regex_cmp(class, criteria->class->regex) != 0) {
|
if (regex_cmp(class, criteria->class->regex) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -284,7 +290,7 @@ static bool criteria_matches_view(struct criteria *criteria,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PATTERN_PCRE:
|
case PATTERN_PCRE2:
|
||||||
if (regex_cmp(instance, criteria->instance->regex) != 0) {
|
if (regex_cmp(instance, criteria->instance->regex) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -304,7 +310,7 @@ static bool criteria_matches_view(struct criteria *criteria,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PATTERN_PCRE:
|
case PATTERN_PCRE2:
|
||||||
if (regex_cmp(window_role, criteria->window_role->regex) != 0) {
|
if (regex_cmp(window_role, criteria->window_role->regex) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -363,7 +369,7 @@ static bool criteria_matches_view(struct criteria *criteria,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PATTERN_PCRE:
|
case PATTERN_PCRE2:
|
||||||
if (regex_cmp(ws->name, criteria->workspace->regex) != 0) {
|
if (regex_cmp(ws->name, criteria->workspace->regex) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,7 +213,7 @@ sway_deps = [
|
||||||
libudev,
|
libudev,
|
||||||
math,
|
math,
|
||||||
pango,
|
pango,
|
||||||
pcre,
|
pcre2,
|
||||||
glesv2,
|
glesv2,
|
||||||
pixman,
|
pixman,
|
||||||
server_protos,
|
server_protos,
|
||||||
|
|
Loading…
Reference in a new issue