aboutsummaryrefslogtreecommitdiff
path: root/src/txtacc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/txtacc.c')
-rw-r--r--src/txtacc.c228
1 files changed, 108 insertions, 120 deletions
diff --git a/src/txtacc.c b/src/txtacc.c
index d5da901..a1b96ed 100644
--- a/src/txtacc.c
+++ b/src/txtacc.c
@@ -1,5 +1,5 @@
/* wydawca - automatic release submission daemon
- Copyright (C) 2007, 2009-2011 Sergey Poznyakoff
+ Copyright (C) 2007, 2009-2013 Sergey Poznyakoff
Wydawca is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -16,169 +16,157 @@
#include "wydawca.h"
-struct txtacc_entry
-{
- char *buf; /* Text buffer */
- size_t size; /* Buffer size */
- size_t len; /* Actual number of bytes in buffer */
+struct txtacc_entry {
+ char *buf; /* Text buffer */
+ size_t size; /* Buffer size */
+ size_t len; /* Actual number of bytes in buffer */
};
#define TXTACC_BUFSIZE 1024
#define txtacc_entry_freesize(e) ((e)->size - (e)->len)
-struct txtacc
-{
- struct grecs_list *cur; /* Current build list */
- struct grecs_list *mem; /* List of already allocated elements */
+struct txtacc {
+ struct grecs_list *cur; /* Current build list */
+ struct grecs_list *mem; /* List of already allocated elements */
};
static struct txtacc_entry *
-txtacc_alloc_entry (struct grecs_list *list, size_t size)
+txtacc_alloc_entry(struct grecs_list *list, size_t size)
{
- struct txtacc_entry *p = grecs_malloc (sizeof (*p));
- p->buf = grecs_malloc (size);
- p->size = size;
- p->len = 0;
- grecs_list_append (list, p);
- return p;
+ struct txtacc_entry *p = grecs_malloc(sizeof(*p));
+ p->buf = grecs_malloc(size);
+ p->size = size;
+ p->len = 0;
+ grecs_list_append(list, p);
+ return p;
}
static struct txtacc_entry *
-txtacc_cur_entry (struct txtacc *acc)
+txtacc_cur_entry(struct txtacc *acc)
{
- struct txtacc_entry *ent;
-
- if (grecs_list_size (acc->cur) == 0)
- return txtacc_alloc_entry (acc->cur, TXTACC_BUFSIZE);
- ent = acc->cur->tail->data;
- if (txtacc_entry_freesize (ent) == 0)
- ent = txtacc_alloc_entry (acc->cur, TXTACC_BUFSIZE);
- return ent;
+ struct txtacc_entry *ent;
+
+ if (grecs_list_size(acc->cur) == 0)
+ return txtacc_alloc_entry(acc->cur, TXTACC_BUFSIZE);
+ ent = acc->cur->tail->data;
+ if (txtacc_entry_freesize(ent) == 0)
+ ent = txtacc_alloc_entry(acc->cur, TXTACC_BUFSIZE);
+ return ent;
}
static void
-txtacc_entry_append (struct txtacc_entry *ent, const char *p, size_t size)
+txtacc_entry_append(struct txtacc_entry *ent, const char *p, size_t size)
{
- memcpy (ent->buf + ent->len, p, size);
- ent->len += size;
-}
+ memcpy(ent->buf + ent->len, p, size);
+ ent->len += size;
+}
static void
-txtacc_entry_tailor (struct txtacc_entry *ent)
+txtacc_entry_tailor(struct txtacc_entry *ent)
{
- if (ent->size > ent->len)
- {
- char *p = realloc (ent->buf, ent->len);
- if (!p)
- return;
- ent->buf = p;
- ent->size = ent->len;
- }
+ if (ent->size > ent->len) {
+ char *p = realloc(ent->buf, ent->len);
+ if (!p)
+ return;
+ ent->buf = p;
+ ent->size = ent->len;
+ }
}
static void
-txtacc_entry_free (void *p)
+txtacc_entry_free(void *p)
{
- if (p)
- {
- struct txtacc_entry *ent = p;
- free (ent->buf);
- free (ent);
- }
+ if (p) {
+ struct txtacc_entry *ent = p;
+ free(ent->buf);
+ free(ent);
+ }
}
struct txtacc *
-txtacc_create ()
+txtacc_create()
{
- struct txtacc *acc = grecs_malloc (sizeof (*acc));
- acc->cur = grecs_list_create ();
- acc->cur->free_entry = txtacc_entry_free;
- acc->mem = grecs_list_create ();
- acc->mem->free_entry = txtacc_entry_free;
- return acc;
+ struct txtacc *acc = grecs_malloc(sizeof(*acc));
+ acc->cur = grecs_list_create();
+ acc->cur->free_entry = txtacc_entry_free;
+ acc->mem = grecs_list_create();
+ acc->mem->free_entry = txtacc_entry_free;
+ return acc;
}
void
-txtacc_free (struct txtacc *acc)
+txtacc_free(struct txtacc *acc)
{
- grecs_list_free (acc->cur);
- grecs_list_free (acc->mem);
- free (acc);
+ grecs_list_free(acc->cur);
+ grecs_list_free(acc->mem);
+ free(acc);
}
void
-txtacc_grow (struct txtacc *acc, const char *buf, size_t size)
+txtacc_grow(struct txtacc *acc, const char *buf, size_t size)
{
- while (size)
- {
- struct txtacc_entry *ent = txtacc_cur_entry (acc);
- size_t rest = txtacc_entry_freesize (ent);
- if (rest > size)
- rest = size;
- txtacc_entry_append (ent, buf, rest);
- buf += rest;
- size -= rest;
- }
+ while (size) {
+ struct txtacc_entry *ent = txtacc_cur_entry(acc);
+ size_t rest = txtacc_entry_freesize(ent);
+ if (rest > size)
+ rest = size;
+ txtacc_entry_append(ent, buf, rest);
+ buf += rest;
+ size -= rest;
+ }
}
char *
-txtacc_finish (struct txtacc *acc, int steal)
+txtacc_finish(struct txtacc *acc, int steal)
{
- struct grecs_list_entry *ep;
- struct txtacc_entry *txtent;
- size_t size;
- char *p;
-
- switch (grecs_list_size (acc->cur))
- {
- case 0:
- return NULL;
-
- case 1:
- txtent = acc->cur->head->data;
- acc->cur->head->data = NULL;
- txtacc_entry_tailor (txtent);
- grecs_list_append (acc->mem, txtent);
- break;
-
- default:
- size = 0;
- for (ep = acc->cur->head; ep; ep = ep->next)
- {
- txtent = ep->data;
- size += txtent->len;
+ struct grecs_list_entry *ep;
+ struct txtacc_entry *txtent;
+ size_t size;
+ char *p;
+
+ switch (grecs_list_size(acc->cur)) {
+ case 0:
+ return NULL;
+
+ case 1:
+ txtent = acc->cur->head->data;
+ acc->cur->head->data = NULL;
+ txtacc_entry_tailor(txtent);
+ grecs_list_append(acc->mem, txtent);
+ break;
+
+ default:
+ size = 0;
+ for (ep = acc->cur->head; ep; ep = ep->next) {
+ txtent = ep->data;
+ size += txtent->len;
+ }
+
+ txtent = txtacc_alloc_entry(acc->mem, size);
+ for (ep = acc->cur->head; ep; ep = ep->next) {
+ struct txtacc_entry *tp = ep->data;
+ txtacc_entry_append(txtent, tp->buf, tp->len);
+ }
}
-
- txtent = txtacc_alloc_entry (acc->mem, size);
- for (ep = acc->cur->head; ep; ep = ep->next)
- {
- struct txtacc_entry *tp = ep->data;
- txtacc_entry_append (txtent, tp->buf, tp->len);
+
+ grecs_list_clear(acc->cur);
+ p = txtent->buf;
+ if (steal) {
+ grecs_list_remove_tail(acc->mem);
+ free(txtent);
}
- }
-
- grecs_list_clear (acc->cur);
- p = txtent->buf;
- if (steal)
- {
- grecs_list_remove_tail (acc->mem);
- free (txtent);
- }
- return p;
+ return p;
}
void
-txtacc_free_string (struct txtacc *acc, char *str)
+txtacc_free_string(struct txtacc *acc, char *str)
{
- struct grecs_list_entry *ep;
- for (ep = acc->mem->head; ep; ep = ep->next)
- {
- struct txtacc_entry *tp = ep->data;
- if (tp->buf == str)
- {
- grecs_list_remove_entry (acc->mem, ep);
- free (tp->buf);
- return;
+ struct grecs_list_entry *ep;
+ for (ep = acc->mem->head; ep; ep = ep->next) {
+ struct txtacc_entry *tp = ep->data;
+ if (tp->buf == str) {
+ grecs_list_remove_entry(acc->mem, ep);
+ free(tp->buf);
+ return;
+ }
}
- }
}
-

Return to:

Send suggestions and report system problems to the System administrator.