# Copyright (C) 1994, Index Data I/S
# All rights reserved.
# Sebastian Hammer, Adam Dickmeiss
-# $Id: Makefile,v 1.7 1994-08-18 10:02:00 adam Exp $
+# $Id: Makefile,v 1.8 1994-08-18 11:02:27 adam Exp $
SHELL=/bin/sh
INCLUDE=-I../include
$(CC) -c $(DEFS) $(CFLAGS) $<
clean:
- rm -f *.[oa] opt-test core mon.out gmon.out errlist
+ rm -f *.[oa] opt-test res-test core mon.out gmon.out errlist
dep depend:
$(CPP) $(INCLUDE) -M *.c >.depend
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: res-test.c,v $
- * Revision 1.2 1994-08-18 10:02:01 adam
+ * Revision 1.3 1994-08-18 11:02:27 adam
+ * Implementation of res_write.
+ *
+ * Revision 1.2 1994/08/18 10:02:01 adam
* Module alexpath moved from res.c to alexpath.c. Minor changes in res-test.c
*
* Revision 1.1 1994/08/18 09:43:51 adam
int ret;
char *prog = *argv;
Res res;
+ int write_flag = 0;
log_init (LOG_DEFAULT_LEVEL, prog, NULL);
- while ((ret = options ("p:v", argv, argc, &arg)) != -2)
+ while ((ret = options ("wp:v", argv, argc, &arg)) != -2)
if (ret == 0)
resfile = arg;
else if (ret == 'v')
log_init (LOG_ALL, prog, NULL);
else if (ret == 'p')
prefix = arg;
+ else if (ret == 'w')
+ write_flag = 1;
else
{
log (LOG_FATAL, "unknown option");
}
res = res_open (resfile);
res_trav (res, prefix, res_print);
+ if (write_flag)
+ res_write (res);
res_close (res);
return 0;
}
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: res.c,v $
- * Revision 1.4 1994-08-18 10:02:01 adam
+ * Revision 1.5 1994-08-18 11:02:28 adam
+ * Implementation of res_write.
+ *
+ * Revision 1.4 1994/08/18 10:02:01 adam
* Module alexpath moved from res.c to alexpath.c. Minor changes in res-test.c
*
* Revision 1.3 1994/08/18 09:43:51 adam
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <assert.h>
#include <util.h>
+static struct res_entry *add_entry (Res r)
+{
+ struct res_entry *resp;
+
+ if (!r->first)
+ resp = r->last = r->first = xmalloc (sizeof(*resp));
+ else
+ {
+ resp = xmalloc (sizeof(*resp));
+ r->last->next = resp;
+ r->last = resp;
+ }
+ resp->next = NULL;
+ return resp;
+}
+
static void reread (Res r)
{
struct res_entry *resp;
char *line;
char *val_buf;
- int val_size, val_max = 1024;
+ int val_size, val_max = 256;
char path[256];
char fr_buf[1024];
FILE *fr;
no++;
fr_buf[no] = '\0';
- if (!r->first)
- resp = r->last = r->first = xmalloc (sizeof(*resp));
- else
- {
- resp = xmalloc (sizeof(*resp));
- r->last->next = resp;
- r->last = resp;
- }
- resp->next = NULL;
+ resp = add_entry (r);
resp->name = xmalloc (no+1);
resp->value = NULL;
strcpy (resp->name, fr_buf);
if (no < 0)
continue;
fr_buf[no++] = '\0';
- if (!r->first)
- resp = r->last = r->first = xmalloc (sizeof(*resp));
- else
- {
- resp = xmalloc (sizeof(*resp));
- r->last->next = resp;
- r->last = resp;
- }
- resp->next = NULL;
+ resp = add_entry (r);
resp->name = xmalloc (no);
strcpy (resp->name, fr_buf);
no = 0;
}
else
+ {
val_buf[val_size++] = fr_buf[no++];
+ if (val_size+1 >= val_max)
+ {
+ char *nb;
+
+ nb = xmalloc (val_max+=1024);
+ memcpy (nb, val_buf, val_size);
+ xfree (val_buf);
+ val_buf = nb;
+ }
+ }
}
}
}
re->value = xstrdup (value);
return;
}
- if (!r->first)
- re = r->last = r->first = xmalloc (sizeof(*re));
- else
- {
- re = xmalloc (sizeof(*re));
- r->last->next = re;
- r->last = re;
- }
- re->next = NULL;
+ re = add_entry (r);
re->name = xstrdup (name);
re->value = xstrdup (value);
}
int res_write (Res r)
{
+ struct res_entry *re;
+ char path[256];
+ FILE *fr;
if (!r->init)
reread (r);
+
+ strcpy (path, alex_path(r->name));
+
+ fr = fopen (path, "w");
+ if (!fr)
+ {
+ log (LOG_FATAL|LOG_ERRNO, "cannot create %s", path);
+ exit (1);
+ }
+
+ for (re = r->first; re; re=re->next)
+ {
+ int no = 0;
+ int lefts = strlen(re->name)+2;
+
+ if (!re->value)
+ fprintf (fr, "%s\n", re->name);
+ else
+ {
+ fprintf (fr, "%s: ", re->name);
+ while (lefts + strlen(re->value+no) > 78)
+ {
+ int i = 20;
+ int ind = no+ 78-lefts;
+ while (--i >= 0)
+ {
+ if (re->value[ind] == ' ')
+ break;
+ --ind;
+ }
+ if (i<0)
+ ind = no + 78 - lefts;
+ for (i = no; i != ind; i++)
+ putc (re->value[i], fr);
+ fprintf (fr, "\\\n");
+ no=ind;
+ lefts = 0;
+ }
+ fprintf (fr, "%s\n", re->value+no);
+ }
+ }
+ fclose (fr);
return 0;
}