X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Fupdate_path.c;h=9cc66322e506d267af3e99144d7e188bb8914bf5;hp=b4eec12e685cbdaf6f05540c8dd292e8ad5721d0;hb=89d16cf15eda0e4802d18b8ad09bd3653508ebfc;hpb=fc83d98d346711f446d9f9a29cc2ff0eee398053 diff --git a/index/update_path.c b/index/update_path.c index b4eec12..9cc6632 100644 --- a/index/update_path.c +++ b/index/update_path.c @@ -1,8 +1,5 @@ -/* $Id: update_path.c,v 1.1 2006-05-30 13:21:16 adam Exp $ - Copyright (C) 1995-2006 - Index Data ApS - -This file is part of the Zebra server. +/* This file is part of the Zebra server. + Copyright (C) 1994-2009 Index Data Zebra is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -15,9 +12,9 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with Zebra; see the file LICENSE.zebra. If not, write to the -Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ #include @@ -37,17 +34,17 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "index.h" -static void repositoryExtractR(ZebraHandle zh, int deleteFlag, char *rep, - int level) +static void repositoryExtractR(ZebraHandle zh, char *rep, int level, + enum zebra_recctrl_action_t action) { struct dir_entry *e; int i; - size_t rep_len = strlen (rep); + size_t rep_len = strlen(rep); - e = dir_open (rep, zh->path_reg, zh->m_follow_links); + e = dir_open(rep, zh->path_reg, zh->m_follow_links); if (!e) return; - yaz_log (YLOG_LOG, "dir %s", rep); + yaz_log(YLOG_LOG, "dir %s", rep); if (rep[rep_len-1] != '/') rep[rep_len] = '/'; else @@ -56,21 +53,21 @@ static void repositoryExtractR(ZebraHandle zh, int deleteFlag, char *rep, for (i=0; e[i].name; i++) { char *ecp; - strcpy (rep +rep_len+1, e[i].name); - if ((ecp = strrchr (e[i].name, '/'))) + strcpy(rep +rep_len+1, e[i].name); + if ((ecp = strrchr(e[i].name, '/'))) *ecp = '\0'; switch (e[i].kind) { case dirs_file: - zebra_extract_file (zh, NULL, rep, deleteFlag); + zebra_extract_file(zh, NULL, rep, action); break; case dirs_dir: - repositoryExtractR (zh, deleteFlag, rep, level+1); + repositoryExtractR(zh, rep, level+1, action); break; } } - dir_free (&e); + dir_free(&e); } @@ -82,15 +79,15 @@ void repositoryShow(ZebraHandle zh, const char *path) Dict dict; struct dirs_info *di; - if (!(dict = dict_open_res (zh->reg->bfs, FMATCH_DICT, 50, 0, 0, zh->res))) + if (!(dict = dict_open_res(zh->reg->bfs, FMATCH_DICT, 50, 0, 0, zh->res))) { - yaz_log (YLOG_FATAL, "dict_open fail of %s", FMATCH_DICT); + yaz_log(YLOG_FATAL, "dict_open fail of %s", FMATCH_DICT); return; } strncpy(src, path, sizeof(src)-1); src[sizeof(src)-1]='\0'; - src_len = strlen (src); + src_len = strlen(src); if (src_len && src[src_len-1] != '/') { @@ -98,16 +95,18 @@ void repositoryShow(ZebraHandle zh, const char *path) src[++src_len] = '\0'; } - di = dirs_open (dict, src, zh->m_flag_rw); + di = dirs_open(dict, src, zh->m_flag_rw); - while ( (dst = dirs_read (di)) ) - yaz_log (YLOG_LOG, "%s", dst->path); - dirs_free (&di); - dict_close (dict); + while ((dst = dirs_read(di))) + yaz_log(YLOG_LOG, "%s", dst->path); + dirs_free(&di); + dict_close(dict); } static void repositoryExtract(ZebraHandle zh, - int deleteFlag, const char *path) + const char *path, + enum zebra_recctrl_action_t action) + { struct stat sbuf; char src[1024]; @@ -117,51 +116,39 @@ static void repositoryExtract(ZebraHandle zh, if (zh->path_reg && !yaz_is_abspath(path)) { - strcpy (src, zh->path_reg); - strcat (src, "/"); + strcpy(src, zh->path_reg); + strcat(src, "/"); } else *src = '\0'; - strcat (src, path); - ret = zebra_file_stat (src, &sbuf, zh->m_follow_links); + strcat(src, path); + ret = zebra_file_stat(src, &sbuf, zh->m_follow_links); - strcpy (src, path); + strcpy(src, path); if (ret == -1) - yaz_log (YLOG_WARN|YLOG_ERRNO, "Cannot access path %s", src); + yaz_log(YLOG_WARN|YLOG_ERRNO, "Cannot access path %s", src); else if (S_ISREG(sbuf.st_mode)) - zebra_extract_file (zh, NULL, src, deleteFlag); + zebra_extract_file(zh, NULL, src, action); else if (S_ISDIR(sbuf.st_mode)) - repositoryExtractR (zh, deleteFlag, src, 0); + repositoryExtractR(zh, src, 0, action); else - yaz_log (YLOG_WARN, "Skipping path %s", src); + yaz_log(YLOG_WARN, "Skipping path %s", src); } -static void repositoryExtractG(ZebraHandle zh, const char *path, - int deleteFlag) + +ZEBRA_RES zebra_update_from_path(ZebraHandle zh, const char *path, + enum zebra_recctrl_action_t action) { if (!strcmp(path, "") || !strcmp(path, "-")) { char src[1024]; while (scanf("%1020s", src) == 1) - repositoryExtract(zh, deleteFlag, src); + repositoryExtract(zh, src, action); } else - repositoryExtract(zh, deleteFlag, path); -} - -ZEBRA_RES zebra_update_from_path(ZebraHandle zh, const char *path) -{ - assert (path); - repositoryExtractG(zh, path, 0); - return ZEBRA_OK; -} - -ZEBRA_RES zebra_delete_from_path(ZebraHandle zh, const char *path) -{ - assert (path); - repositoryExtractG(zh, path, 1); + repositoryExtract(zh, path, action); return ZEBRA_OK; }