Skip to content
Snippets Groups Projects
Commit 2a328c87 authored by Jonathan Schöbel's avatar Jonathan Schöbel
Browse files

Validator: removed ids for tags

For a rationale, see commit 'Validator: removed ids for attrs'
parent b839584e
No related branches found
No related tags found
No related merge requests found
...@@ -28,7 +28,7 @@ long_line_behaviour=1 ...@@ -28,7 +28,7 @@ long_line_behaviour=1
long_line_column=72 long_line_column=72
[files] [files]
current_page=33 current_page=53
FILE_NAME_0=139;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2FREADME;0;8 FILE_NAME_0=139;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2FREADME;0;8
FILE_NAME_1=134;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitignore;0;8 FILE_NAME_1=134;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitignore;0;8
FILE_NAME_2=1737;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fconfigure.ac;0;8 FILE_NAME_2=1737;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fconfigure.ac;0;8
...@@ -61,9 +61,9 @@ FILE_NAME_28=1867;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fp ...@@ -61,9 +61,9 @@ FILE_NAME_28=1867;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fp
FILE_NAME_29=3036;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.c;0;8 FILE_NAME_29=3036;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.c;0;8
FILE_NAME_30=1159;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.h;0;8 FILE_NAME_30=1159;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.h;0;8
FILE_NAME_31=1111;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_html.h;0;8 FILE_NAME_31=1111;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_html.h;0;8
FILE_NAME_32=15982;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.c;0;8 FILE_NAME_32=11962;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.c;0;8
FILE_NAME_33=1600;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.h;0;8 FILE_NAME_33=1068;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.h;0;8
FILE_NAME_34=1124;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag_data.h;0;8 FILE_NAME_34=1287;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag_data.h;0;8
FILE_NAME_35=16395;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.c;0;8 FILE_NAME_35=16395;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.c;0;8
FILE_NAME_36=1051;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.h;0;8 FILE_NAME_36=1051;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.h;0;8
FILE_NAME_37=1413;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr_data.h;0;8 FILE_NAME_37=1413;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr_data.h;0;8
...@@ -82,9 +82,9 @@ FILE_NAME_49=24;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprg ...@@ -82,9 +82,9 @@ FILE_NAME_49=24;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprg
FILE_NAME_50=4221;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text.c;0;8 FILE_NAME_50=4221;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text.c;0;8
FILE_NAME_51=994;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text_mark.c;0;8 FILE_NAME_51=994;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text_mark.c;0;8
FILE_NAME_52=2447;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8 FILE_NAME_52=2447;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8
FILE_NAME_53=3880;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_tag.c;0;8 FILE_NAME_53=7456;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_tag.c;0;8
FILE_NAME_54=28881;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_attr.c;0;8 FILE_NAME_54=28881;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_attr.c;0;8
FILE_NAME_55=547;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8 FILE_NAME_55=548;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
FILE_NAME_56=201;YAML;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitlab-ci.yml;0;4 FILE_NAME_56=201;YAML;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitlab-ci.yml;0;4
FILE_NAME_57=71;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Fupload.sh.in;0;8 FILE_NAME_57=71;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Fupload.sh.in;0;8
FILE_NAME_58=806;Sh;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Frelease.sh.in;0;4 FILE_NAME_58=806;Sh;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Frelease.sh.in;0;4
......
...@@ -40,11 +40,9 @@ static inline ...@@ -40,11 +40,9 @@ static inline
void void
init_tags (/*@special@*/ struct SH_Validator * validator) init_tags (/*@special@*/ struct SH_Validator * validator)
/*@defines validator->tags, /*@defines validator->tags,
validator->tag_n, validator->tag_n@*/
validator->last_tag@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/;
/*@modifies validator->last_tag@*/;
static inline static inline
bool bool
...@@ -53,11 +51,9 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator, ...@@ -53,11 +51,9 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
const size_t size, const size_t size,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags, /*@defines validator->tags,
validator->tag_n, validator->tag_n@*/
validator->last_tag@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/; /*@modifies status@*/;
...@@ -67,11 +63,9 @@ bool ...@@ -67,11 +63,9 @@ bool
init_tags_spec_html5 (/*@special@*/ struct SH_Validator * validator, init_tags_spec_html5 (/*@special@*/ struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags, /*@defines validator->tags,
validator->tag_n, validator->tag_n@*/
validator->last_tag@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/; /*@modifies status@*/;
...@@ -82,11 +76,9 @@ copy_tags (/*@special@*/ struct SH_Validator * copy, ...@@ -82,11 +76,9 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
const struct SH_Validator * validator, const struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->tags, /*@defines copy->tags,
copy->tag_n, copy->tag_n@*/
copy->last_tag@*/
/*@modifies copy->tags@*/ /*@modifies copy->tags@*/
/*@modifies copy->tag_n@*/ /*@modifies copy->tag_n@*/
/*@modifies copy->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/; /*@modifies status@*/;
...@@ -111,47 +103,17 @@ find_tag (const struct SH_Validator * validator, ...@@ -111,47 +103,17 @@ find_tag (const struct SH_Validator * validator,
/*@modifies index@*/; /*@modifies index@*/;
static inline static inline
Tag bool
add_tag (struct SH_Validator * validator, add_tag (struct SH_Validator * validator,
const char * tag, const char * tag,
size_t index, size_t index,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/; /*@modifies status@*/;
/*@unused@*/
static inline
bool
is_tag_id (const struct SH_Validator * validator, Tag id)
/*@*/;
static inline
bool
is_tag_name (const struct SH_Validator * validator, const char * name)
/*@*/;
/*@unused@*/
static inline
/*@null@*/
/*@only@*/
char *
get_tag_name_by_id (const struct SH_Validator * validator, Tag id,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
static inline
Tag
get_tag_id_by_name (const struct SH_Validator * validator,
const char * name,
/*@out@*/ size_t * index)
/*@modifies index@*/;
static inline static inline
bool bool
remove_tag (struct SH_Validator * validator, remove_tag (struct SH_Validator * validator,
...@@ -159,7 +121,6 @@ remove_tag (struct SH_Validator * validator, ...@@ -159,7 +121,6 @@ remove_tag (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/; /*@modifies status@*/;
...@@ -169,15 +130,12 @@ static inline ...@@ -169,15 +130,12 @@ static inline
void void
init_tags (/*@special@*/ struct SH_Validator * validator) init_tags (/*@special@*/ struct SH_Validator * validator)
/*@defines validator->tags, /*@defines validator->tags,
validator->tag_n, validator->tag_n@*/
validator->last_tag@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
{ {
validator->tags = malloc (0); validator->tags = malloc (0);
validator->tag_n = 0; validator->tag_n = 0;
validator->last_tag = TAG_ERR;
return; return;
} }
...@@ -186,11 +144,9 @@ bool ...@@ -186,11 +144,9 @@ bool
init_tags_spec_html5 (/*@special@*/ struct SH_Validator * validator, init_tags_spec_html5 (/*@special@*/ struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags, /*@defines validator->tags,
validator->tag_n, validator->tag_n@*/
validator->last_tag@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/ /*@modifies status@*/
...@@ -207,21 +163,17 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator, ...@@ -207,21 +163,17 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
const size_t size, const size_t size,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags, /*@defines validator->tags,
validator->tag_n, validator->tag_n@*/
validator->last_tag@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/ /*@modifies status@*/
{ {
size_t index; size_t index;
Tag id;
/* overflow detection */ /* overflow detection */
if ((size > TAG_MAX - 1) if ((size >= (SIZE_MAX / sizeof (struct tag_info))))
|| (size >= (SIZE_MAX / sizeof (struct tag_info))))
{ {
set_status (status, E_DOMAIN, 2, set_status (status, E_DOMAIN, 2,
"maximum number of tags reached"); "maximum number of tags reached");
...@@ -247,11 +199,10 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator, ...@@ -247,11 +199,10 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
/* ignore duplicate tags */ /* ignore duplicate tags */
if (!find_tag (validator, spec[index].tag, &position)) if (!find_tag (validator, spec[index].tag, &position))
{ {
char * name; struct tag_info tag_data;
size_t index2;
name = strdup (spec[index].tag); tag_data.name = strdup (spec[index].tag);
if (NULL == name) if (NULL == tag_data.name)
{ {
set_status (status, E_ALLOC, 3, set_status (status, E_ALLOC, 3,
"strdup failed"); "strdup failed");
...@@ -259,28 +210,18 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator, ...@@ -259,28 +210,18 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
return FALSE; return FALSE;
} }
/* only names are initialized */ for (size_t i = tag_n; i > position; i--)
for (index2 = tag_n; index2 > position; index2--)
{ {
tags[index2].name = tags[index2-1].name; tags[i] = tags[i-1];
} }
tags[position].name = name; tags[position] = tag_data;
tag_n++; tag_n++;
} }
} }
#undef tag_n #undef tag_n
#undef tags #undef tags
/* initialize ids */
id = TAG_ERR;
for (index = 0; index < validator->tag_n; index++)
{
validator->tags[index].id = id = NEXT_TAG (id);
}
validator->last_tag = id;
set_success (status); set_success (status);
return TRUE; return TRUE;
} }
...@@ -290,9 +231,7 @@ bool ...@@ -290,9 +231,7 @@ bool
copy_tag (/*@special@*/ struct tag_info * copy, copy_tag (/*@special@*/ struct tag_info * copy,
const struct tag_info * tag, const struct tag_info * tag,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->id, /*@defines copy->name@*/
copy->name@*/
/*@modifies copy->id@*/
/*@modifies copy->name@*/ /*@modifies copy->name@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
...@@ -307,7 +246,6 @@ copy_tag (/*@special@*/ struct tag_info * copy, ...@@ -307,7 +246,6 @@ copy_tag (/*@special@*/ struct tag_info * copy,
return FALSE; return FALSE;
} }
copy->id = tag->id;
copy->name = name; copy->name = name;
return TRUE; return TRUE;
...@@ -318,11 +256,9 @@ copy_tags (/*@special@*/ struct SH_Validator * copy, ...@@ -318,11 +256,9 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
const struct SH_Validator * validator, const struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->tags, /*@defines copy->tags,
copy->tag_n, copy->tag_n@*/
copy->last_tag@*/
/*@modifies copy->tags@*/ /*@modifies copy->tags@*/
/*@modifies copy->tag_n@*/ /*@modifies copy->tag_n@*/
/*@modifies copy->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/ /*@modifies status@*/
...@@ -336,9 +272,6 @@ copy_tags (/*@special@*/ struct SH_Validator * copy, ...@@ -336,9 +272,6 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
if (copy->tags == NULL) if (copy->tags == NULL)
{ {
set_status (status, E_ALLOC, 5, "malloc failed"); set_status (status, E_ALLOC, 5, "malloc failed");
copy->tag_n = 0;
copy->last_tag = TAG_ERR;
return FALSE; return FALSE;
} }
...@@ -355,7 +288,6 @@ copy_tags (/*@special@*/ struct SH_Validator * copy, ...@@ -355,7 +288,6 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
} }
copy->tag_n = validator->tag_n; copy->tag_n = validator->tag_n;
copy->last_tag = validator->last_tag;
return TRUE; return TRUE;
} }
...@@ -428,37 +360,39 @@ find_tag (const struct SH_Validator * validator, ...@@ -428,37 +360,39 @@ find_tag (const struct SH_Validator * validator,
} }
static inline static inline
Tag bool
add_tag (struct SH_Validator * validator, add_tag (struct SH_Validator * validator,
const char * tag, const char * tag,
size_t index, size_t index,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/ /*@modifies status@*/
{ {
Tag tag_id; struct tag_info tag_data;
char * name;
struct tag_info * new_tags; struct tag_info * new_tags;
/* abort on overflow: /* abort on overflow:
* - no unused Tag or
* - no unused index */ * - no unused index */
if ((validator->last_tag == TAG_MAX) if ((validator->tag_n == SIZE_MAX)
|| ((validator->tag_n == SIZE_MAX) || ((validator->tag_n + 1)
|| ((validator->tag_n + 1) > (SIZE_MAX / sizeof (struct tag_info))))
> (SIZE_MAX / sizeof (struct tag_info)))))
{ {
set_status (status, E_DOMAIN, 2, set_status (status, E_DOMAIN, 2,
"maximum number of tags reached"); "maximum number of tags reached");
return TAG_ERR; return FALSE;
} }
/* allocate new space */ tag_data.name = strdup (tag);
if (NULL == tag_data.name)
{
set_status (status, E_ALLOC, 3, "strdup failed");
return FALSE;
}
/* allocate new space */
/* The addition and the multiplication is save, /* The addition and the multiplication is save,
* because we have tested for this * because we have tested for this
* in the first condition. */ * in the first condition. */
...@@ -474,109 +408,22 @@ add_tag (struct SH_Validator * validator, ...@@ -474,109 +408,22 @@ add_tag (struct SH_Validator * validator,
#ifdef S_SPLINT_S #ifdef S_SPLINT_S
validator->tags = (void *) 0x12345; validator->tags = (void *) 0x12345;
#endif #endif
return TAG_ERR; return FALSE;
} }
validator->tags = new_tags; validator->tags = new_tags;
tag_id = NEXT_TAG (validator->last_tag); for (size_t i = validator->tag_n; i > index; i--)
name = strdup (tag);
if (NULL == name)
{ {
set_status (status, E_ALLOC, 4, "strdup failed"); validator->tags[i] = validator->tags[i-1];
return TAG_ERR;
} }
for (size_t index2 = validator->tag_n; index2 > index; index2--)
{
validator->tags[index2] = validator->tags[index2-1];
}
validator->tags[index].id = tag_id;
validator->tags[index].name = name;
/* commit changes */ /* commit changes */
validator->tags[index] = tag_data;
validator->tag_n++; validator->tag_n++;
validator->last_tag = tag_id;
set_success (status); set_success (status);
return tag_id; return TRUE;
}
/*@unused@*/
static inline
bool
is_tag_id (const struct SH_Validator * validator, Tag id)
/*@*/
{
size_t index;
for (index = 0; index < validator->tag_n; index++)
{
if (id == validator->tags[index].id)
{
return TRUE;
}
}
return FALSE;
}
static inline
bool
is_tag_name (const struct SH_Validator * validator, const char * name)
/*@*/
{
size_t index;
return find_tag (validator, name, &index);
}
/*@unused@*/
static inline
/*@null@*/
/*@only@*/
char *
get_tag_name_by_id (const struct SH_Validator * validator, Tag id,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
{
size_t index;
char * name;
for (index = 0; index < validator->tag_n; index++)
{
if (id == validator->tags[index].id)
{
name = strdup (validator->tags[index].name);
if (NULL == name)
{
set_status (status, E_ALLOC, 3,
"strdup failed");
return NULL;
}
return name;
}
}
return NULL;
}
static inline
Tag
get_tag_id_by_name (const struct SH_Validator * validator,
const char * name,
/*@out@*/ size_t * index)
/*@modifies index@*/
{
if (!find_tag (validator, name, index))
{
return TAG_ERR;
}
return validator->tags[*index].id;
} }
static inline static inline
...@@ -599,7 +446,6 @@ remove_tag (struct SH_Validator * validator, ...@@ -599,7 +446,6 @@ remove_tag (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status) /*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/ /*@modifies status@*/
...@@ -655,10 +501,11 @@ SH_Validator_check_tag (struct SH_Validator * validator, ...@@ -655,10 +501,11 @@ SH_Validator_check_tag (struct SH_Validator * validator,
const char * tag) const char * tag)
/*@*/ /*@*/
{ {
return is_tag_name (validator, tag); size_t index;
return find_tag (validator, tag, &index);
} }
Tag bool
/*@alt void@*/ /*@alt void@*/
SH_Validator_register_tag (struct SH_Validator * validator, SH_Validator_register_tag (struct SH_Validator * validator,
const char * tag, const char * tag,
...@@ -666,20 +513,17 @@ SH_Validator_register_tag (struct SH_Validator * validator, ...@@ -666,20 +513,17 @@ SH_Validator_register_tag (struct SH_Validator * validator,
struct SH_Status * status) struct SH_Status * status)
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/ /*@modifies status@*/
{ {
size_t index; size_t index;
Tag tag_id;
/* tag already registered */ /* tag already registered */
tag_id = get_tag_id_by_name (validator, tag, &index); if (find_tag (validator, tag, &index))
if (tag_id != TAG_ERR)
{ {
set_success (status); set_success (status);
return tag_id; return TRUE;
} }
return add_tag (validator, tag, index, status); return add_tag (validator, tag, index, status);
...@@ -692,7 +536,6 @@ SH_Validator_deregister_tag (struct SH_Validator * validator, ...@@ -692,7 +536,6 @@ SH_Validator_deregister_tag (struct SH_Validator * validator,
struct SH_Status * status) struct SH_Status * status)
/*@modifies validator->tag_n@*/ /*@modifies validator->tag_n@*/
/*@modifies validator->tags@*/ /*@modifies validator->tags@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/ /*@globals fileSystem@*/
/*@modifies fileSystem@*/ /*@modifies fileSystem@*/
/*@modifies status@*/ /*@modifies status@*/
......
...@@ -36,13 +36,7 @@ ...@@ -36,13 +36,7 @@
#include "status.h" #include "status.h"
typedef unsigned int Tag; bool
#define TAG_ERR (Tag) 0
#define TAG_MIN (Tag) 1
#define TAG_MAX (Tag) UINT_MAX
Tag
/*@alt void@*/ /*@alt void@*/
SH_Validator_register_tag (SH_Validator * validator, SH_Validator_register_tag (SH_Validator * validator,
const char * tag, const char * tag,
......
...@@ -31,15 +31,11 @@ ...@@ -31,15 +31,11 @@
struct tag_info struct tag_info
{ {
Tag id;
/*@only@*/ char * name; /*@only@*/ char * name;
}; };
#define NEXT_TAG(tag) (tag + 1)
#define TAG_DATA \ #define TAG_DATA \
/*@only@*/ struct tag_info * tags; \ /*@only@*/ struct tag_info * tags; \
size_t tag_n; \ size_t tag_n; \
Tag last_tag; \
#endif /* SEFHT_VALIDATOR_TAG_DATA_H */ #endif /* SEFHT_VALIDATOR_TAG_DATA_H */
...@@ -59,7 +59,6 @@ START_TEST(test_validator_no_status) ...@@ -59,7 +59,6 @@ START_TEST(test_validator_no_status)
ck_assert_ptr_ne (NULL, validator); ck_assert_ptr_ne (NULL, validator);
ck_assert_int_eq (0, validator->tag_n); ck_assert_int_eq (0, validator->tag_n);
ck_assert_int_eq (TAG_ERR, validator->last_tag);
SH_Validator_free (validator); SH_Validator_free (validator);
} }
...@@ -76,7 +75,6 @@ START_TEST(test_validator_with_status) ...@@ -76,7 +75,6 @@ START_TEST(test_validator_with_status)
ck_assert_int_eq (status.status, SUCCESS); ck_assert_int_eq (status.status, SUCCESS);
ck_assert_int_eq (0, validator->tag_n); ck_assert_int_eq (0, validator->tag_n);
ck_assert_int_eq (TAG_ERR, validator->last_tag);
SH_Validator_free (validator); SH_Validator_free (validator);
} }
...@@ -98,18 +96,17 @@ START_TEST(test_validator_copy_no_status) ...@@ -98,18 +96,17 @@ START_TEST(test_validator_copy_no_status)
ck_assert_ptr_ne (NULL, copy->tags); ck_assert_ptr_ne (NULL, copy->tags);
ck_assert_ptr_ne (validator->tags, copy->tags); ck_assert_ptr_ne (validator->tags, copy->tags);
ck_assert_int_eq (validator->tag_n, copy->tag_n); ck_assert_int_eq (validator->tag_n, copy->tag_n);
ck_assert_int_eq (validator->last_tag, copy->last_tag);
#define TEST_STR(S) ck_assert_ptr_ne (validator->S, copy->S); \
ck_assert_str_eq (validator->S, copy->S);
for (size_t index = 0; index < copy->tag_n; index++) for (size_t index = 0; index < copy->tag_n; index++)
{ {
ck_assert_int_eq (validator->tags[index].id, TEST_STR (tags[index].name);
copy->tags[index].id);
ck_assert_ptr_ne (validator->tags[index].name,
copy->tags[index].name);
ck_assert_str_eq (validator->tags[index].name,
copy->tags[index].name);
} }
#undef TEST_STR
SH_Validator_free (copy); SH_Validator_free (copy);
SH_Validator_free (validator); SH_Validator_free (validator);
} }
...@@ -134,18 +131,17 @@ START_TEST(test_validator_copy_with_status) ...@@ -134,18 +131,17 @@ START_TEST(test_validator_copy_with_status)
ck_assert_ptr_ne (NULL, copy->tags); ck_assert_ptr_ne (NULL, copy->tags);
ck_assert_ptr_ne (validator->tags, copy->tags); ck_assert_ptr_ne (validator->tags, copy->tags);
ck_assert_int_eq (validator->tag_n, copy->tag_n); ck_assert_int_eq (validator->tag_n, copy->tag_n);
ck_assert_int_eq (validator->last_tag, copy->last_tag);
#define TEST_STR(S) ck_assert_ptr_ne (validator->S, copy->S); \
ck_assert_str_eq (validator->S, copy->S);
for (size_t index = 0; index < copy->tag_n; index++) for (size_t index = 0; index < copy->tag_n; index++)
{ {
ck_assert_int_eq (validator->tags[index].id, TEST_STR (tags[index].name);
copy->tags[index].id);
ck_assert_ptr_ne (validator->tags[index].name,
copy->tags[index].name);
ck_assert_str_eq (validator->tags[index].name,
copy->tags[index].name);
} }
#undef TEST_STR
SH_Validator_free (copy); SH_Validator_free (copy);
SH_Validator_free (validator); SH_Validator_free (validator);
} }
...@@ -161,17 +157,13 @@ START_TEST(test_validator_spec_no_status) ...@@ -161,17 +157,13 @@ START_TEST(test_validator_spec_no_status)
ck_assert_ptr_ne (NULL, validator->tags); ck_assert_ptr_ne (NULL, validator->tags);
ck_assert_int_eq (3, validator->tag_n); ck_assert_int_eq (3, validator->tag_n);
ck_assert_int_eq (3, validator->last_tag);
ck_assert_int_eq (1, validator->tags[0].id);
ck_assert_ptr_ne (HTML_[1].tag, validator->tags[0].name); ck_assert_ptr_ne (HTML_[1].tag, validator->tags[0].name);
ck_assert_str_eq (HTML_[1].tag, validator->tags[0].name); ck_assert_str_eq (HTML_[1].tag, validator->tags[0].name);
ck_assert_int_eq (2, validator->tags[1].id);
ck_assert_ptr_ne (HTML_[3].tag, validator->tags[1].name); ck_assert_ptr_ne (HTML_[3].tag, validator->tags[1].name);
ck_assert_str_eq (HTML_[3].tag, validator->tags[1].name); ck_assert_str_eq (HTML_[3].tag, validator->tags[1].name);
ck_assert_int_eq (3, validator->tags[2].id);
ck_assert_ptr_ne (HTML_[0].tag, validator->tags[2].name); ck_assert_ptr_ne (HTML_[0].tag, validator->tags[2].name);
ck_assert_str_eq (HTML_[0].tag, validator->tags[2].name); ck_assert_str_eq (HTML_[0].tag, validator->tags[2].name);
...@@ -193,17 +185,13 @@ START_TEST(test_validator_spec_with_status) ...@@ -193,17 +185,13 @@ START_TEST(test_validator_spec_with_status)
ck_assert_ptr_ne (NULL, validator->tags); ck_assert_ptr_ne (NULL, validator->tags);
ck_assert_int_eq (3, validator->tag_n); ck_assert_int_eq (3, validator->tag_n);
ck_assert_int_eq (3, validator->last_tag);
ck_assert_int_eq (1, validator->tags[0].id);
ck_assert_ptr_ne (HTML_[1].tag, validator->tags[0].name); ck_assert_ptr_ne (HTML_[1].tag, validator->tags[0].name);
ck_assert_str_eq (HTML_[1].tag, validator->tags[0].name); ck_assert_str_eq (HTML_[1].tag, validator->tags[0].name);
ck_assert_int_eq (2, validator->tags[1].id);
ck_assert_ptr_ne (HTML_[3].tag, validator->tags[1].name); ck_assert_ptr_ne (HTML_[3].tag, validator->tags[1].name);
ck_assert_str_eq (HTML_[3].tag, validator->tags[1].name); ck_assert_str_eq (HTML_[3].tag, validator->tags[1].name);
ck_assert_int_eq (3, validator->tags[2].id);
ck_assert_ptr_ne (HTML_[0].tag, validator->tags[2].name); ck_assert_ptr_ne (HTML_[0].tag, validator->tags[2].name);
ck_assert_str_eq (HTML_[0].tag, validator->tags[2].name); ck_assert_str_eq (HTML_[0].tag, validator->tags[2].name);
...@@ -221,49 +209,43 @@ START_TEST(test_validator_tag_register_no_status) ...@@ -221,49 +209,43 @@ START_TEST(test_validator_tag_register_no_status)
const char * tag4 = "p"; const char * tag4 = "p";
const char * tag5 = "img"; const char * tag5 = "img";
char * tagN; char * tagN;
Tag tag; bool result;
Tag tag_;
/* setup */ /* setup */
validator = SH_Validator_new (NULL); validator = SH_Validator_new (NULL);
ck_assert_ptr_ne (NULL, validator); ck_assert_ptr_ne (NULL, validator);
/* test - register */ /* test - register */
tag = SH_Validator_register_tag (validator, tag1, NULL); result = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_eq (1, tag); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, tag);
ck_assert_int_eq (validator->tags[0].id, tag); ck_assert_int_eq (1, validator->tag_n);
ck_assert_str_eq (validator->tags[0].name, tag1); ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
/* test - duplicate registration */ /* test - duplicate registration */
tag_ = SH_Validator_register_tag (validator, tag1, NULL); result = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_eq (tag_, tag); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, tag);
ck_assert_int_eq (validator->tags[0].id, tag); ck_assert_int_eq (1, validator->tag_n);
ck_assert_str_eq (validator->tags[0].name, tag1); ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
/* test - order */ /* test - order */
tag = SH_Validator_register_tag (validator, tag3, NULL); result = SH_Validator_register_tag (validator, tag3, NULL);
ck_assert_int_eq (tag, 2); ck_assert_int_eq (TRUE, result);
tag = SH_Validator_register_tag (validator, tag4, NULL);
ck_assert_int_eq (tag, 3);
tag = SH_Validator_register_tag (validator, tag5, NULL); result = SH_Validator_register_tag (validator, tag4, NULL);
ck_assert_int_eq (tag, 4); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (validator->tag_n, 4); result = SH_Validator_register_tag (validator, tag5, NULL);
ck_assert_int_eq (TRUE, result);
ck_assert_str_eq (validator->tags[0].name, tag3); ck_assert_int_eq (4, validator->tag_n);
ck_assert_str_eq (validator->tags[1].name, tag1); ck_assert_str_eq (tag3, validator->tags[0].name);
ck_assert_str_eq (validator->tags[2].name, tag5); ck_assert_str_eq (tag1, validator->tags[1].name);
ck_assert_str_eq (validator->tags[3].name, tag4); ck_assert_str_eq (tag5, validator->tags[2].name);
ck_assert_str_eq (tag4, validator->tags[3].name);
/* test - overflow detection */ /* test - overflow detection */
/* make method fail by filling with garbage until /* make method fail by filling with garbage until
...@@ -282,25 +264,15 @@ START_TEST(test_validator_tag_register_no_status) ...@@ -282,25 +264,15 @@ START_TEST(test_validator_tag_register_no_status)
{ {
sprintf (tagN, "tag%zu", validator->tag_n); sprintf (tagN, "tag%zu", validator->tag_n);
} }
while (TAG_ERR != SH_Validator_register_tag (validator, tagN, NULL)); while (SH_Validator_register_tag (validator, tagN, NULL));
free (tagN); free (tagN);
/* test overflow #1 */ /* test overflow */
tag = SH_Validator_register_tag (validator, tag2, NULL); result = SH_Validator_register_tag (validator, tag2, NULL);
ck_assert_int_eq (TAG_ERR, tag); ck_assert_int_eq (FALSE, result);
ck_assert_int_eq (validator->tag_n, 10);
/* test overflow #2 */
validator->tag_n = 1;
validator->last_tag = TAG_MAX;
tag = SH_Validator_register_tag (validator, tag2, NULL);
ck_assert_int_eq (TAG_ERR, tag);
ck_assert_int_eq (validator->tag_n, 1); ck_assert_int_eq (10, validator->tag_n);
ck_assert_int_eq (validator->last_tag, TAG_MAX);
/* cleanup */ /* cleanup */
/* also free garbage created for overflow test */ /* also free garbage created for overflow test */
...@@ -318,8 +290,7 @@ START_TEST(test_validator_tag_register_with_status) ...@@ -318,8 +290,7 @@ START_TEST(test_validator_tag_register_with_status)
const char * tag4 = "p"; const char * tag4 = "p";
const char * tag5 = "img"; const char * tag5 = "img";
char * tagN; char * tagN;
Tag tag; bool result;
Tag tag_;
/* setup */ /* setup */
validator = SH_Validator_new (NULL); validator = SH_Validator_new (NULL);
...@@ -327,50 +298,45 @@ START_TEST(test_validator_tag_register_with_status) ...@@ -327,50 +298,45 @@ START_TEST(test_validator_tag_register_with_status)
/* test - register */ /* test - register */
_status_preinit (status); _status_preinit (status);
tag = SH_Validator_register_tag (validator, tag1, &status); result = SH_Validator_register_tag (validator, tag1, &status);
ck_assert_int_eq (1, tag); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (SUCCESS, status.status); ck_assert_int_eq (SUCCESS, status.status);
ck_assert_int_eq (validator->tag_n, 1); ck_assert_int_eq (1, validator->tag_n);
ck_assert_int_eq (validator->last_tag, tag); ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
ck_assert_int_eq (validator->tags[0].id, tag);
ck_assert_str_eq (validator->tags[0].name, tag1);
/* test - duplicate registration */ /* test - duplicate registration */
_status_preinit (status); _status_preinit (status);
tag_ = SH_Validator_register_tag (validator, tag1, &status); result = SH_Validator_register_tag (validator, tag1, &status);
ck_assert_int_eq (tag_, tag); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (SUCCESS, status.status); ck_assert_int_eq (SUCCESS, status.status);
ck_assert_int_eq (validator->tag_n, 1); ck_assert_int_eq (1, validator->tag_n);
ck_assert_int_eq (validator->last_tag, tag); ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
ck_assert_int_eq (validator->tags[0].id, tag);
ck_assert_str_eq (validator->tags[0].name, tag1);
/* test - order */ /* test - order */
_status_preinit (status); _status_preinit (status);
tag = SH_Validator_register_tag (validator, tag3, &status); result = SH_Validator_register_tag (validator, tag3, &status);
ck_assert_int_eq (tag, 2); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (status.status, SUCCESS); ck_assert_int_eq (status.status, SUCCESS);
_status_preinit (status); _status_preinit (status);
tag = SH_Validator_register_tag (validator, tag4, &status); result = SH_Validator_register_tag (validator, tag4, &status);
ck_assert_int_eq (tag, 3); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (status.status, SUCCESS); ck_assert_int_eq (status.status, SUCCESS);
_status_preinit (status); _status_preinit (status);
tag = SH_Validator_register_tag (validator, tag5, &status); result = SH_Validator_register_tag (validator, tag5, &status);
ck_assert_int_eq (tag, 4); ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (status.status, SUCCESS); ck_assert_int_eq (status.status, SUCCESS);
ck_assert_int_eq (validator->tag_n, 4); ck_assert_int_eq (4, validator->tag_n);
ck_assert_str_eq (tag3, validator->tags[0].name);
ck_assert_str_eq (validator->tags[0].name, tag3); ck_assert_str_eq (tag1, validator->tags[1].name);
ck_assert_str_eq (validator->tags[1].name, tag1); ck_assert_str_eq (tag5, validator->tags[2].name);
ck_assert_str_eq (validator->tags[2].name, tag5); ck_assert_str_eq (tag4, validator->tags[3].name);
ck_assert_str_eq (validator->tags[3].name, tag4);
/* test - overflow detection */ /* test - overflow detection */
/* make method fail by filling with garbage until /* make method fail by filling with garbage until
...@@ -389,30 +355,18 @@ START_TEST(test_validator_tag_register_with_status) ...@@ -389,30 +355,18 @@ START_TEST(test_validator_tag_register_with_status)
{ {
sprintf (tagN, "tag%zu", validator->tag_n); sprintf (tagN, "tag%zu", validator->tag_n);
} }
while (TAG_ERR != SH_Validator_register_tag (validator, tagN, NULL)); while (SH_Validator_register_tag (validator, tagN, NULL));
free (tagN); free (tagN);
/* test overflow #1 */ /* test overflow */
_status_preinit (status); _status_preinit (status);
tag = SH_Validator_register_tag (validator, tag2, &status); result = SH_Validator_register_tag (validator, tag2, &status);
ck_assert_int_eq (TAG_ERR, tag); ck_assert_int_eq (FALSE, result);
ck_assert_int_eq (E_DOMAIN, status.status); ck_assert_int_eq (E_DOMAIN, status.status);
ck_assert_int_eq (validator->tag_n, 10); ck_assert_int_eq (validator->tag_n, 10);
/* test overflow #2 */
validator->tag_n = 1;
validator->last_tag = TAG_MAX;
_status_preinit (status);
tag = SH_Validator_register_tag (validator, tag2, &status);
ck_assert_int_eq (TAG_ERR, tag);
ck_assert_int_eq (E_DOMAIN, status.status);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, TAG_MAX);
/* cleanup */ /* cleanup */
/* also free garbage created for overflow test */ /* also free garbage created for overflow test */
validator->tag_n = 10; validator->tag_n = 10;
...@@ -425,15 +379,14 @@ START_TEST(test_validator_tag_check) ...@@ -425,15 +379,14 @@ START_TEST(test_validator_tag_check)
const char * tag1 = "html"; const char * tag1 = "html";
const char * tag2 = "html"; const char * tag2 = "html";
const char * tag3 = "head"; const char * tag3 = "head";
Tag tag;
bool result; bool result;
/* setup */ /* setup */
validator = SH_Validator_new (NULL); validator = SH_Validator_new (NULL);
ck_assert_ptr_ne (NULL, validator); ck_assert_ptr_ne (NULL, validator);
tag = SH_Validator_register_tag (validator, tag1, NULL); result = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_ne (TAG_ERR, tag); ck_assert_int_eq (TRUE, result);
/* test */ /* test */
result = SH_Validator_check_tag (validator, tag1); result = SH_Validator_check_tag (validator, tag1);
......
...@@ -22,5 +22,4 @@ Fragment: ...@@ -22,5 +22,4 @@ Fragment:
- support for mapping special chars -> html entities - support for mapping special chars -> html entities
Validator: Validator:
- remove unnecessary ids
- tests missing for deregister_tag - tests missing for deregister_tag
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment