aboutsummaryrefslogtreecommitdiff
path: root/tgeb/anbieter.c
diff options
context:
space:
mode:
Diffstat (limited to 'tgeb/anbieter.c')
-rw-r--r--tgeb/anbieter.c60
1 files changed, 45 insertions, 15 deletions
diff --git a/tgeb/anbieter.c b/tgeb/anbieter.c
index 575ed03..2e56a8d 100644
--- a/tgeb/anbieter.c
+++ b/tgeb/anbieter.c
@@ -18,23 +18,25 @@
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
+#include <string.h>
#include "tgebdat.h"
-static void rhdr_an(struct an *, FILE *); /* read header */
-static void rent_an(struct an *, FILE *); /* read entries */
-static void resort_an(struct an *);
+static void rhdr_an(AN *, FILE *); /* read header */
+static void rent_an(AN *, FILE *); /* read entries */
+static void resort_an(AN *);
-struct an *
+AN *
tgeb_read_an(char *file)
{
- struct an *an;
+ AN *an;
FILE *fd;
if (!(fd = fopen(file, "r")))
err(1, "fopen %s", file);
- if (!(an = (struct an *) malloc(sizeof(struct an))))
+ if (!(an = malloc(sizeof(AN))))
err(1, "malloc");
+ bzero(an, sizeof(AN));
rhdr_an(an, fd);
rent_an(an, fd);
@@ -44,12 +46,12 @@ tgeb_read_an(char *file)
}
void
-rhdr_an(struct an * an, FILE * fd)
+rhdr_an(AN * an, FILE * fd)
{
int i;
fread(&an->q, sizeof(an->q), 1, fd);
- if (!(an->h = (struct an_hdr *) calloc(an->q, sizeof(struct an_hdr))))
+ if (!(an->h = calloc(an->q, sizeof(AN_HDR))))
err(1, "malloc");
fseek(fd, 2, SEEK_SET);
@@ -64,7 +66,7 @@ rhdr_an(struct an * an, FILE * fd)
}
void
-rent_an(struct an * an, FILE * fd)
+rent_an(AN * an, FILE * fd)
{
int i, j;
@@ -72,8 +74,7 @@ rent_an(struct an * an, FILE * fd)
for (i = 0; i < an->q; i++) {
fseek(fd, an->h[i].off, SEEK_SET);
fread(&an->h[i].q, sizeof(an->h[i].q), 1, fd);
- if (!(an->h[i].d = (struct an_d *)
- calloc(an->h[i].q, sizeof(struct an_d))))
+ if (!(an->h[i].d = calloc(an->h[i].q, sizeof(AN_D))))
err(1, "malloc");
for (j = 0; j < an->h[i].q; j++) {
an->h[i].d[j].h = &an->h[i];
@@ -109,16 +110,45 @@ rent_an(struct an * an, FILE * fd)
}
void
-resort_an(struct an * an)
+resort_an(AN * an)
{
int i, j;
-
- if (!(an->e = (struct an_d *) calloc(an->e_q, sizeof(struct an_d))))
+ if (!(an->e = calloc(an->e_q, sizeof(AN_D))))
err(1, "malloc");
- for (i = 0; i < an->e_q; i++) {
+ for (i = 0; i < an->q; i++) {
for (j = 0; j < an->h[i].q; j++) {
an->e[an->h[i].d[j].id - 1] = an->h[i].d[j];
}
}
return;
}
+
+void
+tgeb_free_an(AN * an)
+{
+ int i, j;
+
+ free(an->e);
+ for (i = 0; i < an->q; i++) {
+ for (j = 0; j < an->h[i].q; j++) {
+ free(an->h[i].d[j].serv);
+ free(an->h[i].d[j].pref);
+ free(an->h[i].d[j].valf);
+ free(an->h[i].d[j].valt);
+ free(an->h[i].d[j].url);
+ free(an->h[i].d[j].url2);
+ free(an->h[i].d[j].phone);
+ free(an->h[i].d[j].mail);
+ free(an->h[i].d[j].x);
+ free(an->h[i].d[j].rurl);
+ free(an->h[i].d[j].rfax);
+ }
+ free(an->h[i].name);
+ free(an->h[i].mail);
+ free(an->h[i].url);
+ free(an->h[i].d);
+ }
+ free(an->h);
+ free(an);
+ return;
+}