//
// aegis - project change supervisor
// Copyright (C) 1993, 1994, 1999, 2002, 2004-2008 Peter Miller
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// .
//
#ifndef AEGIS_GLUE_H
#define AEGIS_GLUE_H
#include
#include
#include
struct stat;
struct utimbuf;
struct flock;
struct string_list_ty; // forward
class nstring; // forward
class nstring_list; // forward
int copyfile(const char *src, const char *dst);
int catfile(const char *path);
int read_whole_dir(const char *path, char **data, long *datalen);
/**
* The read_whole_dir__wl function may be used to read the list of file
* names contained in a directory. It is returned as a string_list_ty.
* The string list is initialized (via string_list_constructor) before
* the results are appended.
*
* @param path
* The path to read the directory entries of.
* @param wl
* The string list to hold the answers.
* It is clear()ed first.
* @returns
* -1 on error, 0 on success
*/
int read_whole_dir__wl(const char *path, struct string_list_ty *wl);
/**
* The read_whole_dir__wl function may be used to read the list of file
* names contained in a directory. It is returned as a nstring_list.
*
* @param path
* The path to read the directory entries of.
* @param wl
* The string list to hold the answers.
* It is clear()ed first.
* @returns
* -1 on error, 0 on success
*/
int read_whole_dir__wl(const nstring &path, nstring_list &wl);
/**
* The read_whole_dir__wla function may be used to read the list of
* file names contained in a directory and append them to the given
* string list. It is returned as a string_list_ty.
*
* @param path
* The path to read the directory entries of.
* @param wl
* The string list to hold the answers.
* It is NOT clear()ed first.
* @returns
* -1 on error, 0 on success
*/
int read_whole_dir__wla(const char *path, struct string_list_ty *wl);
/**
* The read_whole_dir__wla function may be used to read the list of
* file names contained in a directory and append them to the given
* string list. It is returned as a string_list_ty.
*
* @param path
* The path to read the directory entries of.
* @param wl
* The string list to hold the answers.
* It is NOT clear()ed first.
* @returns
* -1 on error, 0 on success
*/
int read_whole_dir__wla(const nstring &path, nstring_list &wl);
int file_compare(const char *, const char *);
int file_fingerprint(const char *path, char *buf, int max);
int rmdir_bg(const char *path);
int rmdir_tree(const char *path);
int glue_access(const char *path, int mode);
int glue_catfile(const char *path);
int glue_chmod(const char *path, int mode);
int glue_chown(const char *path, int uid, int gid);
int glue_close(int fd);
int glue_creat(const char *path, int mode);
int glue_copyfile(const char *src, const char *dst);
int glue_fclose(FILE *);
int glue_file_compare(const char *, const char *);
int glue_file_fingerprint(const char *path, char *buf, int max);
int glue_fcntl(int fd, int cmd, struct flock *);
int glue_ferror(FILE *);
int glue_fflush(FILE *);
int glue_fgetc(FILE *);
FILE *glue_fopen(const char *path, const char *mode);
int glue_fputc(int, FILE *);
char *glue_getcwd(char *buf, int max);
int glue_link(const char *p1, const char *p2);
int glue_lstat(const char *path, struct stat *st);
int glue_mkdir(const char *path, int mode);
int glue_open(const char *path, int mode, int perm);
long glue_pathconf(const char *path, int mode);
long glue_read(int fd, void *data, size_t len);
int glue_readlink(const char *path, char *buf, int max);
int glue_read_whole_dir(const char *path, char **data, long *datalen);
int glue_rename(const char *p1, const char *p2);
int glue_rmdir(const char *path);
int glue_rmdir_bg(const char *path);
int glue_rmdir_tree(const char *path);
int glue_stat(const char *path, struct stat *st);
int glue_symlink(const char *name1, const char *name2);
int glue_ungetc(int, FILE *);
int glue_unlink(const char *path);
int glue_utime(const char *path, struct utimbuf *);
int glue_lutime(const char *path, struct utimbuf *);
int glue_write(int fd, const void *data, long len);
int glue_fwrite(char *, long, long, FILE *);
#ifndef CONF_NO_seteuid
#ifndef aegis_glue_disable
//
// when seteuid works,
// use the functions directly,
// not the glue functions
//
#define glue_access access
#define glue_catfile catfile
#define glue_chmod chmod
#define glue_chown chown
#define glue_close ::close
#define glue_creat creat
#define glue_copyfile copyfile
#define glue_fclose fclose
#define glue_fcntl fcntl
#define glue_ferror ferror
#define glue_fflush fflush
#define glue_fgetc getc
#define glue_file_compare file_compare
#define glue_file_fingerprint file_fingerprint
#define glue_fopen fopen
#define glue_fputc putc
#define glue_getcwd getcwd
#define glue_link link
#define glue_lstat lstat
#define glue_mkdir mkdir
#define glue_open ::open
#define glue_pathconf pathconf
#define glue_read ::read
#define glue_readlink readlink
#define glue_read_whole_dir read_whole_dir
#define glue_rename rename
#define glue_rmdir rmdir
#define glue_rmdir_bg rmdir_bg
#define glue_rmdir_tree rmdir_tree
#define glue_stat stat
#define glue_symlink symlink
#define glue_ungetc ungetc
#define glue_unlink unlink
#define glue_utime utime
#define glue_lutime lutime
#define glue_write ::write
#define glue_fwrite fwrite
#endif // aegis_glue_disable
#endif // CONF_NO_seteuid
#endif // AEGIS_GLUE_H