#if HAVE_LANGINFO_H
# include <langinfo.h>
#endif
-#if HAVE_PCRE_H
-# include <pcre.h>
-#endif
+
#if HAVE_SHLOBJ_H
# include <Shlobj.h>
#endif
#include "charset.h"
#include "defs.h"
#include "printf.h"
-#if HAVE_PCRE_H
-# include "regsub.h"
-#endif
+#include "regexp.h"
+#include "regsub.h"
#include "signame.h"
#include "authhash.h"
#include "vector.h"
return 0;
}
-static int set_stringlist(const struct config_state *cs,
- const struct conf *whoami,
- int nvec, char **vec) {
- int n;
- struct stringlist *sl;
-
- sl = ADDRESS(cs->config, struct stringlist);
- sl->n = 0;
- for(n = 0; n < nvec; ++n) {
- sl->n++;
- sl->s = xrealloc(sl->s, (sl->n * sizeof (char *)));
- sl->s[sl->n - 1] = xstrdup(vec[n]);
- }
- return 0;
-}
-
static int set_integer(const struct config_state *cs,
const struct conf *whoami,
int nvec, char **vec) {
nvec, vec);
}
-#if HAVE_PCRE_H
static int set_namepart(const struct config_state *cs,
const struct conf *whoami,
int nvec, char **vec) {
struct namepartlist *npl = ADDRESS(cs->config, struct namepartlist);
unsigned reflags;
- const char *errstr;
- int erroffset, n;
- pcre *re;
+ regexp *re;
+ char errstr[RXCERR_LEN];
+ size_t erroffset;
+ int n;
if(nvec < 3) {
disorder_error(0, "%s:%d: namepart needs at least 3 arguments",
return -1;
}
reflags = nvec >= 5 ? regsub_flags(vec[4]) : 0;
- if(!(re = pcre_compile(vec[1],
- PCRE_UTF8
- |regsub_compile_options(reflags),
- &errstr, &erroffset, 0))) {
- disorder_error(0, "%s:%d: compiling regexp /%s/: %s (offset %d)",
+ if(!(re = regexp_compile(vec[1], regsub_compile_options(reflags),
+ errstr, sizeof(errstr), &erroffset)))
+ {
+ disorder_error(0, "%s:%d: compiling regexp /%s/: %s (offset %zu)",
cs->path, cs->line, vec[1], errstr, erroffset);
return -1;
}
const struct conf *whoami,
int nvec, char **vec) {
struct transformlist *tl = ADDRESS(cs->config, struct transformlist);
- pcre *re;
+ regexp *re;
+ char errstr[RXCERR_LEN];
unsigned reflags;
- const char *errstr;
- int erroffset;
+ size_t erroffset;
if(nvec < 3) {
disorder_error(0, "%s:%d: transform needs at least 3 arguments",
return -1;
}
reflags = (nvec >= 5 ? regsub_flags(vec[4]) : 0);
- if(!(re = pcre_compile(vec[1],
- PCRE_UTF8
- |regsub_compile_options(reflags),
- &errstr, &erroffset, 0))) {
- disorder_error(0, "%s:%d: compiling regexp /%s/: %s (offset %d)",
+ if(!(re = regexp_compile(vec[1], regsub_compile_options(reflags),
+ errstr, sizeof(errstr), &erroffset)))
+ {
+ disorder_error(0, "%s:%d: compiling regexp /%s/: %s (offset %zu)",
cs->path, cs->line, vec[1], errstr, erroffset);
return -1;
}
++tl->n;
return 0;
}
-#endif
static int set_rights(const struct config_state *cs,
const struct conf *whoami,
xfree(cll->s);
}
-#if HAVE_PCRE_H
static void free_namepartlist(struct config *c,
const struct conf *whoami) {
struct namepartlist *npl = ADDRESS(c, struct namepartlist);
for(n = 0; n < npl->n; ++n) {
np = &npl->s[n];
xfree(np->part);
- pcre_free(np->re); /* ...whatever pcre_free is set to. */
+ regexp_free(np->re);
xfree(np->res);
xfree(np->replace);
xfree(np->context);
for(n = 0; n < tl->n; ++n) {
t = &tl->t[n];
xfree(t->type);
- pcre_free(t->re); /* ...whatever pcre_free is set to. */
+ regexp_free(t->re);
xfree(t->replace);
xfree(t->context);
}
xfree(tl->t);
}
-#endif
static void free_netaddress(struct config *c,
const struct conf *whoami) {
type_collections = { set_collections, free_collectionlist },
type_boolean = { set_boolean, free_none },
type_string = { set_string, free_string },
- type_stringlist = { set_stringlist, free_stringlist },
type_integer = { set_integer, free_none },
type_stringlist_accum = { set_stringlist_accum, free_stringlistlist },
type_string_accum = { set_string_accum, free_stringlist },
type_sample_format = { set_sample_format, free_none },
-#if HAVE_PCRE_H
type_namepart = { set_namepart, free_namepartlist },
type_transform = { set_transform, free_transformlist },
-#endif
type_netaddress = { set_netaddress, free_netaddress },
type_rights = { set_rights, free_string };
{ C(mount_rescan), &type_boolean, validate_any },
{ C(multicast_loop), &type_boolean, validate_any },
{ C(multicast_ttl), &type_integer, validate_non_negative },
-#if HAVE_PCRE_H
{ C(namepart), &type_namepart, validate_any },
-#endif
{ C(new_bias), &type_integer, validate_positive },
{ C(new_bias_age), &type_integer, validate_positive },
{ C(new_max), &type_integer, validate_positive },
{ C(stopword), &type_string_accum, validate_any },
{ C(templates), &type_string_accum, validate_isdir },
{ C(tracklength), &type_stringlist_accum, validate_tracklength },
-#if HAVE_PCRE_H
{ C(transform), &type_transform, validate_any },
-#endif
{ C(url), &type_string, validate_url },
#if !_WIN32
{ C(user), &type_string, validate_isauser },
static void config_postdefaults(struct config *c,
int server) {
struct config_state cs;
-#if HAVE_PCRE_H
const struct conf *whoami;
int n;
-#endif
-#if HAVE_PCRE_H
static const char *namepart[][4] = {
{ "title", "/([0-9]+ *[-:]? *)?([^/]+)\\.[a-zA-Z0-9]+$", "$2", "display" },
{ "title", "/([^/]+)\\.[a-zA-Z0-9]+$", "$1", "sort" },
{ "dir", "[[:punct:]]", "", "sort", "g", }
};
#define NTRANSFORM (int)(sizeof transform / sizeof *transform)
-#endif
cs.path = "<internal>";
cs.line = 0;
cs.config = c;
-#if HAVE_PCRE_H
if(!c->namepart.n) {
whoami = find("namepart");
for(n = 0; n < NNAMEPART; ++n)
for(n = 0; n < NTRANSFORM; ++n)
set_transform(&cs, whoami, 5, (char **)transform[n]);
}
-#endif
if(!c->api) {
if(c->speaker_command)
c->api = xstrdup("command");
disorder_error(0, "'nice_server' cannot be changed without a restart");
/* ...but we accept the new config anyway */
}
-#if HAVE_PCRE_H
if(namepartlist_compare(&c->namepart, &oldconfig->namepart)) {
disorder_error(0, "'namepart' settings cannot be changed without a restart");
failed = 1;
}
-#endif
if(stringlist_compare(&c->stopword, &oldconfig->stopword)) {
disorder_error(0, "'stopword' settings cannot be changed without a restart");
failed = 1;
return 0;
}
-#if HAVE_PCRE_H
/** @brief Order two namepart definitions
* @param a First namepart definition
* @param b Second namepart definition
else
return 0;
}
-#endif
/** @brief Verify configuration table.
* @return The number of problems found