1/* 2 * Copyright (c) 1990,1993 Regents of The University of Michigan. 3 * All Rights Reserved. See COPYRIGHT. 4 */ 5 6#ifndef AFPD_FORK_H 7#define AFPD_FORK_H 1 8 9#include <stdio.h> 10#include <sys/cdefs.h> 11 12#include <netatalk/endian.h> 13#include <atalk/adouble.h> 14#include "volume.h" 15#include "directory.h" 16 17struct file_key { 18 dev_t dev; 19 ino_t inode; 20}; 21 22struct ofork { 23 struct file_key key; 24 struct adouble *of_ad; 25 struct vol *of_vol; 26 cnid_t of_did; 27 uint16_t of_refnum; 28 int of_flags; 29 struct ofork **prevp, *next; 30// struct ofork *of_d_prev, *of_d_next; 31}; 32 33#define OPENFORK_DATA (0) 34#define OPENFORK_RSCS (1<<7) 35 36#define OPENACC_RD (1<<0) 37#define OPENACC_WR (1<<1) 38#define OPENACC_DRD (1<<4) 39#define OPENACC_DWR (1<<5) 40 41/* ofork.of_flags bits */ 42#define AFPFORK_OPEN (1<<0) 43#define AFPFORK_RSRC (1<<1) 44#define AFPFORK_DATA (1<<2) 45#define AFPFORK_DIRTY (1<<3) 46#define AFPFORK_ACCRD (1<<4) 47#define AFPFORK_ACCWR (1<<5) 48#define AFPFORK_ACCMASK (AFPFORK_ACCRD | AFPFORK_ACCWR) 49#define AFPFORK_MODIFIED (1<<6) /* used in FCE for modified files */ 50 51#ifdef AFS 52extern struct ofork *writtenfork; 53#endif 54 55#define of_name(a) (a)->of_ad->ad_m_name 56/* in ofork.c */ 57extern struct ofork *of_alloc (struct vol *, struct dir *, 58 char *, u_int16_t *, const int, 59 struct adouble *, 60 struct stat *); 61extern void of_dealloc (struct ofork *); 62extern struct ofork *of_find (const u_int16_t); 63extern struct ofork *of_findname (const struct vol *vol, struct path *); 64extern int of_rename (const struct vol *, 65 struct ofork *, 66 struct dir *, const char *, 67 struct dir *, const char *); 68extern int of_flush (const struct vol *); 69extern void of_pforkdesc (FILE *); 70extern int of_stat (const struct vol *vol, struct path *); 71extern int of_statdir (struct vol *vol, struct path *); 72extern int of_closefork (struct ofork *ofork); 73extern void of_closevol (const struct vol *vol); 74extern void of_close_all_forks(void); 75extern struct adouble *of_ad (const struct vol *, struct path *, struct adouble *); 76 77#ifdef HAVE_ATFUNCS 78extern struct ofork *of_findnameat(int dirfd, struct path *path); 79extern int of_fstatat(int dirfd, struct path *path); 80#endif /* HAVE_ATFUNCS */ 81 82 83/* in fork.c */ 84extern int flushfork (struct ofork *); 85extern int getforkmode (struct adouble *, int , off_t ); 86 87/* FP functions */ 88int afp_openfork (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 89int afp_bytelock (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 90int afp_getforkparams (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 91int afp_setforkparams (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 92int afp_read (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 93int afp_write (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 94int afp_flushfork (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 95int afp_flush (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 96int afp_closefork (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 97 98int afp_bytelock_ext (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 99int afp_read_ext (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 100int afp_write_ext (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 101int afp_syncfork (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen); 102#endif 103