-/* $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-2011 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
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 <stdio.h>
#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
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);
}
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] != '/')
{
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];
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;
}
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab