1/*
2   Copyright (c) 2009 Frank Lahm <franklahm@gmail.com>
3
4   This program is free software; you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 2 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13*/
14
15#ifndef AD_H
16#define AD_H
17
18#if !defined(__FreeBSD__)
19# define _XOPEN_SOURCE 600
20#endif
21
22#include <sys/types.h>
23#include <sys/stat.h>
24#include <signal.h>
25
26#include <atalk/ftw.h>
27#include <atalk/volinfo.h>
28#include <atalk/cnid.h>
29
30#define DIR_DOT_OR_DOTDOT(a) \
31        ((strcmp(a, ".") == 0) || (strcmp(a, "..") == 0))
32
33#ifndef TIMESPEC_TO_TIMEVAL
34#define TIMESPEC_TO_TIMEVAL(tv, ts) { \
35    (tv)->tv_sec = (ts)->tv_sec; \
36    (tv)->tv_usec = (ts)->tv_nsec / 1000; \
37    }
38#endif
39
40enum logtype {STD, DBG};
41
42#define SLOG(...)                             \
43    _log(STD, __VA_ARGS__)
44
45#define ERROR(...)                              \
46    do {                                        \
47        _log(STD, __VA_ARGS__);                 \
48        exit(1);                                \
49    } while (0)
50
51typedef struct {
52    struct volinfo volinfo;
53    struct vol     volume;
54    char           db_stamp[ADEDLEN_PRIVSYN];
55} afpvol_t;
56
57extern int log_verbose;             /* Logging flag */
58extern void _log(enum logtype lt, char *fmt, ...);
59
60extern int ad_ls(int argc, char **argv);
61extern int ad_cp(int argc, char **argv);
62extern int ad_rm(int argc, char **argv);
63extern int ad_mv(int argc, char **argv);
64extern int ad_find(int argc, char **argv);
65
66/* ad_util.c */
67extern int openvol(const char *path, afpvol_t *vol);
68extern void closevol(afpvol_t *vol);
69extern cnid_t cnid_for_path(const afpvol_t *vol, const char *path, cnid_t *did);
70extern cnid_t cnid_for_paths_parent(const afpvol_t *vol, const char *path, cnid_t *did);
71extern char *utompath(const struct volinfo *volinfo, const char *upath);
72extern int convert_dots_encoding(const afpvol_t *svol, const afpvol_t *dvol, char *path, size_t buflen);
73
74typedef struct {
75    char *p_end;/* pointer to NULL at end of path */
76    char *target_end;/* pointer to end of target base */
77    char p_path[MAXPATHLEN + 2];/* pointer to the start of a path */
78} PATH_T;
79
80extern PATH_T to;
81extern int fflag, iflag, lflag, nflag, pflag, vflag;
82
83#endif /* AD_H */
84