[master] eaa1c903f Rename struct vmod_open to vmod_import and keep it around.
Poul-Henning Kamp
phk at FreeBSD.org
Tue Jun 21 13:33:06 UTC 2022
commit eaa1c903f9337ae4d4c83bc761e772bfd1021820
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Jun 21 13:32:31 2022 +0000
Rename struct vmod_open to vmod_import and keep it around.
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index cd2c3bd09..db79a5aac 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -42,11 +42,12 @@
#include "vmod_abi.h"
#include "vsb.h"
-struct vmod_open {
+struct vmod_import {
unsigned magic;
-#define VMOD_OPEN_MAGIC 0x9995b1f3
+#define VMOD_IMPORT_MAGIC 0x31803a5d
void *hdl;
const char *err;
+ const struct vmod_data *vmd;
};
struct vmod_obj {
@@ -60,14 +61,14 @@ struct vmod_obj {
static int
vcc_path_dlopen(void *priv, const char *fn)
{
- struct vmod_open *vop;
+ struct vmod_import *vim;
- CAST_OBJ_NOTNULL(vop, priv, VMOD_OPEN_MAGIC);
+ CAST_OBJ_NOTNULL(vim, priv, VMOD_IMPORT_MAGIC);
AN(fn);
- vop->hdl = dlopen(fn, RTLD_NOW | RTLD_LOCAL);
- if (vop->hdl == NULL) {
- vop->err = dlerror();
+ vim->hdl = dlopen(fn, RTLD_NOW | RTLD_LOCAL);
+ if (vim->hdl == NULL) {
+ vim->err = dlerror();
return (-1);
}
return (0);
@@ -377,9 +378,9 @@ vcc_ParseImport(struct vcc *tl)
struct symbol *msym, *vsym;
const struct vmod_data *vmd;
struct vjsn *vj;
- struct vmod_open vop[1];
+ struct vmod_import *vim;
+ const struct vmod_import *vimold;
- INIT_OBJ(vop, VMOD_OPEN_MAGIC);
t1 = tl->t;
SkipToken(tl, ID); /* "import" */
@@ -425,8 +426,11 @@ vcc_ParseImport(struct vcc *tl)
SkipToken(tl, ';');
- if (VFIL_searchpath(tl->vmod_path, vcc_path_dlopen, vop, fn, &fnpx)) {
- if (vop->err == NULL) {
+ ALLOC_OBJ(vim, VMOD_IMPORT_MAGIC);
+ AN(vim);
+
+ if (VFIL_searchpath(tl->vmod_path, vcc_path_dlopen, vim, fn, &fnpx)) {
+ if (vim->err == NULL) {
VSB_printf(tl->sb,
"Could not find VMOD %.*s\n", PF(mod));
} else {
@@ -434,22 +438,25 @@ vcc_ParseImport(struct vcc *tl)
"Could not open VMOD %.*s\n", PF(mod));
VSB_printf(tl->sb, "\tFile name: %s\n",
fnpx != NULL ? fnpx : fn);
- VSB_printf(tl->sb, "\tdlerror: %s\n", vop->err);
+ VSB_printf(tl->sb, "\tdlerror: %s\n", vim->err);
}
vcc_ErrWhere(tl, mod);
free(fnpx);
+ FREE_OBJ(vim);
return;
}
- vmd = vcc_VmodSanity(tl, vop->hdl, mod, fnpx);
+ vmd = vcc_VmodSanity(tl, vim->hdl, mod, fnpx);
if (vmd == NULL || tl->err) {
- AZ(dlclose(vop->hdl));
+ AZ(dlclose(vim->hdl));
free(fnpx);
+ FREE_OBJ(vim);
return;
}
- if (msym->extra != NULL) {
- if (!strcmp(msym->extra, vmd->file_id)) {
+ CAST_OBJ(vimold, (const void*)(msym->extra), VMOD_IMPORT_MAGIC);
+ if (vimold != NULL) {
+ if (!strcmp(vimold->vmd->file_id, vmd->file_id)) {
/* Identical import is OK */
} else {
VSB_printf(tl->sb,
@@ -457,8 +464,9 @@ vcc_ParseImport(struct vcc *tl)
PF(tmod));
vcc_ErrWhere2(tl, t1, tl->t);
}
- AZ(dlclose(vop->hdl));
+ AZ(dlclose(vim->hdl));
free(fnpx);
+ FREE_OBJ(vim);
return;
}
msym->def_b = t1;
@@ -466,14 +474,17 @@ vcc_ParseImport(struct vcc *tl)
VTAILQ_FOREACH(vsym, &tl->sym_vmods, sideways) {
assert(vsym->kind == SYM_VMOD);
- if (!strcmp(vsym->extra, vmd->file_id)) {
+ CAST_OBJ_NOTNULL(vimold, (const void*)(vsym->extra),
+ VMOD_IMPORT_MAGIC);
+ if (!strcmp(vimold->vmd->file_id, vmd->file_id)) {
/* Already loaded under different name */
msym->eval_priv = vsym->eval_priv;
msym->extra = vsym->extra;
msym->vmod_name = vsym->vmod_name;
vcc_VmodSymbols(tl, msym);
- AZ(dlclose(vop->hdl));
+ AZ(dlclose(vim->hdl));
free(fnpx);
+ FREE_OBJ(vim);
return;
}
}
@@ -516,7 +527,8 @@ vcc_ParseImport(struct vcc *tl)
XXXAZ(p);
AN(vj);
msym->eval_priv = vj;
- msym->extra = TlDup(tl, vmd->file_id);
+ vim->vmd = vmd;
+ msym->extra = (const char *)vim;
msym->vmod_name = TlDup(tl, vmd->name);
vcc_VmodSymbols(tl, msym);
More information about the varnish-commit
mailing list