Function implementations in alphabetical order

This commit is contained in:
Matteo Bini 2024-09-07 21:00:25 +02:00
parent d83e30da19
commit 556d7b6ff8
1 changed files with 77 additions and 77 deletions

154
srohtml.c
View File

@ -177,6 +177,17 @@ array_at(array *a, const size_t i)
return (char *) a->data + i * a->unit_size;
}
void
array_init(array *a, const size_t size, size_t num)
{
num = num == 0 ? 1 : num;
a->data = safe_malloc(size * num);
a->length = 0;
a->size = num;
a->unit_size = size;
}
void *
array_pop(array *a)
{
@ -199,6 +210,54 @@ array_push(array *a)
return (char *) a->data + a->length++ * a->unit_size;
}
char *
array_strcat(array *dst, const char *src)
{
char *c;
size_t i, len;
len = strlen(src);
for (i = 0; i < len; i++) {
c = array_push(dst);
*c = src[i];
}
c = array_push(dst);
*c = '\0';
dst->length--;
return dst->data;
}
char *
array_strcat_html(array *dst, const char *src, const html_val_type t)
{
char *c;
size_t i, len;
len = strlen(src);
for (i = 0; i < len; i++) {
if (t == tag_attribute && src[i] == '"')
array_strcat(dst, "&quot;");
else if (src[i] == '&')
array_strcat(dst, "&amp;");
else if (src[i] == '<')
array_strcat(dst, "&lt;");
else if (src[i] == '>')
array_strcat(dst, "&gt;");
else {
c = array_push(dst);
*c = src[i];
}
}
c = array_push(dst);
*c = '\0';
dst->length--;
return dst->data;
}
void
cmd(char *line)
{
@ -1055,19 +1114,8 @@ init_arrays(void)
array_init(&sitography, sizeof(note), NOTES_START);
}
void
array_init(array *a, const size_t size, size_t num)
{
num = num == 0 ? 1 : num;
a->data = safe_malloc(size * num);
a->length = 0;
a->size = num;
a->unit_size = size;
}
int
main (int argc, char *argv[])
main(int argc, char *argv[])
{
FILE *in, *out;
@ -1443,6 +1491,23 @@ page_head(void)
array_strcat(&head, "\t</head>\n");
}
void
pop_closure(array *a)
{
closure *tag;
if (a->length <= 0)
return;
tag = array_at(a, a->length - 1);
if (tag == NULL) {
fprintf(stderr, BIN ": Can't find tag closure at position %i, in array type.\n", a->length - 1);
exit(1);
}
free(tag->name);
array_pop(a);
}
void
print_help(void)
{
@ -1516,23 +1581,6 @@ read_and_process(FILE *in)
free(line);
}
void
pop_closure(array *a)
{
closure *tag;
if (a->length <= 0)
return;
tag = array_at(a, a->length - 1);
if (tag == NULL) {
fprintf(stderr, BIN ": Can't find tag closure at position %i, in array type.\n", a->length - 1);
exit(1);
}
free(tag->name);
array_pop(a);
}
void *
safe_malloc(const size_t size)
{
@ -1615,51 +1663,3 @@ stread_param(const char *src, char **str)
return len + p;
}
char *
array_strcat(array *dst, const char *src)
{
char *c;
size_t i, len;
len = strlen(src);
for (i = 0; i < len; i++) {
c = array_push(dst);
*c = src[i];
}
c = array_push(dst);
*c = '\0';
dst->length--;
return dst->data;
}
char *
array_strcat_html(array *dst, const char *src, const html_val_type t)
{
char *c;
size_t i, len;
len = strlen(src);
for (i = 0; i < len; i++) {
if (t == tag_attribute && src[i] == '"')
array_strcat(dst, "&quot;");
else if (src[i] == '&')
array_strcat(dst, "&amp;");
else if (src[i] == '<')
array_strcat(dst, "&lt;");
else if (src[i] == '>')
array_strcat(dst, "&gt;");
else {
c = array_push(dst);
*c = src[i];
}
}
c = array_push(dst);
*c = '\0';
dst->length--;
return dst->data;
}