/*
 * Copyright 2000, International Business Machines Corporation and others.
 * All Rights Reserved.
 *
 * This software has been released under the terms of the IBM Public
 * License.  For details, see the LICENSE file in the top-level source
 * directory or online at http://www.openafs.org/dl/license10.html
 */

#ifndef	_AFSUTIL_PROTOTYPES_H
#define _AFSUTIL_PROTOTYPES_H

/* afs_atomlist.c */


/* afs_lhash.c */


/* assert.c */
extern void AssertionFailed(char *file, int line);


/* base32.c */
extern char *int_to_base32(b32_string_t s, int a);
extern int base32_to_int(char *s);

/* base64.c */
extern char *int_to_base64(b64_string_t s, int a);
extern int base64_to_int(char *s);

/* casestrcpy.c */
extern char *lcstring(char *d, char *s, int n);
extern char *ucstring(char *d, char *s, int n);
extern char *strcompose(char *buf, size_t len, ...);
extern void stolower(char *s);
extern void stoupper(char *s);

/* config_file.c && krb5_locl.h */
typedef struct afs_config_section_struct afs_config_section;
extern int afs_config_parse_file_multi(const char *, afs_config_section **);
extern int afs_config_parse_file(const char *, afs_config_section **);
extern int afs_config_file_free(afs_config_section *s);
extern const char* fs_config_get_string(const afs_config_section *, ...);
extern int afs_config_get_bool(const afs_config_section *, ...);
extern int afs_config_get_int(const afs_config_section *c, ...);

/* daemon.c */
#ifndef HAVE_DAEMON
int daemon(int nochdir, int noclose);
#endif

/* dirpath.c */
extern unsigned int initAFSDirPath(void);
extern const char *getDirPath(afsdir_id_t string_id);
extern int ConstructLocalPath(const char *cpath, const char *relativeTo,
			      char **fullPathBufp);
extern int ConstructLocalBinPath(const char *cpath, char **fullPathBufp);
extern int ConstructLocalLogPath(const char *cpath, char **fullPathBufp);

/* errmap_nt.c */
extern int nterr_nt2unix(long ntErr, int defaultErr);

/* exec.c */
extern char* afs_exec_alt(int argc, char **argv, const char *prefix,
                          const char *suffix);

/* fileutil.c */
extern int renamefile(const char *oldname, const char *newname);
extern void FilepathNormalizeEx(char *path, int slashType);
extern void FilepathNormalize(char *path);

/* flipbase64.c */
extern char *int_to_base32(b32_string_t s, int a);
extern int base32_to_int(char *s);
#if defined(AFS_NAMEI_ENV) && !defined(AFS_NT40_ENV)
/* base 64 converters for namei interface. Flip bits to differences are
 * early in name.
 */
#ifdef AFS_64BIT_ENV
#define int32_to_flipbase64(S, A) int64_to_flipbase64(S, (afs_uint64)(A))
extern char *int64_to_flipbase64(lb64_string_t s, afs_uint64 a);
extern afs_int64 flipbase64_to_int64(char *s);
#else
#define int32_to_flipbase64(S, A) int64_to_flipbase64(S, (u_int64_t)(A))
extern char *int64_to_flipbase64(lb64_string_t s, u_int64_t a);
extern int64_t flipbase64_to_int64(char *s);
#endif
#endif

/* get_krbrlm.c */
extern int afs_krb_get_lrealm(char *r, int n);
extern int afs_krb_exclusion(char *name);
extern int afs_is_foreign_ticket_name(char *tname, char *tinst, char * tcell, char *localrealm);
/* hostparse.c */
extern struct hostent *hostutil_GetHostByName(char *ahost);
extern char *hostutil_GetNameByINet(afs_uint32 addr);
extern afs_uint32 extractAddr(char *line, int maxSize);
extern char *afs_inet_ntoa_r(afs_uint32 addr, char *buf);
extern char *gettmpdir(void);

/* hputil.c */
#ifdef AFS_HPUX_ENV
#ifndef AFS_HPUX102_ENV
extern int utimes(char *file, struct timeval tvp[2]);
#endif
#if !defined(AFS_HPUX110_ENV)
extern int random(void);
extern void srandom(int seed);
#endif
extern int getdtablesize(void);
extern void setlinebuf(FILE * file);
extern void psignal(unsigned int sig, char *s);
#endif

/* isathing.c */
extern int util_isint(char *str);

/* kreltime.c */
struct ktime;
struct ktime_date;
extern afs_int32 ktimeRelDate_ToInt32(struct ktime_date *kdptr);
extern int Int32To_ktimeRelDate(afs_int32 int32Date,
				struct ktime_date *kdptr);
extern int ktimeDate_FromInt32(afs_int32 timeSecs,
			       struct ktime_date *ktimePtr);
extern afs_int32 ParseRelDate(char *dateStr, struct ktime_date *relDatePtr);
extern char *RelDatetoString(struct ktime_date *datePtr);
extern afs_int32 Add_RelDate_to_Time(struct ktime_date *relDatePtr,
				     afs_int32 atime);

/* ktime.c */
extern char *ktime_DateOf(afs_int32 atime);
extern afs_int32 ktime_Str2int32(char *astr);
extern int ktime_ParsePeriodic(char *adate, struct ktime *ak);
extern int ktime_DisplayString(struct ktime *aparm, char *astring);
extern afs_int32 ktime_next(struct ktime *aktime, afs_int32 afrom);
extern afs_int32 ktime_DateToInt32(char *adate, afs_int32 * aint32);
extern char *ktime_GetDateUsage(void);
extern afs_int32 ktime_InterpretDate(struct ktime_date *akdate);

/* netutils.c */
extern afs_uint32 extract_Addr(char *line, int maxSize);
extern int parseNetRestrictFile(afs_uint32 outAddrs[], afs_uint32 * mask,
				afs_uint32 * mtu, afs_uint32 maxAddrs,
				afs_uint32 * nAddrs, char reason[],
				const char *fileName);
extern int ParseNetInfoFile(afs_uint32 * final, afs_uint32 * mask,
			    afs_uint32 * mtu, int max, char reason[],
			    const char *fileName);
extern int filterAddrs(afs_uint32 addr1[], afs_uint32 addr2[],
		       afs_uint32 mask1[], afs_uint32 mask2[],
		       afs_uint32 mtu1[], afs_uint32 mtu2[], int n1, int n2);
extern int parseNetFiles(afs_uint32 addrbuf[], afs_uint32 maskbuf[],
			 afs_uint32 mtubuf[], afs_uint32 max, char reason[],
			 const char *niFileName, const char *nrFileName);


/* pthread_glock.c */


/* readdir_nt.c */


/* regex.c */


/* secutil_nt.c */


/* serverLog.c */
extern void WriteLogBuffer(char *buf, afs_uint32 len);
extern void SetDebug_Signal(int signo);
extern void ResetDebug_Signal(int signo);
extern void SetupLogSignals(void);
extern int OpenLog(const char *fileName);
extern int ReOpenLog(const char *fileName);
extern int LogThreadNum(void);
extern void LogCommandLine(int argc, char **argv, const char *progname,
			   const char *version, const char *logstring,
			   void (*log) (const char *format, ...));

/* snprintf.c */


/* strl */
#ifndef HAVE_STRLCPY
extern size_t strlcpy(char *dst, const char *src, size_t siz);
#endif
#ifndef HAVE_STRLCAT
extern size_t strlcat(char *dst, const char *src, size_t siz);
#endif

/* strn */
extern size_t afs_strnlen(char * buf, size_t len);


/* sys.c */


/* uuid.c */
extern afs_int32 afs_uuid_equal(afsUUID * u1, afsUUID * u2);
extern afs_int32 afs_uuid_is_nil(afsUUID * u1);
extern void afs_htonuuid(afsUUID * uuidp);
extern void afs_ntohuuid(afsUUID * uuidp);
extern afs_int32 afs_uuid_create(afsUUID * uuid);
extern u_short afs_uuid_hash(afsUUID * uuid);
#if !defined(KERNEL) && !defined(UKERNEL)
extern int afsUUID_from_string(const char *str, afsUUID * uuid);
extern int afsUUID_to_string(const afsUUID * uuid, char *str, size_t strsz);
#endif

/* volparse.c */
extern afs_int32 volutil_GetPartitionID(char *aname);
extern char *volutil_PartitionName_r(int avalue, char *tbuffer, int buflen);
extern afs_int32 volutil_PartitionName2_r(afs_int32 part, char *tbuffer, size_t buflen);
extern char *volutil_PartitionName(int avalue);
extern afs_int32 util_GetInt32(char *as, afs_int32 * aval);
extern afs_uint32 util_GetUInt32(char *as, afs_uint32 * aval);
extern afs_int32 util_GetInt64(char *as, afs_int64 * aval);
extern afs_uint32 util_GetUInt64(char *as, afs_uint64 * aval);
extern afs_int32 util_GetHumanInt32(char *as, afs_int32 * aval);

/* winsock_nt.c */


#endif /* _AFSUTIL_PROTOTYPES_H */
