Third party developers wishing to add Netatalk support to their applications have two choices
Please note that you need at least Netatalk 3.0.1 for approach 2 to work, because in earlier Netatalk versions some necessary headers are not installed correctly.
This examples links a trivial example program with the libatalk shared library. Assuming Netatalk has been installed to /usr/local/netatalk, compiling backup_demo.c is done like this:
#ifdef HAVE_CONFIG_H
#endif
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#define ERROR(...) \
do { \
_log(__VA_ARGS__); \
exit(1); \
} while (0)
static void _log(char *fmt, ...)
{
int len;
static char logbuffer[1024];
va_list args;
va_start(args, fmt);
len = vsnprintf(logbuffer, 1023, fmt, args);
va_end(args);
logbuffer[1023] = 0;
printf("%s\n", logbuffer);
}
int main(
int argc,
char **argv)
{
const char *file, *newfile;
struct stat st;
if (argc != 3) {
ERROR("usage: backup_demo FILE NEWFILE");
}
file = argv[1];
newfile = argv[2];
ERROR("No Netatalk 3 afp.conf found", file);
}
ERROR("Couldn't load volumes");
}
ERROR("Not a Netatalk volume for file \"%s\"", file);
}
printf("Volume adouble version v2\n");
printf("Volume adouble version ea\n");
} else {
ERROR("Unknown adouble version");
}
ERROR("Couldn't open metadata of \"%s\"", file);
}
printf(
"%d bytes in adouble metadata buffer ad->ad_data\n",
ad_size);
ERROR("Couldn't open resource of \"%s\"", file);
}
printf("File has resource fork of size: %d, fd: %d\n", ad.ad_rlen,
if (lstat(newfile, &st) != 0) {
ERROR("Can't stat \"%s\", must exist, create with eg touch", newfile);
}
!= 0) {
ERROR("Couldn't create metadata/resource of \"%s\"", newfile);
}
memcpy(adnew.ad_data, ad.ad_data,
ad_size);
ERROR("Couln't copy resource to \"%s\"", newfile);
}
#if 0
#endif
return 0;
}
#define ADFLAGS_CREATE
Definition adouble.h:247
#define AD_DATE_CREATE
Definition adouble.h:319
#define AD_VERSION2
Definition adouble.h:46
#define AD_DATASZ_EA
Definition adouble.h:128
#define AD_DATE_START
Definition adouble.h:326
#define ADFLAGS_RDWR
Definition adouble.h:245
void ad_init(struct adouble *, const struct vol *)
Definition ad_open.c:2314
int ad_open(struct adouble *ad, const char *path, int adflags,...)
Open data-, metadata(header)- or resource fork.
Definition ad_open.c:2380
off_t ad_size(const struct adouble *, uint32_t)
Definition ad_size.c:17
#define AD_DATE_UNIX
Definition adouble.h:325
#define AD_DATE_BACKUP
Definition adouble.h:321
int ad_flush(struct adouble *)
Definition ad_flush.c:484
int ad_close(struct adouble *, int)
Definition ad_flush.c:521
#define AD_DATASZ2
Definition adouble.h:120
#define AD_VERSION_EA
Definition adouble.h:47
#define ADFLAGS_HF
Definition adouble.h:234
#define ADFLAGS_RDONLY
Definition adouble.h:246
#define ad_reso_fileno(ad)
Definition adouble.h:399
#define AD_DATE_MODIFY
Definition adouble.h:320
#define ADFLAGS_RF
Definition adouble.h:233
#define AD_DATE_ACCESS
Definition adouble.h:322
int ad_setdate(struct adouble *, unsigned int, uint32_t)
Definition ad_date.c:67
void setuplog(const char *loglevel, const char *logfile, const bool log_us_timestamp)
Definition logger.c:565
struct vol * getvolbypath(AFPObj *obj, const char *path)
Search volume by path, creating user home vols as necessary.
Definition netatalk_conf.c:2966
int load_afp_conf_vols(AFPObj *obj, lv_flags_t flags)
Initialize volumes and load ini configfile.
Definition netatalk_conf.c:2635
int afp_config_parse(AFPObj *obj, char *processname)
Definition netatalk_conf.c:3206
vfs_copyfile_fn vfs_copyfile
Definition vfs.h:109
Definition include/atalk/volume.h:33
int v_adouble
Definition include/atalk/volume.h:49
char * v_path
Definition include/atalk/volume.h:38
struct vfs_ops * vfs
Definition include/atalk/volume.h:69
#define main
Definition test_afppasswd.c:721
#define NULL
Definition utf8util.c:47