netatalk  4.5.0
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
nad_cp.c File Reference

Cp copies source files to target files. More...

#include <errno.h>
#include <libgen.h>
#include <limits.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <bstrlib.h>
#include <atalk/adouble.h>
#include <atalk/queue.h>
#include <atalk/unix.h>
#include <atalk/util.h>
#include <atalk/vfs.h>
#include <atalk/volume.h>
#include "nad.h"
#include "ftw.h"

Macros

#define STRIP_TRAILING_SLASH(p)
 
#define PHYSPAGES_THRESHOLD   (32*1024)
 
#define BUFSIZE_MAX   (2*1024*1024)
 
#define MAXPHYS   (64 * 1024)
 
#define BUFSIZE_SMALL   (MAXPHYS)
 
#define YESNO   "(y/n [n]) "
 

Enumerations

enum  op { FILE_TO_FILE , FILE_TO_DIR , DIR_TO_DNE }
 

Functions

static int copy (const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf)
 
static int ftw_copy_file (const struct FTW *, const char *, const struct stat *, int)
 
static int ftw_copy_link (const struct FTW *, const char *, const struct stat *, int)
 
static int setfile (const struct stat *, int)
 
static void upfunc (void)
 
static void usage_cp (void)
 
int nad_cp (int argc, char *argv[], AFPObj *obj)
 

Variables

static char emptystring [] = ""
 
PATH_T to = { to.p_path, emptystring, "" }
 
int fflag
 
int iflag
 
int nflag
 
int pflag
 
int vflag
 
mode_t mask
 
cnid_t ppdid
 
cnid_t pdid
 
cnid_t did
 
static afpvol_t svolume
 
static afpvol_t dvolume
 
static enum op type
 
static int Rflag
 
static int badcp
 
static int rval
 
static int ftw_options = FTW_MOUNT | FTW_PHYS | FTW_ACTIONRETVAL
 

Detailed Description

Cp copies source files to target files.

The global PATH_T structure "to" always contains the path to the current target file. Since fts(3) does not change directories, this path can be either absolute or dot-relative.

The basic algorithm is to initialize "to" and use fts(3) to traverse the file hierarchy rooted in the argument list. A trivial case is the case of 'cp file1 file2'. The more interesting case is the case of 'cp file1 file2 ... fileN dir' where the hierarchy is traversed and the path (relative to the root of the traversal) is appended to dir (stored in "to") to form the final target path.

Macro Definition Documentation

◆ BUFSIZE_MAX

#define BUFSIZE_MAX   (2*1024*1024)

Maximum buffer size in bytes - do not allow it to grow larger than this

◆ BUFSIZE_SMALL

#define BUFSIZE_SMALL   (MAXPHYS)

◆ MAXPHYS

#define MAXPHYS   (64 * 1024)

Small (default) buffer size in bytes. It's inefficient for this to be smaller than MAXPHYS

◆ PHYSPAGES_THRESHOLD

#define PHYSPAGES_THRESHOLD   (32*1024)

Memory strategy threshold, in pages: if physmem is larger then this, use a large buffer

◆ STRIP_TRAILING_SLASH

#define STRIP_TRAILING_SLASH (   p)
Value:
{ \
while ((p).p_end > (p).p_path + 1 && (p).p_end[-1] == '/') \
*--(p).p_end = 0; \
}
size_t p
Definition dircache.c:256

◆ YESNO

#define YESNO   "(y/n [n]) "

Enumeration Type Documentation

◆ op

enum op
Enumerator
FILE_TO_FILE 
FILE_TO_DIR 
DIR_TO_DNE 

Function Documentation

◆ copy()

static int copy ( const char *  fpath,
const struct stat *  sb,
int  tflag,
struct FTW ftwbuf 
)
static

◆ ftw_copy_file()

static int ftw_copy_file ( const struct FTW entp,
const char *  spath,
const struct stat *  sp,
int  dne 
)
static

◆ ftw_copy_link()

static int ftw_copy_link ( const struct FTW p,
const char *  spath,
const struct stat *  sstp,
int  exists 
)
static

◆ nad_cp()

int nad_cp ( int  argc,
char *  argv[],
AFPObj obj 
)

◆ setfile()

static int setfile ( const struct stat *  fs,
int  fd 
)
static

◆ upfunc()

static void upfunc ( void  )
static

◆ usage_cp()

static void usage_cp ( void  )
static

Variable Documentation

◆ badcp

int badcp
static

◆ did

cnid_t did

◆ dvolume

afpvol_t dvolume
static

◆ emptystring

char emptystring[] = ""
static

◆ fflag

int fflag

◆ ftw_options

int ftw_options = FTW_MOUNT | FTW_PHYS | FTW_ACTIONRETVAL
static

◆ iflag

int iflag

◆ mask

mode_t mask

◆ nflag

int nflag

◆ pdid

cnid_t pdid

◆ pflag

int pflag

◆ ppdid

cnid_t ppdid

◆ Rflag

int Rflag
static

◆ rval

int rval
static

◆ svolume

afpvol_t svolume
static

◆ to

PATH_T to = { to.p_path, emptystring, "" }

◆ type

enum op type
static

◆ vflag

int vflag