1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-11-23 06:02:48 +02:00

b2/: regexec puts first substring into pmatch[1] and not pmatch[0]

Also clean up the hard-coded number of matches.
This commit is contained in:
Werner Almesberger 2012-05-22 13:46:44 -03:00
parent 3d2eca34ff
commit 148d5e85ac
2 changed files with 10 additions and 7 deletions

View File

@ -26,7 +26,7 @@
#include "subex.h" #include "subex.h"
#define FIELDS 10 #define FIELDS 10 /* fields in KiCad schematics */
static const char *fn = NULL, *f[FIELDS]; static const char *fn = NULL, *f[FIELDS];
@ -116,11 +116,11 @@ static char *compose(const struct chunk *c,
append(&res, &res_len, s); append(&res, &res_len, s);
break; break;
} }
if (match[n-1].rm_so == -1) if (match[n].rm_so == -1)
break; break;
len = match[n-1].rm_eo-match[n-1].rm_so; len = match[n].rm_eo-match[n].rm_so;
tmp = alloc_size(len); tmp = alloc_size(len);
memcpy(tmp, s+match[n-1].rm_so, len); memcpy(tmp, s+match[n].rm_so, len);
tmp[len] = 0; tmp[len] = 0;
tmp2 = canonicalize(tmp, units ? units[n-1] : 0); tmp2 = canonicalize(tmp, units ? units[n-1] : 0);
append(&res, &res_len, tmp2); append(&res, &res_len, tmp2);
@ -160,7 +160,7 @@ static int do_match_1(const char *var, const regex_t *re,
*val = var_lookup(in, var); *val = var_lookup(in, var);
if (!*val) if (!*val)
return -1; return -1;
return regexec(re, *val, 10, match, 0); return regexec(re, *val, NMATCH, match, 0);
} }
@ -186,7 +186,7 @@ static const struct subst *recurse_sub(const struct subst *sub,
const regmatch_t *match, const char *units, struct param **out) const regmatch_t *match, const char *units, struct param **out)
{ {
const struct subst *jump; const struct subst *jump;
regmatch_t m_tmp[10]; regmatch_t m_tmp[NMATCH];
const char *var, *val; const char *var, *val;
char *tmp; char *tmp;

View File

@ -20,6 +20,9 @@
#include "relop.h" #include "relop.h"
#define NMATCH 10 /* $0 (not used), $1...$9 */
enum chunk_type { enum chunk_type {
ct_string, ct_string,
ct_var, ct_var,
@ -52,7 +55,7 @@ struct subst {
const char *src; const char *src;
regex_t re; regex_t re;
struct subst *block; struct subst *block;
char units[10]; char units[NMATCH-1];
int parens; /* number of parentheses */ int parens; /* number of parentheses */
} match; } match;
struct { struct {