Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
asn1c
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
asn1c
Commits
a9532f4d
Commit
a9532f4d
authored
Sep 17, 2006
by
Lev Walkin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
moved -DASN_PDU_COLLECTION into compiler
parent
cc7c94ef
Changes
21
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1402 additions
and
1321 deletions
+1402
-1321
examples/sample.makefile.regen
examples/sample.makefile.regen
+4
-11
examples/sample.source.RRC/Makefile
examples/sample.source.RRC/Makefile
+1
-1
libasn1compiler/asn1c_save.c
libasn1compiler/asn1c_save.c
+2
-1
libasn1fix/asn1fix_class.c
libasn1fix/asn1fix_class.c
+1
-1
libasn1fix/asn1fix_constr.c
libasn1fix/asn1fix_constr.c
+1
-1
libasn1fix/asn1fix_constraint_compat.c
libasn1fix/asn1fix_constraint_compat.c
+8
-0
libasn1fix/asn1fix_cws.c
libasn1fix/asn1fix_cws.c
+1
-1
libasn1fix/asn1fix_misc.c
libasn1fix/asn1fix_misc.c
+2
-0
libasn1parser/asn1p_constr.c
libasn1parser/asn1p_constr.c
+2
-0
libasn1parser/asn1p_constr.h
libasn1parser/asn1p_constr.h
+2
-1
libasn1parser/asn1p_expr.c
libasn1parser/asn1p_expr.c
+4
-4
libasn1parser/asn1p_expr.h
libasn1parser/asn1p_expr.h
+1
-1
libasn1parser/asn1p_module.c
libasn1parser/asn1p_module.c
+1
-1
libasn1parser/asn1p_module.h
libasn1parser/asn1p_module.h
+15
-11
libasn1parser/asn1p_value.c
libasn1parser/asn1p_value.c
+15
-0
libasn1parser/asn1p_value.h
libasn1parser/asn1p_value.h
+4
-0
libasn1parser/asn1p_y.c
libasn1parser/asn1p_y.c
+1214
-1181
libasn1parser/asn1p_y.h
libasn1parser/asn1p_y.h
+1
-1
libasn1parser/asn1p_y.y
libasn1parser/asn1p_y.y
+105
-72
libasn1parser/asn1parser.c
libasn1parser/asn1parser.c
+1
-32
libasn1print/asn1print.c
libasn1print/asn1print.c
+17
-1
No files found.
examples/sample.makefile.regen
View file @
a9532f4d
...
@@ -23,8 +23,6 @@ if test -z "$ASN1PDU" \
...
@@ -23,8 +23,6 @@ if test -z "$ASN1PDU" \
exit
exit
fi
fi
ASN1DEFPDU
=
`
echo
"
$ASN1PDU
"
|
tr
- _
`
../../asn1c/asn1c
-S
../../skeletons
${
ASN1CMDOPTS
}
${
ASN1MODULES
}
||
exit
$?
../../asn1c/asn1c
-S
../../skeletons
${
ASN1CMDOPTS
}
${
ASN1MODULES
}
||
exit
$?
if
test
!
-f
Makefile.am.sample
;
then
if
test
!
-f
Makefile.am.sample
;
then
...
@@ -32,20 +30,15 @@ if test ! -f Makefile.am.sample ; then
...
@@ -32,20 +30,15 @@ if test ! -f Makefile.am.sample ; then
exit
1
exit
1
fi
fi
CFLAGS
=
""
ASN1DEFPDU
=
`
echo
"
$ASN1PDU
"
|
tr
- _
`
CFLAGS
=
"-DPDU=
${
ASN1DEFPDU
}
"
if
test
-f
config.h
;
then
if
test
-f
config.h
;
then
CFLAGS
=
"
$CFLAGS
-DHAVE_CONFIG_H"
CFLAGS
=
"-DHAVE_CONFIG_H
$CFLAGS
"
fi
FIXEDPDU
=
`
echo
"[
$ASN1CMDOPTS
]"
|
sed
-e
"s/.*-pdu=auto.*//"
`
if
test
!
"
$FIXEDPDU
"
;
then
CFLAGS
=
"
$CFLAGS
-DASN_PDU_COLLECTION"
fi
fi
set
-x
set
-x
cat
Makefile.am.sample
\
cat
Makefile.am.sample
\
|
sed
-e
"s/^CFLAGS
.*/CFLAGS +=
$CFLAGS
-DPDU=
${
ASN1DEFPDU
}
-I./"
\
|
sed
-e
"s/^CFLAGS
+= /CFLAGS +=
${
CFLAGS
}
/"
\
|
sed
-e
"s/^all: /all:
${
ASN1PDU
}
.c /"
\
|
sed
-e
"s/^all: /all:
${
ASN1PDU
}
.c /"
\
|
sed
-e
"s/progname/
${
PROGNAME
}
/"
\
|
sed
-e
"s/progname/
${
PROGNAME
}
/"
\
>
Makefile.
$$
>
Makefile.
$$
...
...
examples/sample.source.RRC/Makefile
View file @
a9532f4d
...
@@ -4740,7 +4740,7 @@ libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
...
@@ -4740,7 +4740,7 @@ libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
# This file may be used as an input for make(3)
# This file may be used as an input for make(3)
# Remove the lines below to convert it into a pure .am file
# Remove the lines below to convert it into a pure .am file
TARGET
=
rrc-dump
TARGET
=
rrc-dump
CFLAGS
+=
-DHAVE_CONFIG_H
-D
ASN_PDU_COLLECTION
-DPDU
=
DL_DCCH_Message
-I
.
CFLAGS
+=
-DHAVE_CONFIG_H
-D
PDU
=
DL_DCCH_Message
-DASN_PDU_COLLECTION
-I
.
OBJS
=
${ASN_MODULE_SOURCES:.c=.o}
${ASN_CONVERTER_SOURCES:.c=.o}
OBJS
=
${ASN_MODULE_SOURCES:.c=.o}
${ASN_CONVERTER_SOURCES:.c=.o}
all
:
DL-DCCH-Message.c $(TARGET)
all
:
DL-DCCH-Message.c $(TARGET)
...
...
libasn1compiler/asn1c_save.c
View file @
a9532f4d
...
@@ -135,7 +135,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
...
@@ -135,7 +135,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
"# This file may be used as an input for make(3)
\n
"
"# This file may be used as an input for make(3)
\n
"
"# Remove the lines below to convert it into a pure .am file
\n
"
"# Remove the lines below to convert it into a pure .am file
\n
"
"TARGET = progname
\n
"
"TARGET = progname
\n
"
"CFLAGS += -I.
\n
"
"CFLAGS +=
%s
-I.
\n
"
"OBJS=${ASN_MODULE_SOURCES:.c=.o}"
"OBJS=${ASN_MODULE_SOURCES:.c=.o}"
" ${ASN_CONVERTER_SOURCES:.c=.o}
\n
"
" ${ASN_CONVERTER_SOURCES:.c=.o}
\n
"
"
\n
all: $(TARGET)
\n
"
"
\n
all: $(TARGET)
\n
"
...
@@ -150,6 +150,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
...
@@ -150,6 +150,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
"
\n\t
rm -f $(OBJS)
\n
"
"
\n\t
rm -f $(OBJS)
\n
"
"
\n
regen: regenerate-from-asn1-source
\n
"
"
\n
regen: regenerate-from-asn1-source
\n
"
"
\n
regenerate-from-asn1-source:
\n\t
"
"
\n
regenerate-from-asn1-source:
\n\t
"
,
(
arg
->
flags
&
A1C_PDU_AUTO
)
?
" -DASN_PDU_COLLECTION"
:
""
);
);
for
(
i
=
0
;
i
<
argc
;
i
++
)
for
(
i
=
0
;
i
<
argc
;
i
++
)
...
...
libasn1fix/asn1fix_class.c
View file @
a9532f4d
...
@@ -65,7 +65,7 @@ asn1f_class_access(arg_t *arg, asn1p_module_t *mod, asn1p_expr_t *rhs_pspecs, as
...
@@ -65,7 +65,7 @@ asn1f_class_access(arg_t *arg, asn1p_module_t *mod, asn1p_expr_t *rhs_pspecs, as
if
(
TQ_FIRST
(
&
classfield
->
members
))
{
if
(
TQ_FIRST
(
&
classfield
->
members
))
{
/* Already have something */
/* Already have something */
}
else
{
}
else
{
expr
=
asn1p_expr_new
(
classfield
->
_lineno
);
expr
=
asn1p_expr_new
(
classfield
->
_lineno
,
mod
);
expr
->
expr_type
=
ASN_TYPE_ANY
;
expr
->
expr_type
=
ASN_TYPE_ANY
;
expr
->
meta_type
=
AMT_TYPE
;
expr
->
meta_type
=
AMT_TYPE
;
asn1p_expr_add
(
classfield
,
expr
);
asn1p_expr_add
(
classfield
,
expr
);
...
...
libasn1fix/asn1fix_constr.c
View file @
a9532f4d
...
@@ -152,7 +152,7 @@ asn1f_fix_constr_ext(arg_t *arg) {
...
@@ -152,7 +152,7 @@ asn1f_fix_constr_ext(arg_t *arg) {
if
(
arg
->
mod
->
module_flags
&
MSF_EXTENSIBILITY_IMPLIED
if
(
arg
->
mod
->
module_flags
&
MSF_EXTENSIBILITY_IMPLIED
&&
ext_count
==
0
)
{
&&
ext_count
==
0
)
{
v
=
asn1p_expr_new
(
0
);
v
=
asn1p_expr_new
(
0
,
arg
->
mod
);
if
(
v
)
{
if
(
v
)
{
v
->
Identifier
=
strdup
(
"..."
);
v
->
Identifier
=
strdup
(
"..."
);
v
->
expr_type
=
A1TC_EXTENSIBLE
;
v
->
expr_type
=
A1TC_EXTENSIBLE
;
...
...
libasn1fix/asn1fix_constraint_compat.c
View file @
a9532f4d
...
@@ -87,6 +87,14 @@ asn1constraint_compatible(asn1p_expr_type_e expr_type,
...
@@ -87,6 +87,14 @@ asn1constraint_compatible(asn1p_expr_type_e expr_type,
return
0
;
return
0
;
case
ACT_CT_CTDBY
:
case
ACT_CT_CTDBY
:
return
1
;
return
1
;
case
ACT_CT_CTNG
:
/* X.682, #11 */
switch
(
expr_type
)
{
case
ASN_BASIC_OCTET_STRING
:
case
ASN_BASIC_BIT_STRING
:
return
1
;
default:
return
0
;
}
case
ACT_CA_SET
:
case
ACT_CA_SET
:
case
ACT_CA_CRC
:
case
ACT_CA_CRC
:
case
ACT_CA_CSV
:
case
ACT_CA_CSV
:
...
...
libasn1fix/asn1fix_cws.c
View file @
a9532f4d
...
@@ -192,7 +192,7 @@ _asn1f_assign_cell_value(arg_t *arg, struct asn1p_ioc_row_s *row, struct asn1p_i
...
@@ -192,7 +192,7 @@ _asn1f_assign_cell_value(arg_t *arg, struct asn1p_ioc_row_s *row, struct asn1p_i
FATAL
(
"Value %s at line %d is too large for this compiler! Contact the asn1c author.
\n
"
,
p
,
arg
->
expr
->
_lineno
);
FATAL
(
"Value %s at line %d is too large for this compiler! Contact the asn1c author.
\n
"
,
p
,
arg
->
expr
->
_lineno
);
return
-
1
;
return
-
1
;
}
}
expr
=
asn1p_expr_new
(
arg
->
expr
->
_lineno
);
expr
=
asn1p_expr_new
(
arg
->
expr
->
_lineno
,
arg
->
expr
->
module
);
expr
->
Identifier
=
p
;
expr
->
Identifier
=
p
;
expr
->
meta_type
=
AMT_VALUE
;
expr
->
meta_type
=
AMT_VALUE
;
expr
->
expr_type
=
ASN_BASIC_INTEGER
;
expr
->
expr_type
=
ASN_BASIC_INTEGER
;
...
...
libasn1fix/asn1fix_misc.c
View file @
a9532f4d
...
@@ -81,6 +81,8 @@ asn1f_printable_value(asn1p_value_t *v) {
...
@@ -81,6 +81,8 @@ asn1f_printable_value(asn1p_value_t *v) {
/* Buffer is guaranteed to be null-terminated */
/* Buffer is guaranteed to be null-terminated */
assert
(
v
->
value
.
string
.
buf
[
v
->
value
.
string
.
size
]
==
'\0'
);
assert
(
v
->
value
.
string
.
buf
[
v
->
value
.
string
.
size
]
==
'\0'
);
return
(
char
*
)
v
->
value
.
string
.
buf
;
return
(
char
*
)
v
->
value
.
string
.
buf
;
case
ATV_TYPE
:
return
"<Type>"
;
case
ATV_BITVECTOR
:
case
ATV_BITVECTOR
:
{
{
uint8_t
*
bitvector
;
uint8_t
*
bitvector
;
...
...
libasn1parser/asn1p_constr.c
View file @
a9532f4d
...
@@ -169,6 +169,8 @@ asn1p_constraint_type2str(enum asn1p_constraint_type_e type) {
...
@@ -169,6 +169,8 @@ asn1p_constraint_type2str(enum asn1p_constraint_type_e type) {
return
"MultipleTypeConstraints"
;
return
"MultipleTypeConstraints"
;
case
ACT_CT_CTDBY
:
case
ACT_CT_CTDBY
:
return
"UserDefinedConstraint"
;
return
"UserDefinedConstraint"
;
case
ACT_CT_CTNG
:
return
"ContentsConstraint"
;
case
ACT_CA_SET
:
case
ACT_CA_SET
:
return
"SET"
;
return
"SET"
;
case
ACT_CA_CRC
:
case
ACT_CA_CRC
:
...
...
libasn1parser/asn1p_constr.h
View file @
a9532f4d
...
@@ -26,11 +26,12 @@ typedef struct asn1p_constraint_s {
...
@@ -26,11 +26,12 @@ typedef struct asn1p_constraint_s {
ACT_CT_WCOMP
,
/* WITH COMPONENT */
ACT_CT_WCOMP
,
/* WITH COMPONENT */
ACT_CT_WCOMPS
,
/* WITH COMPONENTS */
ACT_CT_WCOMPS
,
/* WITH COMPONENTS */
ACT_CT_CTDBY
,
/* CONSTRAINED BY */
ACT_CT_CTDBY
,
/* CONSTRAINED BY */
ACT_CT_CTNG
,
/* CONTAINING Type */
/*
/*
* Arrays of constraints.
* Arrays of constraints.
*/
*/
ACT_CA_SET
,
/* A set of constraints: (c1)(c2) */
ACT_CA_SET
,
/* A set of constraints: (c1)(c2) */
ACT_CA_CRC
,
/* Comp. relation c-t: ({a}
)(
{@b}) */
ACT_CA_CRC
,
/* Comp. relation c-t: ({a}{@b}) */
ACT_CA_CSV
,
/* Comma-separated constraints array */
ACT_CA_CSV
,
/* Comma-separated constraints array */
ACT_CA_UNI
,
/* UNION (|) */
ACT_CA_UNI
,
/* UNION (|) */
ACT_CA_INT
,
/* INTERSECTION (^) */
ACT_CA_INT
,
/* INTERSECTION (^) */
...
...
libasn1parser/asn1p_expr.c
View file @
a9532f4d
...
@@ -13,13 +13,14 @@ static asn1p_value_t *value_resolver(asn1p_value_t *, void *arg);
...
@@ -13,13 +13,14 @@ static asn1p_value_t *value_resolver(asn1p_value_t *, void *arg);
* Construct a new empty types collection.
* Construct a new empty types collection.
*/
*/
asn1p_expr_t
*
asn1p_expr_t
*
asn1p_expr_new
(
int
_lineno
)
{
asn1p_expr_new
(
int
_lineno
,
asn1p_module_t
*
mod
)
{
asn1p_expr_t
*
expr
;
asn1p_expr_t
*
expr
;
expr
=
calloc
(
1
,
sizeof
*
expr
);
expr
=
calloc
(
1
,
sizeof
*
expr
);
if
(
expr
)
{
if
(
expr
)
{
TQ_INIT
(
&
(
expr
->
members
));
TQ_INIT
(
&
(
expr
->
members
));
expr
->
spec_index
=
-
1
;
expr
->
spec_index
=
-
1
;
expr
->
module
=
mod
;
expr
->
_lineno
=
_lineno
;
expr
->
_lineno
=
_lineno
;
}
}
...
@@ -96,7 +97,7 @@ asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*r
...
@@ -96,7 +97,7 @@ asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*r
return
NULL
;
/* Hard error */
return
NULL
;
/* Hard error */
}
}
}
}
if
(
!
clone
)
clone
=
asn1p_expr_new
(
expr
->
_lineno
);
if
(
!
clone
)
clone
=
asn1p_expr_new
(
expr
->
_lineno
,
expr
->
module
);
if
(
!
clone
)
return
NULL
;
if
(
!
clone
)
return
NULL
;
/*
/*
...
@@ -106,7 +107,6 @@ asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*r
...
@@ -106,7 +107,6 @@ asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*r
CLCOPY
(
expr_type
);
CLCOPY
(
expr_type
);
CLCOPY
(
tag
);
CLCOPY
(
tag
);
CLCOPY
(
marker
.
flags
);
/* OPTIONAL/DEFAULT */
CLCOPY
(
marker
.
flags
);
/* OPTIONAL/DEFAULT */
CLCOPY
(
module
);
CLCOPY
(
_mark
);
CLCOPY
(
_mark
);
clone
->
data
=
0
;
/* Do not clone this */
clone
->
data
=
0
;
/* Do not clone this */
...
@@ -165,7 +165,7 @@ value_resolver(asn1p_value_t *value, void *rarg) {
...
@@ -165,7 +165,7 @@ value_resolver(asn1p_value_t *value, void *rarg) {
}
}
ref
=
value
->
value
.
reference
;
ref
=
value
->
value
.
reference
;
tmpexpr
=
asn1p_expr_new
(
ref
->
_lineno
);
tmpexpr
=
asn1p_expr_new
(
ref
->
_lineno
,
0
);
tmpexpr
->
meta_type
=
AMT_TYPEREF
;
tmpexpr
->
meta_type
=
AMT_TYPEREF
;
tmpexpr
->
expr_type
=
A1TC_REFERENCE
;
tmpexpr
->
expr_type
=
A1TC_REFERENCE
;
tmpexpr
->
reference
=
ref
;
tmpexpr
->
reference
=
ref
;
...
...
libasn1parser/asn1p_expr.h
View file @
a9532f4d
...
@@ -271,7 +271,7 @@ typedef struct asn1p_expr_s {
...
@@ -271,7 +271,7 @@ typedef struct asn1p_expr_s {
/*
/*
* Constructor and destructor.
* Constructor and destructor.
*/
*/
asn1p_expr_t
*
asn1p_expr_new
(
int
_lineno
);
asn1p_expr_t
*
asn1p_expr_new
(
int
_lineno
,
struct
asn1p_module_s
*
);
asn1p_expr_t
*
asn1p_expr_clone
(
asn1p_expr_t
*
,
int
skip_extensions
);
asn1p_expr_t
*
asn1p_expr_clone
(
asn1p_expr_t
*
,
int
skip_extensions
);
asn1p_expr_t
*
asn1p_expr_clone_with_resolver
(
asn1p_expr_t
*
,
asn1p_expr_t
*
asn1p_expr_clone_with_resolver
(
asn1p_expr_t
*
,
asn1p_expr_t
*
(
*
resolver
)(
asn1p_expr_t
*
to_resolve
,
void
*
resolver_arg
),
asn1p_expr_t
*
(
*
resolver
)(
asn1p_expr_t
*
to_resolve
,
void
*
resolver_arg
),
...
...
libasn1parser/asn1p_module.c
View file @
a9532f4d
...
@@ -12,8 +12,8 @@ asn1p_module_new() {
...
@@ -12,8 +12,8 @@ asn1p_module_new() {
mod
=
calloc
(
1
,
sizeof
*
mod
);
mod
=
calloc
(
1
,
sizeof
*
mod
);
if
(
mod
)
{
if
(
mod
)
{
TQ_INIT
(
&
(
mod
->
imports
));
TQ_INIT
(
&
(
mod
->
exports
));
TQ_INIT
(
&
(
mod
->
exports
));
TQ_INIT
(
&
(
mod
->
imports
));
TQ_INIT
(
&
(
mod
->
members
));
TQ_INIT
(
&
(
mod
->
members
));
}
}
return
mod
;
return
mod
;
...
...
libasn1parser/asn1p_module.h
View file @
a9532f4d
...
@@ -4,6 +4,18 @@
...
@@ -4,6 +4,18 @@
#ifndef ASN1_PARSER_MODULE_H
#ifndef ASN1_PARSER_MODULE_H
#define ASN1_PARSER_MODULE_H
#define ASN1_PARSER_MODULE_H
struct
asn1p_module_s
;
/*
* A simple container for several modules.
*/
typedef
struct
asn1p_s
{
TQ_HEAD
(
struct
asn1p_module_s
)
modules
;
}
asn1p_t
;
asn1p_t
*
asn1p_new
(
void
);
void
asn1p_delete
(
asn1p_t
*
asn
);
/*
/*
* Flags specific to a module.
* Flags specific to a module.
*/
*/
...
@@ -71,6 +83,9 @@ typedef struct asn1p_module_s {
...
@@ -71,6 +83,9 @@ typedef struct asn1p_module_s {
TQ_ENTRY
(
struct
asn1p_module_s
)
TQ_ENTRY
(
struct
asn1p_module_s
)
mod_next
;
mod_next
;
/* All modules */
asn1p_t
*
asn1p
;
/*
/*
* Internally useful properties.
* Internally useful properties.
*/
*/
...
@@ -85,15 +100,4 @@ typedef struct asn1p_module_s {
...
@@ -85,15 +100,4 @@ typedef struct asn1p_module_s {
asn1p_module_t
*
asn1p_module_new
(
void
);
asn1p_module_t
*
asn1p_module_new
(
void
);
void
asn1p_module_free
(
asn1p_module_t
*
mod
);
void
asn1p_module_free
(
asn1p_module_t
*
mod
);
/*
* No more than a container for several modules.
*/
typedef
struct
asn1p_s
{
TQ_HEAD
(
struct
asn1p_module_s
)
modules
;
}
asn1p_t
;
asn1p_t
*
asn1p_new
(
void
);
void
asn1p_delete
(
asn1p_t
*
asn
);
#endif
/* ASN1_PARSER_MODULE_H */
#endif
/* ASN1_PARSER_MODULE_H */
libasn1parser/asn1p_value.c
View file @
a9532f4d
...
@@ -132,6 +132,16 @@ asn1p_value_fromint(asn1c_integer_t i) {
...
@@ -132,6 +132,16 @@ asn1p_value_fromint(asn1c_integer_t i) {
return
v
;
return
v
;
}
}
asn1p_value_t
*
asn1p_value_fromtype
(
asn1p_expr_t
*
expr
)
{
asn1p_value_t
*
v
=
calloc
(
1
,
sizeof
*
v
);
if
(
v
)
{
v
->
value
.
v_type
=
expr
;
v
->
type
=
ATV_TYPE
;
}
return
v
;
}
asn1p_value_t
*
asn1p_value_t
*
asn1p_value_clone
(
asn1p_value_t
*
v
)
{
asn1p_value_clone
(
asn1p_value_t
*
v
)
{
return
asn1p_value_clone_with_resolver
(
v
,
0
,
0
);
return
asn1p_value_clone_with_resolver
(
v
,
0
,
0
);
...
@@ -149,6 +159,8 @@ asn1p_value_clone_with_resolver(asn1p_value_t *v,
...
@@ -149,6 +159,8 @@ asn1p_value_clone_with_resolver(asn1p_value_t *v,
return
calloc
(
1
,
sizeof
(
*
clone
));
return
calloc
(
1
,
sizeof
(
*
clone
));
case
ATV_REAL
:
case
ATV_REAL
:
return
asn1p_value_fromdouble
(
v
->
value
.
v_double
);
return
asn1p_value_fromdouble
(
v
->
value
.
v_double
);
case
ATV_TYPE
:
return
asn1p_value_fromtype
(
v
->
value
.
v_type
);
case
ATV_INTEGER
:
case
ATV_INTEGER
:
case
ATV_MIN
:
case
ATV_MIN
:
case
ATV_MAX
:
case
ATV_MAX
:
...
@@ -213,6 +225,9 @@ asn1p_value_free(asn1p_value_t *v) {
...
@@ -213,6 +225,9 @@ asn1p_value_free(asn1p_value_t *v) {
case
ATV_NOVALUE
:
case
ATV_NOVALUE
:
case
ATV_NULL
:
case
ATV_NULL
:
break
;
break
;
case
ATV_TYPE
:
asn1p_expr_free
(
v
->
value
.
v_type
);
break
;
case
ATV_REAL
:
case
ATV_REAL
:
case
ATV_INTEGER
:
case
ATV_INTEGER
:
case
ATV_MIN
:
case
ATV_MIN
:
...
...
libasn1parser/asn1p_value.h
View file @
a9532f4d
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#define ASN1_PARSER_VALUE_H
#define ASN1_PARSER_VALUE_H
struct
asn1p_constraint_s
;
/* Forward declaration */
struct
asn1p_constraint_s
;
/* Forward declaration */
struct
asn1p_expr_s
;
/*
/*
* A wrapper around various kinds of values.
* A wrapper around various kinds of values.
...
@@ -15,6 +16,7 @@ typedef struct asn1p_value_s {
...
@@ -15,6 +16,7 @@ typedef struct asn1p_value_s {
*/
*/
enum
{
enum
{
ATV_NOVALUE
,
ATV_NOVALUE
,
ATV_TYPE
,
/* A type (as in CONTAINING Type) */
ATV_NULL
,
/* A "NULL" value of type NULL. */
ATV_NULL
,
/* A "NULL" value of type NULL. */
ATV_REAL
,
/* A constant floating-point value */
ATV_REAL
,
/* A constant floating-point value */
ATV_INTEGER
,
/* An integer constant */
ATV_INTEGER
,
/* An integer constant */
...
@@ -34,6 +36,7 @@ typedef struct asn1p_value_s {
...
@@ -34,6 +36,7 @@ typedef struct asn1p_value_s {
union
{
union
{
struct
asn1p_constraint_s
*
constraint
;
/* ValueSet */
struct
asn1p_constraint_s
*
constraint
;
/* ValueSet */
struct
asn1p_expr_s
*
v_type
;
/* Type */
asn1p_ref_t
*
reference
;
asn1p_ref_t
*
reference
;
asn1c_integer_t
v_integer
;
asn1c_integer_t
v_integer
;
double
v_double
;
double
v_double
;
...
@@ -68,6 +71,7 @@ asn1p_value_t *asn1p_value_frombits(uint8_t *bits, int size_in_bits, int dc);
...
@@ -68,6 +71,7 @@ asn1p_value_t *asn1p_value_frombits(uint8_t *bits, int size_in_bits, int dc);
asn1p_value_t
*
asn1p_value_frombuf
(
char
*
buffer
,
int
size
,
int
do_copy
);
asn1p_value_t
*
asn1p_value_frombuf
(
char
*
buffer
,
int
size
,
int
do_copy
);
asn1p_value_t
*
asn1p_value_fromdouble
(
double
);
asn1p_value_t
*
asn1p_value_fromdouble
(
double
);
asn1p_value_t
*
asn1p_value_fromint
(
asn1c_integer_t
);
asn1p_value_t
*
asn1p_value_fromint
(
asn1c_integer_t
);
asn1p_value_t
*
asn1p_value_fromtype
(
struct
asn1p_expr_s
*
);
asn1p_value_t
*
asn1p_value_clone
(
asn1p_value_t
*
);
asn1p_value_t
*
asn1p_value_clone
(
asn1p_value_t
*
);
asn1p_value_t
*
asn1p_value_clone_with_resolver
(
asn1p_value_t
*
,
asn1p_value_t
*
asn1p_value_clone_with_resolver
(
asn1p_value_t
*
,
asn1p_value_t
*
(
*
resolver
)(
asn1p_value_t
*
,
void
*
rarg
),
asn1p_value_t
*
(
*
resolver
)(
asn1p_value_t
*
,
void
*
rarg
),
...
...
libasn1parser/asn1p_y.c
View file @
a9532f4d
This source diff could not be displayed because it is too large. You can
view the blob
instead.
libasn1parser/asn1p_y.h
View file @
a9532f4d
...
@@ -245,7 +245,7 @@
...
@@ -245,7 +245,7 @@
#ifndef YYSTYPE
#ifndef YYSTYPE
#line 8
5
"asn1p_y.y"
#line 8
8
"asn1p_y.y"
typedef
union
{
typedef
union
{
asn1p_t
*
a_grammar
;
asn1p_t
*
a_grammar
;
asn1p_module_flags_e
a_module_flags
;
asn1p_module_flags_e
a_module_flags
;
...
...
libasn1parser/asn1p_y.y
View file @
a9532f4d
This diff is collapsed.
Click to expand it.
libasn1parser/asn1parser.c
View file @
a9532f4d
...
@@ -150,45 +150,14 @@ _asn1p_set_flags(enum asn1p_flags flags) {
...
@@ -150,45 +150,14 @@ _asn1p_set_flags(enum asn1p_flags flags) {
return
0
;
return
0
;
}
}
/*
* Perform last touches.
*/
static
void
_asn1p_apply_module2expr
(
asn1p_expr_t
*
expr
,
asn1p_module_t
*
mod
)
{
asn1p_expr_t
*
e
;
expr
->
module
=
mod
;
/* This is a useful thing */
/*
* Do it to children also.
*/
TQ_FOR
(
e
,
&
(
expr
->
members
),
next
)
{
_asn1p_apply_module2expr
(
e
,
mod
);
}
/*
* Do to parameterization.
*/
if
(
expr
->
rhs_pspecs
)
{
TQ_FOR
(
e
,
&
(
expr
->
rhs_pspecs
->
members
),
next
)
{
_asn1p_apply_module2expr
(
e
,
mod
);
}
}
}
static
int
static
int
_asn1p_fix_modules
(
asn1p_t
*
a
,
const
char
*
fname
)
{
_asn1p_fix_modules
(
asn1p_t
*
a
,
const
char
*
fname
)
{
asn1p_module_t
*
mod
;
asn1p_module_t
*
mod
;
TQ_FOR
(
mod
,
&
(
a
->
modules
),
mod_next
)
{
TQ_FOR
(
mod
,
&
(
a
->
modules
),
mod_next
)
{
asn1p_expr_t
*
expr
;
mod
->
source_file_name
=
strdup
(
fname
);
mod
->
source_file_name
=
strdup
(
fname
);
if
(
mod
->
source_file_name
==
NULL
)
if
(
mod
->
source_file_name
==
NULL
)
return
-
1
;
return
-
1
;
mod
->
asn1p
=
a
;
TQ_FOR
(
expr
,
&
(
mod
->
members
),
next
)
{
_asn1p_apply_module2expr
(
expr
,
mod
);
}
}
}
return
0
;
return
0
;
}
}
...
...
libasn1print/asn1print.c
View file @
a9532f4d
...
@@ -190,6 +190,11 @@ asn1print_value(asn1p_value_t *val, enum asn1print_flags flags) {
...
@@ -190,6 +190,11 @@ asn1print_value(asn1p_value_t *val, enum asn1print_flags flags) {
case
ATV_REAL
:
case
ATV_REAL
:
printf
(
"%f"
,
val
->
value
.
v_double
);
printf
(
"%f"
,
val
->
value
.
v_double
);
return
0
;
return
0
;
case
ATV_TYPE
:
asn1print_expr
(
val
->
value
.
v_type
->
module
->
asn1p
,
val
->
value
.
v_type
->
module
,
val
->
value
.
v_type
,
flags
,
0
);
return
0
;
case
ATV_INTEGER
:
case
ATV_INTEGER
:
printf
(
"%"
PRIdASN
,
val
->
value
.
v_integer
);
printf
(
"%"
PRIdASN
,
val
->
value
.
v_integer
);
return
0
;
return
0
;
...
@@ -349,10 +354,19 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) {
...
@@ -349,10 +354,19 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) {
}
}
break
;
break
;
case
ACT_CT_CTDBY
:
case
ACT_CT_CTDBY
:
printf
(
"CONSTRAINED BY "
);
printf
(
"
(
CONSTRAINED BY "
);
assert
(
ct
->
value
->
type
==
ATV_UNPARSED
);
assert
(
ct
->
value
->
type
==
ATV_UNPARSED
);
fwrite
(
ct
->
value
->
value
.
string
.
buf
,
fwrite
(
ct
->
value
->
value
.
string
.
buf
,
1
,
ct
->
value
->
value
.
string
.
size
,
stdout
);
1
,
ct
->
value
->
value
.
string
.
size
,
stdout
);
printf
(
")"
);
break
;
case
ACT_CT_CTNG
:
printf
(
"(CONTAINING "
);
asn1print_expr
(
ct
->
value
->
value
.
v_type
->
module
->
asn1p
,
ct
->
value
->
value
.
v_type
->
module
,
ct
->
value
->
value
.
v_type
,
flags
,
1
);
printf
(
")"
);
break
;
break
;
case
ACT_CA_SET
:
symno
++
;
case
ACT_CA_SET
:
symno
++
;
case
ACT_CA_CRC
:
symno
++
;
case
ACT_CA_CRC
:
symno
++
;
...
@@ -364,6 +378,7 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) {
...
@@ -364,6 +378,7 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) {
char
*
symtable
[]
=
{
" EXCEPT "
,
" ^ "
,
" | "
,
","
,
char
*
symtable
[]
=
{
" EXCEPT "
,
" ^ "
,
" | "
,
","
,
""
,
"("
};
""
,
"("
};
unsigned
int
i
;
unsigned
int
i
;
if
(
ct
->
type
==
ACT_CA_CRC
)
fputs
(
"("
,
stdout
);
for
(
i
=
0
;
i
<
ct
->
el_count
;
i
++
)
{
for
(
i
=
0
;
i
<
ct
->
el_count
;
i
++
)
{
if
(
i
)
fputs
(
symtable
[
symno
],
stdout
);
if
(
i
)
fputs
(
symtable
[
symno
],
stdout
);
if
(
ct
->
type
==
ACT_CA_CRC
)
fputs
(
"{"
,
stdout
);
if
(
ct
->
type
==
ACT_CA_CRC
)
fputs
(
"{"
,
stdout
);
...
@@ -373,6 +388,7 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) {
...
@@ -373,6 +388,7 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) {
&&
ct
->
type
==
ACT_CA_SET
)
&&
ct
->
type
==
ACT_CA_SET
)
fputs
(
")"
,
stdout
);
fputs
(
")"
,
stdout
);
}
}
if
(
ct
->
type
==
ACT_CA_CRC
)
fputs
(
")"
,
stdout
);
}
}
break
;
break
;
case
ACT_CA_AEX
:
case
ACT_CA_AEX
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment