introduce namespaces
diff --git a/libasn1fix/asn1fix_export.c b/libasn1fix/asn1fix_export.c
index b570925..ee39afb 100644
--- a/libasn1fix/asn1fix_export.c
+++ b/libasn1fix/asn1fix_export.c
@@ -3,29 +3,69 @@
extern arg_t a1f_replace_me_with_proper_interface_arg;
+static asn1p_t *asn1f_ssn_asn_;
+
+static void
+_add_standard_namespaces(asn1_namespace_t *ns) {
+ asn1p_oid_t *uioc_oid;
+ asn1p_oid_arc_t arcs[] = {{1, "iso"}, {3, "org"},
+ {6, "dod"}, {1, "internet"},
+ {4, "private"}, {1, "enterprise"},
+ {9363, "spelio"}, {1, "software"},
+ {5, "asn1c"}, {3, "standard-modules"},
+ {0, "auto-imported"}, {1, 0}};
+
+ uioc_oid = asn1p_oid_construct(arcs, sizeof(arcs) / sizeof(arcs[0]));
+
+ asn1p_module_t *module = asn1f_lookup_module_ex(
+ asn1f_ssn_asn_, "ASN1C-UsefulInformationObjectClasses", uioc_oid);
+ asn1p_oid_free(uioc_oid);
+
+ if(module) {
+ asn1_namespace_add_module(ns, module, 0);
+ }
+}
+
+void
+asn1f_use_standard_namespaces(asn1p_t *asn) {
+ asn1f_ssn_asn_ = asn;
+ asn1_namespace_add_standard_namespaces_callback(_add_standard_namespaces);
+}
+
+asn1p_module_t *
+asn1f_lookup_module_ex(asn1p_t *asn, const char *module_name,
+ const asn1p_oid_t *oid) {
+ arg_t arg;
+
+ memset(&arg, 0, sizeof(arg));
+
+ arg.asn = asn;
+ arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+ arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+ return asn1f_lookup_module(&arg, module_name, oid);
+}
asn1p_expr_t *
-asn1f_lookup_symbol_ex(
- asn1p_t *asn,
- asn1p_expr_t *expr,
- const asn1p_ref_t *ref) {
- arg_t arg;
+asn1f_lookup_symbol_ex(asn1p_t *asn, asn1_namespace_t *ns, asn1p_expr_t *expr,
+ const asn1p_ref_t *ref) {
+ arg_t arg;
- memset(&arg, 0, sizeof(arg));
+ memset(&arg, 0, sizeof(arg));
- arg.asn = asn;
- arg.mod = expr->module;
- arg.expr = expr;
- arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
- arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+ arg.asn = asn;
+ arg.ns = ns;
+ arg.mod = expr->module;
+ arg.expr = expr;
+ arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+ arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
-
- return asn1f_lookup_symbol(&arg, expr->module, expr->rhs_pspecs, ref);
+ return asn1f_lookup_symbol(&arg, expr->rhs_pspecs, ref);
}
asn1p_expr_t *
asn1f_class_access_ex(asn1p_t *asn,
asn1p_module_t *mod,
+ asn1_namespace_t *ns,
asn1p_expr_t *expr,
asn1p_expr_t *rhs_pspecs,
const asn1p_ref_t *ref) {
@@ -35,26 +75,29 @@
arg.asn = asn;
arg.mod = mod;
+ arg.ns = ns;
arg.expr = expr;
arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
- return asn1f_class_access(&arg, mod, rhs_pspecs, ref);
+ return asn1f_class_access(&arg, rhs_pspecs, ref);
}
asn1p_expr_t *
-asn1f_find_terminal_type_ex(asn1p_t *asn, asn1p_expr_t *expr) {
- arg_t arg;
+asn1f_find_terminal_type_ex(asn1p_t *asn, asn1_namespace_t *ns,
+ asn1p_expr_t *expr) {
+ arg_t arg;
- memset(&arg, 0, sizeof(arg));
+ memset(&arg, 0, sizeof(arg));
- arg.asn = asn;
- arg.mod = expr->module;
- arg.expr = expr;
- arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
- arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+ arg.asn = asn;
+ arg.ns = ns;
+ arg.mod = expr->module;
+ arg.expr = expr;
+ arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+ arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
- return asn1f_find_terminal_type(&arg, expr);
+ return asn1f_find_terminal_type(&arg, expr);
}
asn1p_expr_t *