X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fatalk%2Futil.h;h=d6209ed93c86cf624ba3292c4cd98096cb3b8aab;hb=e83a5199e4f35ceea335dc3075b23e8d983e7642;hp=21bb3d7cc15ca93114b2c32d8b1d97e58290f348;hpb=e2e08139bd9a3ee958c15d117417ae15b1bf6970;p=netatalk.git diff --git a/include/atalk/util.h b/include/atalk/util.h index 21bb3d7c..d6209ed9 100644 --- a/include/atalk/util.h +++ b/include/atalk/util.h @@ -1,5 +1,11 @@ -/* - * $Id: util.h,v 1.15 2009-11-08 22:12:40 didg Exp $ +/*! + * @file + * Netatalk utility functions + * + * Utility functions for these areas: \n + * * sockets \n + * * locking \n + * * misc UNIX function wrappers, eg for getcwd */ #ifndef _ATALK_UTIL_H @@ -18,8 +24,26 @@ #define EXITERR_CONF 2 /* error in config files/cmd line parameters */ #define EXITERR_SYS 3 /* local system error */ - -extern int sys_ftruncate (int fd, off_t length); +/* Print a SBT and exit */ +#define AFP_PANIC(why) \ + do { \ + netatalk_panic(why); \ + abort(); \ + } while(0); + +/* LOG assert errors */ +#ifndef NDEBUG +#define AFP_ASSERT(b) \ + do { \ + if (!(b)) { \ + AFP_PANIC(#b); \ + } \ + } while(0); +#else +#define AFP_ASSERT(b) +#endif /* NDEBUG */ + +#define STRCMP(a,b,c) (strcmp(a,c) b 0) #ifdef WITH_SENDFILE extern ssize_t sys_sendfile (int __out_fd, int __in_fd, off_t *__offset,size_t __count); @@ -36,17 +60,22 @@ extern int atalk_aton (char *, struct at_addr *); extern void bprint (char *, int); extern int strdiacasecmp (const char *, const char *); extern int strndiacasecmp (const char *, const char *, size_t); -extern pid_t server_lock (char * /*program*/, char * /*file*/, - int /*debug*/); +extern pid_t server_lock (char * /*program*/, char * /*file*/, int /*debug*/); extern void fault_setup (void (*fn)(void *)); +extern void netatalk_panic(const char *why); #define server_unlock(x) (unlink(x)) +/* strlcpy and strlcat are used by pam modules */ +#ifndef UAM_MODULE_EXPORT +#define UAM_MODULE_EXPORT +#endif + #ifndef HAVE_STRLCPY -size_t strlcpy (char *, const char *, size_t); +UAM_MODULE_EXPORT size_t strlcpy (char *, const char *, size_t); #endif #ifndef HAVE_STRLCAT -size_t strlcat (char *, const char *, size_t); +UAM_MODULE_EXPORT size_t strlcat (char *, const char *, size_t); #endif #ifndef HAVE_DLFCN_H @@ -85,49 +114,7 @@ extern void *mod_symbol (void *, const char *); * locking.c ******************************************************************/ -/* - * Function: lock_reg - * - * Purpose: lock a file with fctnl - * - * Arguments: - * - * fd (r) File descriptor - * cmd (r) cmd to fcntl, only F_SETLK is usable here - * type (r) F_RDLCK, F_WRLCK, F_UNLCK - * offset (r) byte offset relative to l_whence - * whence (r) SEEK_SET, SEEK_CUR, SEEK_END - * len (r) no. of bytes (0 means to EOF) - * - * Returns: 0 on success, -1 on failure - * fcntl return value and errno - * - * Effects: - * - * Function called by macros to ease locking. - */ extern int lock_reg(int fd, int cmd, int type, off_t offest, int whence, off_t len); - -/* - * Macros: read_lock, write_lock, un_lock - * - * Purpose: lock and unlock files - * - * Arguments: - * - * fd (r) File descriptor - * offset (r) byte offset relative to l_whence - * whence (r) SEEK_SET, SEEK_CUR, SEEK_END - * len (r) no. of bytes (0 means to EOF) - * - * Returns: 0 on success, -1 on failure - * fcntl return value and errno - * - * Effects: - * - * Nice locking macros. - */ - #define read_lock(fd, offset, whence, len) \ lock_reg((fd), F_SETLK, F_RDLCK, (offset), (whence), (len)) #define write_lock(fd, offset, whence, len) \ @@ -135,101 +122,23 @@ extern int lock_reg(int fd, int cmd, int type, off_t offest, int whence, off_t l #define unlock(fd, offset, whence, len) \ lock_reg((fd), F_SETLK, F_UNLCK, (offset), (whence), (len)) -#endif - /****************************************************************** * socket.c ******************************************************************/ -/* - * Function: setnonblock - * - * Purpose: set or unset non-blocking IO on a fd - * - * Arguments: - * - * fd (r) File descriptor - * cmd (r) 0: disable non-blocking IO, ie block - * <>0: enable non-blocking IO - * - * Returns: 0 on success, -1 on failure - * - * Effects: - * - * fd's file flags. - */ extern int setnonblock(int fd, int cmd); - -/* - * Function: getip_string - * - * Purpose: convert an IPv4 or IPv6 address to a static string using inet_ntop - * - * Arguments: - * - * sa (r) pointer to an struct sockaddr - * - * Returns: pointer to a static string cotaining the converted address as string. - * On error pointers to "0.0.0.0" or "::0" are returned. - * - * Effects: - * - * IPv6 mapped IPv4 addresses are returned as IPv4 addreses eg - * ::ffff:10.0.0.0 is returned as "10.0.0.0". - */ +extern ssize_t readt(int socket, void *data, const size_t length, int setnonblocking, int timeout); extern const char *getip_string(const struct sockaddr *sa); - -/* - * Function: getip_string - * - * Purpose: return port number from struct sockaddr - * - * Arguments: - * - * sa (r) pointer to an struct sockaddr - * - * Returns: port as unsigned int - * - * Effects: none. - */ extern unsigned int getip_port(const struct sockaddr *sa); - -/* - * Function: apply_ip_mask - * - * Purpose: apply netmask to IP (v4 or v6) - * - * Arguments: - * - * ai (rw) pointer to an struct sockaddr - * mask (r) number of maskbits - * - * Returns: void - * - * Effects: - * - * Modifies IP address in sa->sin[6]_addr-s[6]_addr. The caller is responsible - * for passing a value for mask that is sensible to the passed address, - * eg 0 <= mask <= 32 for IPv4 or 0<= mask <= 128 for IPv6. mask > 32 for - * IPv4 is treated as mask = 32, mask > 128 is set to 128 for IPv6. - */ extern void apply_ip_mask(struct sockaddr *ai, int maskbits); - -/* - * Function: compare_ip - * - * Purpose: Compare IP addresses for equality - * - * Arguments: - * - * sa1 (r) pointer to an struct sockaddr - * sa2 (r) pointer to an struct sockaddr - * - * Returns: Addresses are converted to strings and compared with strcmp and - * the result of strcmp is returned. - * - * Effects: - * - * IPv6 mapped IPv4 addresses are treated as IPv4 addresses. - */ extern int compare_ip(const struct sockaddr *sa1, const struct sockaddr *sa2); + +/****************************************************************** + * unix.c + *****************************************************************/ + +extern const char *getcwdpath(void); +extern char *stripped_slashes_basename(char *p); +extern int lchdir(const char *dir); + +#endif /* _ATALK_UTIL_H */