/*
- * Copyright (C) 1995, Index Data I/S
+ * Copyright (C) 1994-1995, Index Data I/S
* All rights reserved.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: trav.c,v $
- * Revision 1.1 1995-09-01 14:06:36 adam
+ * Revision 1.5 1995-10-17 18:02:09 adam
+ * New feature: databases. Implemented as prefix to words in dictionary.
+ *
+ * Revision 1.4 1995/09/28 09:19:46 adam
+ * xfree/xmalloc used everywhere.
+ * Extract/retrieve method seems to work for text records.
+ *
+ * Revision 1.3 1995/09/06 16:11:18 adam
+ * Option: only one word key per file.
+ *
+ * Revision 1.2 1995/09/04 12:33:43 adam
+ * Various cleanup. YAZ util used instead.
+ *
+ * Revision 1.1 1995/09/01 14:06:36 adam
* Split of work into more files.
*
*/
#include <fcntl.h>
#include <ctype.h>
-#include <util.h>
+#include <alexutil.h>
#include "index.h"
-static void repository_extract_r (int cmd, char *rep)
+static void repository_extract_r (int cmd, char *rep, char *databaseName)
{
struct dir_entry *e;
int i;
switch (fs.st_mode & S_IFMT)
{
case S_IFREG:
- file_extract (cmd, rep, rep);
+ file_extract (cmd, rep, rep, databaseName);
break;
case S_IFDIR:
- repository_extract_r (cmd, rep);
+ repository_extract_r (cmd, rep, databaseName);
break;
}
}
if (d_fd == -1)
{
- log (LOG_FATAL|LOG_ERRNO, "Cannot create %s", dst);
+ logf (LOG_FATAL|LOG_ERRNO, "Cannot create %s", dst);
exit (1);
}
if (s_fd == -1)
{
- log (LOG_FATAL|LOG_ERRNO, "Cannot open %s", src);
- exit (1);
- }
- if (!(buf = malloc (4096)))
- {
- log (LOG_FATAL|LOG_ERRNO, "malloc");
+ logf (LOG_FATAL|LOG_ERRNO, "Cannot open %s", src);
exit (1);
}
+ buf = xmalloc (4096);
while ((r=read (s_fd, buf, 4096))>0)
for (w = 0; w < r; w += i)
{
i = write (d_fd, buf + w, r - w);
if (i == -1)
{
- log (LOG_FATAL|LOG_ERRNO, "write");
+ logf (LOG_FATAL|LOG_ERRNO, "write");
exit (1);
}
}
if (r)
{
- log (LOG_FATAL|LOG_ERRNO, "read");
+ logf (LOG_FATAL|LOG_ERRNO, "read");
exit (1);
}
- free (buf);
+ xfree (buf);
close (d_fd);
close (s_fd);
}
void del_dir (const char *dst)
{
- log (LOG_DEBUG, "rmdir of %s", dst);
+ logf (LOG_DEBUG, "rmdir of %s", dst);
if (rmdir (dst) == -1)
- log (LOG_ERRNO|LOG_WARN, "rmdir");
+ logf (LOG_ERRNO|LOG_WARN, "rmdir");
}
-void repository_update_r (int cmd, char *dst, char *src);
+void repository_update_r (int cmd, char *dst, char *src, char *databaseName);
-void repository_add_tree (int cmd, char *dst, char *src)
+void repository_add_tree (int cmd, char *dst, char *src, char *databaseName)
{
mkdir (dst, 0755);
- repository_update_r (cmd, dst, src);
+ repository_update_r (cmd, dst, src, databaseName);
}
-void repository_del_tree (int cmd, char *dst, char *src)
+void repository_del_tree (int cmd, char *dst, char *src, char *databaseName)
{
size_t dst_len = strlen (dst);
size_t src_len = strlen (src);
switch (fs_dst.st_mode & S_IFMT)
{
case S_IFREG:
- file_extract ('d', dst, dst);
+ file_extract ('d', dst, dst, databaseName);
del_file (dst);
break;
case S_IFDIR:
- repository_del_tree (cmd, dst, src);
+ repository_del_tree (cmd, dst, src, databaseName);
break;
}
i_dst++;
}
}
-void repository_update_r (int cmd, char *dst, char *src)
+void repository_update_r (int cmd, char *dst, char *src, char *databaseName)
{
struct dir_entry *e_dst, *e_src;
int i_dst = 0, i_src = 0;
if (!e_dst)
{
dir_free (&e_src);
- repository_add_tree (cmd, dst, src);
+ repository_add_tree (cmd, dst, src, databaseName);
return;
}
else if (!e_src)
{
dir_free (&e_dst);
- repository_del_tree (cmd, dst, src);
+ repository_del_tree (cmd, dst, src, databaseName);
return;
}
case S_IFREG:
if (fs_src.st_ctime > fs_dst.st_ctime)
{
- file_extract ('d', dst, dst);
- file_extract ('a', src, dst);
+ file_extract ('d', dst, dst, databaseName);
+ file_extract ('a', src, dst, databaseName);
copy_file (dst, src);
}
break;
case S_IFDIR:
- repository_update_r (cmd, dst, src);
+ repository_update_r (cmd, dst, src, databaseName);
break;
}
i_src++;
switch (fs_src.st_mode & S_IFMT)
{
case S_IFREG:
- file_extract ('a', src, dst);
+ file_extract ('a', src, dst, databaseName);
copy_file (dst, src);
break;
case S_IFDIR:
- repository_add_tree (cmd, dst, src);
+ repository_add_tree (cmd, dst, src, databaseName);
break;
}
i_src++;
switch (fs_dst.st_mode & S_IFMT)
{
case S_IFREG:
- file_extract ('d', dst, dst);
+ file_extract ('d', dst, dst, databaseName);
del_file (dst);
break;
case S_IFDIR:
- repository_del_tree (cmd, dst, src);
+ repository_del_tree (cmd, dst, src, databaseName);
break;
}
i_dst++;
dir_free (&e_src);
}
-void repository (int cmd, const char *rep, const char *base_path)
+void repository (int cmd, const char *rep, const char *base_path,
+ char *databaseName)
{
char rep_tmp1[2048];
char rep_tmp2[2048];
if (base_path)
{
strcpy (rep_tmp2, base_path);
- repository_update_r (cmd, rep_tmp2, rep_tmp1);
+ repository_update_r (cmd, rep_tmp2, rep_tmp1, databaseName);
}
else
- repository_extract_r (cmd, rep_tmp1);
+ repository_extract_r (cmd, rep_tmp1, databaseName);
}