X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Ftrav.c;h=f2f4f35ca4c142d5fdec583181a5cbf1934ec660;hb=1891a7ab41007b52166ac5027389f0191193f997;hp=27a803c3cbe20b2495848809c52253056e03a618;hpb=51a52e1b014d5237581f74379916b8ce92cafef7;p=idzebra-moved-to-github.git diff --git a/index/trav.c b/index/trav.c index 27a803c..f2f4f35 100644 --- a/index/trav.c +++ b/index/trav.c @@ -1,10 +1,26 @@ /* - * 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.6 1995-11-17 15:54:42 adam + * Started work on virtual directory structure. + * + * 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. * */ @@ -17,10 +33,10 @@ #include #include -#include +#include #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; @@ -41,10 +57,10 @@ static void repository_extract_r (int cmd, char *rep) 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; } } @@ -60,35 +76,31 @@ void copy_file (const char *dst, const char *src) 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); } @@ -100,20 +112,20 @@ void del_file (const char *dst) 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); @@ -142,11 +154,11 @@ void repository_del_tree (int cmd, char *dst, char *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++; @@ -159,7 +171,7 @@ void repository_del_tree (int cmd, char *dst, char *src) } } -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; @@ -175,13 +187,13 @@ void repository_update_r (int cmd, char *dst, char *src) 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; } @@ -222,13 +234,13 @@ void repository_update_r (int cmd, char *dst, char *src) 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++; @@ -243,11 +255,11 @@ void repository_update_r (int cmd, char *dst, char *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++; @@ -261,11 +273,11 @@ void repository_update_r (int cmd, char *dst, char *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++; @@ -275,7 +287,8 @@ void repository_update_r (int cmd, char *dst, char *src) 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]; @@ -284,9 +297,21 @@ void repository (int cmd, const char *rep, const char *base_path) 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); } +void repositoryUpdate (const char *src, char *databaseName) +{ + struct dir_entry *e_src; + int i_src = 0; + struct stat fs_src; + size_t src_len = strlen (src); + + e_src = dir_open (src); + + if (!e_src) + return; +}