Sophie

Sophie

distrib > Mandriva > 2009.1 > x86_64 > by-pkgid > d90d9d7fd893f8089d43570a6d730497 > files > 11

afbackup-debug-3.4-2mdv2008.0.x86_64.rpm

/****************** Start of $RCSfile: fileutil.h,v $  ****************
*
* $Source: /home/alb/afbackup/afbackup-3.3.9beta4/RCS/fileutil.h,v $
* $Id: fileutil.h,v 1.6 2005/07/31 15:42:10 alb Exp alb $
* $Date: 2005/07/31 15:42:10 $
* $Author: alb $
*
*
******* description ***********************************************
*
*
*
*******************************************************************/

#include <lconf.h>

#ifndef	__FILE_UTIL_H
#define	__FILE_UTIL_H	__FILE_UTIL_H

#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <x_types.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

#include <genutils.h>

/* auxiliary macros */
#ifdef	O_NONBLOCK
#define	NONBLOCKING_FLAGS O_NONBLOCK
#endif
#if	!defined(__hpux) && !defined(hpux)	/* f... HP */
#ifdef	O_NDELAY
#ifdef	O_NONBLOCK
#undef	NONBLOCKING_FLAGS
#define	NONBLOCKING_FLAGS	( O_NONBLOCK | O_NDELAY )
#else
#undef	NONBLOCKING_FLAGS
#define	NONBLOCKING_FLAGS	O_NDELAY
#endif
#endif	/* O_NDELAY */
#endif	/* HP Grrr */
#ifndef	NONBLOCKING_FLAGS
#error	Cannot build. Neither O_NONBLOCK nor O_NDELAY defined.
#endif
#define	INV_NONBLOCKING_FLAGS	( ~ NONBLOCKING_FLAGS )
#if	defined(__hpux) || defined(hpux)	/* f... HP */
#ifdef	O_NDELAY
#undef	INV_NONBLOCKING_FLAGS
#define	INV_NONBLOCKING_FLAGS	( ~ (NONBLOCKING_FLAGS | O_NDELAY))
#endif	/* O_NDELAY */
#endif	/* O_NDELAY */

#ifndef	O_BINARY
#define	O_BINARY	0
#endif

typedef	struct _param_file_entry {
  void		*entry_ptr;
  Uns32		*num_entries;  
  UChar		*pattern;
  X_Type	type;
} ParamFileEntry;

typedef struct _find_params {
  UChar		**excl_dirs;
  UChar		**names;
  UChar		**excl_names;
  Uns32		options;
  time_t	newer_than;
  time_t	older_than;
  Int32		(*errfunc)(UChar *, void *);
  void		*errfunc_param;
  UChar		*excl_filename;
  UChar		**fstypes_to_search;
  UChar		**fstypes_to_skip;
  UChar		**fstypes_to_prune;
  int		*interrupted;
} FindParams;

#define	FIND_NO_DIRS		1
#define	FIND_NO_FILES		(FIND_NO_DIRS << 1)
#define	FIND_NO_SLINKS		(FIND_NO_DIRS << 2)
#define	FIND_NO_CDEVS		(FIND_NO_DIRS << 3)
#define	FIND_NO_BDEVS		(FIND_NO_DIRS << 4)
#define	FIND_NO_FIFOS		(FIND_NO_DIRS << 5)
#define	FIND_NO_SOCKS		(FIND_NO_DIRS << 6)
#define	FIND_FOLLOW_SLINKS	(FIND_NO_DIRS << 7)
#define	FIND_LOCAL_DEV		(FIND_NO_DIRS << 8)
#define	FIND_DEPTH		(FIND_NO_DIRS << 9)
#define	FIND_CMP_CTIME		(FIND_NO_DIRS << 10)

#define	FIND_ONLY_DIRS		(FIND_NO_FILES | FIND_NO_SLINKS	\
				| FIND_NO_CDEVS | FIND_NO_BDEVS \
				| FIND_NO_FIFOS | FIND_NO_SOCKS)


#define	KFILE_SORT	1
#define	KFILE_SORTN	(1 << 1)
#define	KFILE_LOCKED	(1 << 10)

#ifdef	__cplusplus
extern	"C"	{
#endif

extern	Int32	save_insert(UChar *, UChar *,
				Int32 (*)(FILE *, void *), void *);
extern	Int32	read_param_file(UChar *, ParamFileEntry *, Int32,
				UChar *, UChar *);
extern	Int32	sscanXValue(UChar *, void *, X_Type, Int32 *);
extern	Int32	fscanXValue(FILE *, void *, X_Type, Int32 *);
extern	UChar	*find_program(UChar *);
extern	Int32	cleanpath(UChar *);
extern	Int32	cleanpath__(UChar *);
extern	UChar	*mkabspath(UChar *, UChar *);
extern	UChar	*get_cwd(UChar *, Int32);
extern	Int32	mkrelpath(UChar *);
extern	UChar	*resolve_path(UChar *, UChar *);
extern	UChar	*resolve_path__(UChar *, UChar *);
extern	Int32	find1(UChar *, FindParams *,
			Int32 (*)(UChar *, void *, struct stat *), void *);
extern	Int32	find(UChar **, FindParams *,
			Int32 (*)(UChar *, void *, struct stat *), void *);
extern	UChar	**fnglob1(UChar *);
extern	UChar	**fnglob(UChar *);
extern	Int32	copy_file(UChar *, UChar *);
extern	UChar	*hidden_filename(UChar *);
extern	Int32	make_dirpath(UChar *, Uns32, uid_t, gid_t);
extern	Int32	kfile_insert(UChar *, UChar *, UChar *, Uns32);
extern	Int32	kfile_delete(UChar *, UChar *, Uns32);
extern	UChar	*kfile_get(UChar *, UChar *, Uns32);
extern	KeyValuePair	*kfile_getall(UChar *, Int32 *, Uns32);
extern	void	kfile_freeall(KeyValuePair *, Int32);
extern	Int32	add_to_int_list_file(UChar *, Int32);
extern	Int32	*get_list_from_int_list_file(UChar *, Int32 *);
extern	UChar	*tmp_name(UChar *);
extern	int	tmp_file(UChar *);
extern	FILE	*tmp_fp(UChar *);
extern	UChar	*check_commands_executable(Flag, UChar *, ...);
extern	Int32	mkbasedir(UChar *, mode_t, uid_t, gid_t);
extern	Int32	mkdirpath(UChar *, mode_t, uid_t, gid_t);
extern	Int32	perms_from_string(UChar *, mode_t *);
extern	void	close_fd_ranges(Uns32Range *);
extern	Int32	pipethrough(int, int);
extern	Flag	fsentry_modifyable(UChar *);

#ifdef	__cplusplus
}
#endif

#if	defined(unix) || defined(__unix)

#define	FN_DIRSEPCHR		'/'
#define	FN_DIRSEPSTR		"/"
#define	FN_DIRSEPLEN		1
#define	FN_CURDIR		"."
#define	FN_PARENTDIR		".."
#define	FN_ISPATH(s)		(strchr((s), FN_DIRSEPCHR))
#define	FN_ISABSPATH(s)		(*(s) == FN_DIRSEPCHR)
#define	FN_LASTDIRDELIM(s)	(strrchr((s), FN_DIRSEPCHR))
#define	FN_BASENAME(s)		(strrchr((s), FN_DIRSEPCHR) ? 		\
				(UChar *) strrchr((s), FN_DIRSEPCHR) + 1 : (s))
#define	FN_STRDBLDIRSEP(s)	(strstr((s), "//"))
#define	FN_STREMPTYDIRSEP(s)	(strstr((s), "/./"))
#define	FN_ISDIRSEP(c)		((c) == FN_DIRSEPCHR)
#define	FN_ISROOTDIR(s)		(FN_ISDIRSEP(*(s)) && ! *((s) + 1))
#define	FN_LEADINGDUMMY(s)	(*(s) == '.' && FN_ISDIRSEP(*((s) + 1)))
#define	FN_TRAILINGDUMMY(s)	(strlen(s) >= 2 &&	\
				*((s) + strlen(s) - 1) == '.' &&	\
				FN_ISDIRSEP(*((s) + strlen(s) - 2)))
#define	FN_FIRSTDIRSEP(s)	(strchr((s), FN_DIRSEPCHR))

#define	ENV_PATHSEPCHR		':'

#define	ESCAPE_CHARACTER	'\\'

#define	NULLFILE		"/dev/null"
#ifndef	TMPDIR
#define	FN_TMPDIR		"/tmp"
#else
#define	FN_TMPDIR		TMPDIR
#endif

#define	DEFAULT_LOCKDIRS	{			\
		"/var/locks", "/var/lock", "/var/run",	\
		"/var/spool/locks", "/var/spool/lock", 	\
		"/var/tmp", FN_TMPDIR, NULL,		\
}

#endif	/* defined(unix) || defined(__unix) */

#ifdef	WINDOWS_LIKE

#define	FN_DIRSEPCHR		'\\'
#define	FN_DIRSEPSTR		"\\"
#define	FN_DIRSEPLEN		1
#define	FN_CURDIR		"."
#define	FN_PARENTDIR		".."
#define	FN_ISDIRSEP(c)	((c) == '/' || (c) == '\\')
#define	FN_ISPATH(s)	(strchr((s), '\\') || strchr((s), '/') ||	\
				(isalpha(*(s)) && *((s) + 1) == ':'))
#define	FN_ISABSPATH(s)	(FN_ISDIRSEP(*(s)) ||				\
				(isalpha(*(s)) && *((s) + 1) == ':' &&	\
				FN_ISDIRSEP(*((s) + 2))))
#define	FN_LASTDIRDELIM(s)	(strrchr(s, '/') ? strrchr(s, '/') :	\
				(strrchr(s, '\\') ? strrchr(s, '\\') :	\
				(isalpha(*(s)) && *((s) + 1) == ':') ?	\
				s + 2 : NULL))
#define	FN_BASENAME(s)	(strrchr(s, '/') ? strrchr(s, '/') + 1 :	\
			(strrchr(s, '\\') ? strrchr(s, '\\') + 1 :	\
			(isalpha(*(s)) && *((s) + 1) == ':') ? s + 2 : (s)))
#define	FN_STRDBLDIRSEP(s)						\
		(strstr((s), "//") ? strstr((s), "//") : strstr((s), "\\\\"))
#define	FN_STREMPTYDIRSEP(s)	(strstr((s), "/./") ? strstr((s), "/./") : \
				(strstr((s), "/.\\") ? strstr((s), "/.\\") : \
				(strstr((s), "\\./") ? strstr((s), "\\./") : \
				strstr((s), "\\.\\"))))
#define	FN_ISROOTDIR(s)	((FN_ISDIRSEP(*(s)) && ! *((s) + 1)) ||		\
				(isalpha(*(s)) && *((s) + 1) == ':'	\
				&& FN_ISDIRSEP(*((s) + 2)) && ! *((s) + 3)))
#define	FN_LEADINGDUMMY(s)	(*(s) == '.' && FN_ISDIRSEP(*((s) + 1)))
#define	FN_TRAILINGDUMMY(s)	(strlen(s) >= 2 &&	\
				*((s) + strlen(s) - 1) == '.' &&	\
				FN_ISDIRSEP(*((s) + strlen(s) - 2)))
#define	FN_FIRSTDIRSEP(s)	(strchr((s), '/') ? strchr((s), '/') :	\
					strchr((s), '\\'))

#define	ENV_PATHSEPCHR		';'

#define	ESCAPE_CHARACTER	'\t'	/* don't know, what to do here */

#define	NULLFILE		"nul"
#ifndef	TMPDIR
#define	FN_TMPDIR		"c:\\temp"
#else
#define	FN_TMPDIR		TMPDIR
#endif

#endif	/* defined(WINDOWS_LIKE) */

#endif	/* ! __FILE_UTIL_H */

#ifndef	_FN_MATCH_H

#define	_FN_MATCH_H	_FN_MATCH_H

/* Bits set in the FLAGS argument to `fn_match'.  */
#define	GFNM_PATHNAME	(1 << 0) /* No wildcard can ever match `/'.  */
#define	GFNM_NOESCAPE	(1 << 1) /* Backslashes don't quote special chars.  */
#define	GFNM_PERIOD	(1 << 2) /* Leading `.' is matched only explicitly.  */

#define	GFNM_FILE_NAME	GFNM_PATHNAME /* Preferred GNU name.  */
#define	GFNM_LEADING_DIR	(1 << 3) /* Ignore `/...' after a match.  */
#define	GFNM_CASEFOLD	(1 << 4) /* Compare without regard to case.  */

/* Value returned by `fn_match' if STRING does not match PATTERN.  */
#define	GFNM_NOMATCH	1

#ifdef	__cplusplus
extern "C" {
#endif

/* Match STRING against the filename pattern PATTERN,
   returning zero if it matches, GFNM_NOMATCH if not.  */
extern Int32 fn_match(UChar *, UChar *, Int32);

#ifdef	__cplusplus
}
#endif

#if !defined(GFNM_CASEFOLD) && defined(GFNM_IGNORECASE)
#define GFNM_CASEFOLD    GFNM_IGNORECASE
#endif

#endif /* defined(_FN_MATCH_H) */

/************ end of $RCSfile: fileutil.h,v $ ******************/