- Mar 20, 2023
-
-
Jonathan Schöbel authored
-
- Jan 09, 2023
-
-
Jonathan Schöbel authored
-
- Jan 06, 2023
-
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
Symbols preceded by an underscore are reserved for future introductions by the c standard/library.
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
-
- Jan 05, 2023
-
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
-
- Jan 04, 2023
-
-
Jonathan Schöbel authored
An array index should be of size_t instead of unsigned int.
-
Jonathan Schöbel authored
Internal struct definitions shouldn't be exported by header files.
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
The validator was used to check that every created tag is validate. However I now think that validation should take place at a later time, so it is not mandatory. Thus developing the validator is now discontinued.
-
- Nov 24, 2022
-
-
Jonathan Schöbel authored
Often it is needed to iterate over the tags. So this was moved to a macro to reduce code duplication.
-
- Nov 23, 2022
-
-
Jonathan Schöbel authored
Copying a Validator could be useful if multiple html versions are to be supported. Another use case is a blacklist XSS-Scanner.
-
Jonathan Schöbel authored
A registered tag can be deregistered by calling SH_Validator_deregister. The data is removed, but the space is not deallocated, if it is not at the end. This prevents copying data on removal and saves expensive calls to realloc. Instead the empty space is added to the list of free blocks, which allows to refill these spaces, if a new tag is being registered. The space is finally deallocated, if the validator is being deallocated or the tag written in the last block is removed. In this case, heavy iteration is performed, as the list of free blocks is not ordered. The next last tag at that time is determined by iterating over the list of free blocks until some it is not found. Note that even if there can be a lot of gaps in between, the Validator will not allocate more space until all these gaps are refilled when a new tag is registered, thus new space is only being allocated, if there is really not enough space left. Due to the 4 nested loops, there was an issue related to the 72(80)-column rule. It can't be abided without severely impacting the readability of the code.
-
- Nov 17, 2022
-
-
Jonathan Schöbel authored
Source code regarding tags are exported to validator_tag.c and validator_tag.h for better separation and integration of new features.
-
- Nov 16, 2022
-
-
Jonathan Schöbel authored
The Validator saves the tags as an array. Now also another information is added, which slots aren't used currently to spare expensive calls to realloc. This led to a mere reimplementation of the functions. Tags can't be deleted by now, but the adding function supports reusing empty slots. Also the reading functions have to determine, whether a slot can be read or is empty. The tests were adjusted, but are buggy, so they should be rewritten in the future. Additionaly some annotations for splint were added.
-
- Nov 15, 2022
-
-
Jonathan Schöbel authored
Instead of the trivial structure SH_Error, SH_Status is used. The name was chosen, because error/status is set independently whether an error has occurred. Beside the error type, it also contains the associated errno and an error message. The error message is also printed, when it is set. Generating error messages with variadic arguments is now also supported. There are also macros to check for a set status. The exception handling was removed for the *_free methods, because they can't fail predictably during runtime. Unfortunately the compiler reports, that inside the macro set_status printf may be called with NULL [printf (NULL)], although, this is explicitly debarred.
-
- Oct 17, 2022
-
-
Jonathan Schöbel authored
The make process was restructured to create a library. For this libtool is used to provide both static and dynamic linking. Also header inclusion guards were introduced, to prevent clients of the library to include some single file without including others. The types were exported with forward declarations for better abstraction. When compiling the library, the macro LIB_SEFHT_COMPILATION is defined and symbol declarations are exported fully. For compiling the tests this macro is also defined, as the tests not only tests the API, but also the internal state, because a lot of errors couldn't be detected otherwise.
-
Jonathan Schöbel authored
-
Jonathan Schöbel authored
-
- Oct 16, 2022
-
-
Jonathan Schöbel authored
The method SH_Text_print just prints the whole string to stdout.
-
Jonathan Schöbel authored
The function SH_Text_get_length returns the length of the text. As the text also supports being longer than SIZE_MAX, this method can fail on runtime. If the text is longer then SIZE_MAX, the Text returns SIZE_MAX and sets error to DOMAIN_ERROR. Note, that due to the implementation, this is a non trivial function, so don't use it to exhaustively.
-
- Oct 15, 2022
-
-
Jonathan Schöbel authored
The function SH_Text_get_range returns a string begining at start and ending at end. Note that end specifies the char, that is not returned anymore. Thus the function implements something similar, as the pythonic slice syntax (text[start:end]). In opposition to the behaviour there, calling SH_Text_get_range with start > end is undefined behaviour. If start == end, the empty string is returned. If start is out of bounds, NULL is returned and an error is set. If end is out of bounds, the existent part is returned. Also the length of the returned string can be set (optionally) to the out parameter length.
-
Jonathan Schöbel authored
The function SH_Text_get_string returns a substring of text beginning at index and of length offset. If index is out of bounds, NULL is returned and an error is set. If offset is out of bounds, the existent part is returned. Also the length of the returned string can be set (optionally) to the out parameter length. If the original behaviour of SH_Text_get_string is achieved, SH_Text_get_string (text, length, error) has to be changed to SH_Text_get_string (text, 0, SIZE_MAX, length, error). The only difference will be that the function won't fail, when the text is longer than SIZE_MAX, because it is told to stop there. A text that is longer than SIZE_MAX is not possible to be returned, but that wasn't possible at anytime. Also I don't think handling char[] longer than SIZE_MAX is possible with the standard C library. Those in this case the text can only be returned in parts (By now only possible till 2*SIZE_MAX-1 with calling SH_Text_get_string (text, SIZE_MAX, SIZE_MAX, length, error)) or has to be manipulated using the appropiate SH_Text methods, which are not implemented yet.
-
Jonathan Schöbel authored
The method SH_Text_get_char returns a single character by a given index. If the index is out of range, NULL is returned and error->type is set to VALUE_ERROR.
-
Jonathan Schöbel authored
The (intern) implementation of SH_Text was changed from an array of char, to a single linked list of arrays of char. This allows an easier implementation of (further) text manipulation. The API hasn't changed much, but SH_Text_join can't yield an error anymore, so it now doesn't support passing an error and returns nothing. The source has been adapted to splint, which still tells about some errors, but they are all checked to be false-positives.
-
Jonathan Schöbel authored
A method was added, that returns the generated text.
-
Jonathan Schöbel authored
The constructor SH_Text_new_from_string accepts a string, with that the text is initialized. This can replace the so far needed two calls SH_Text_new and SH_Text_append_string. When writing the test, it was neccessary to simulate an overflow. Thereby a bug was detected regarding another overflow test. The bug was, that when SIZE_MAX % CHUNK_SIZE == 0 (which is normally true, if 2^n is taken as the value for CHUNK_SIZE) there can't be an overflow, so the test for an overflow fails. Actually there wasn't a neccesity to check for an overflow, as this could easily be bypassed by just allocating the requested size instead of the next chunk size, if this would be greater then SIZE_MAX.
-
- Sep 21, 2022
-
-
Jonathan Schöbel authored
Sometimes a copy is needed.
-
- Sep 20, 2022
-
-
Jonathan Schöbel authored
-
- Sep 18, 2022
-
-
Jonathan Schöbel authored
Fragment serves as a base class for all Fragment types; currently only NodeFragment exists. It is actually an abstract class, so there is no constructor.
-
Jonathan Schöbel authored
This renaming is neccessary, as the future Fragmment will be the base class to all Fragment types.
-
- Sep 11, 2022
-
-
Jonathan Schöbel authored
fixing some bugs detected by splint (-weak) and cppcheck.
-
- Sep 08, 2022
-
-
Jonathan Schöbel authored
When the wrap mode is used, after each tag a newline is started. Also the html is indented, which can be configured by the parameters indent_base, indent_base, indent_char. The parameter indent_base specifies the width the first tag should be indented with, while indent_step specifies the increment of the indent when switching to a child tag. The character, that is used for indenting is taken from indent_char. (It could also be a string longer than a single character). This aguments can't be set by the user, but are hardcoded (by now).
-
Jonathan Schöbel authored
Fragment can be copied, either recursive (copying also all childs) or nonrecursive (ignoring the childs, thus the copy has always no childs). Adding the same element twice in the tree (graph) isn't possible, as this leads to problems e.g. double free or similars.
-