; ltrace.conf
;
; ~/.ltrace.conf will also be read, if it exists. The -F option may be
; used to suppress the automatic inclusion of both this file and
; ~/.ltrace.conf, and load a different config file or config files
; instead.

; Argument types:
; +		== May vary (ie, is a returned value) (prefix)
; void
; int
; uint		== (unsigned int)
; long
; ulong		== (unsigned long)
; octal		== (unsigned)			[written in octal]
; char
; short		== (short)
; ushort	== (unsigned short)
; addr		== (void *)			[unsigned, written in hexa]
; file		== (FILE *)						[TODO]
; format	== ((const char *), ...)	[printf() like]		[TODO]
; string	== (char *)
; string[argN]  == (char *)		[N>0]	[show only up to (arg N) bytes]
; string[eltN]  == (char *)		[N>0]	[show only up to (elt N) bytes]
; string[retval] == (char *)			[show only up to (return val) bytes]
; string[arg0]	== (char *)			[same as string[retval]]
; string[N]     == (char *)             [N>0]   [show only up to N bytes]
; ignore	== (any)			[ignore arg, output blank]
; type*		== (type *)			[pointer to any other type]
; enum (key=value,key=value,...)		[enumeration, see below]
; array(type,argN)
;		== (type[SIZE])			[array of (arg N) elements]
; array(type,eltN)
;		== (type[SIZE])			[array of (struct element N) elements]
; array(type,N)	== (type[N])			[array of N elements]
; struct(type,type,...)
;		== (struct {...})		[struct of several types]
;
; Backwards-compatibility:
; string0	== (char *)			[same as string[retval]]
; stringN	== (char *)		[N>0]	[same as string[argN]]



; Typedefs
;
; To make it easier to specify argument lists, you can use 'typedef'
; directives to avoid repeating complex parameter descriptors:
;
;   typedef color = enum(RED=1,BLUE=2,GREEN=3)
;   void draw_line(color,int,int,int,int)
;   void draw_square(color,int,int,int,int)
;
; Enumerations
;
; The syntax is a parenthesized list of key=value assignments, like so:
;   enum (F_DUPFD=0,F_GETFD=1,F_SETFD=2)
; an example usage might look like
;   int fcntl(int,enum (F_DUPFD=0,F_GETFD=1,F_SETFD=2))
;
; Arrays
;
; NOTE: Uses of array(...) alone are very rare. You almost always
; want array(...)*. The exceptions are when you have a fixed-size
; array.
;
; Structs
;
; NOTE: Uses of struct(...) alone are very rare. You almost always
; want struct(...)* (a pointer to a struct) anyway. Most compilers
; pass structs as pointers anyway, and those that don't are not yet
; supported. The one time when you want to use a non-pointer
; struct(...) type are when you have an array of structs, or a struct
; containing another struct.
;
; For example, if you have
;   struct s1 {
;	int y_size;
;	int * y;
;	int z[3];
;	struct { char c; } a;
;	struct { char c; } * b;
;   }
; and a function
;   void f(struct s1*)
; then the corresponding ltrace spec is
;   void f(struct(int,array(int,elt0),array(int,3),struct(char),struct(char)*)*)
; which, formatted similarly to the C declaration, looks like
;   void f(struct(
;                 int,
;                 array(int,elt0),
;                 array(int,3),
;                 struct(char),
;                 struct(char)*
;                )*
;         )


; arpa/inet.h
int inet_aton(string,addr);
string inet_ntoa(addr);			; It isn't a ADDR but an hexa number...
addr inet_addr(string);

; bfd.h
void bfd_init(void);
int bfd_set_default_target(string);
addr bfd_scan_vma(string, addr, int);
addr bfd_openr(string,string);
int bfd_check_format(addr,int);

; ctype.h
char tolower(char);
char toupper(char);
addr __ctype_b_loc(void);
addr __ctype_tolower_loc(void);
addr __ctype_toupper_loc(void);

; curses.h
int waddch(addr, char);
int mvprintw(int, int, format);
int wmove(addr, int, int);
int waddnstr(addr, string, int);
string tgoto(string, int, int);

; dirent.h
int closedir(addr);
addr opendir(string);
addr readdir(addr);
addr readdir64(addr);

; dlfcn.h
addr  dlopen(string, int);
string dlerror(void);
addr  dlsym(addr, string);
int dlclose(addr);

; errno.h
addr __errno_location(void);

; fcntl.h
int open(string,int,octal);		; WARNING: 3rd argument may not be there
int open64(string,int,octal);		; WARNING: 3rd argument may not be there

; fnmatch.h
int fnmatch(string, string, int);

; getopt.h
int getopt_long(int,addr,string,addr,int*);
int getopt_long_only(int,addr,string,addr,addr);

; grp.h
void endgrent(void);
addr getgrnam(string);
void setgrent(void);
addr getgrent(void);

; libintl.h
string __dcgettext(string,string,int);
string bindtextdomain(string, string);
string textdomain(string);

; libio.h
char _IO_getc(file);
int _IO_putc(char,file);

; locale.h
string setlocale(int, string);

; mcheck.h
void mtrace(void);
void muntrace(void);

; mntent.h
int endmntent(file);
file setmntent(string,string);
addr getmntent(addr);

; mqueue.h
int mq_open(string, int, octal, addr);  ; WARNING: 3rd and 4th arguments may not be there
int mq_close(int);
int mq_unlink(string);
int mq_getattr(int, addr);
int mq_setattr(int, addr, addr);
int mq_notify(int, addr);
int mq_send(int, string3, ulong, uint);
int mq_timedsend(int, string3, ulong, uint, addr);
long mq_receive(int, +string0, ulong, addr);
long mq_timedreceive(int, +string0, ulong, addr, addr);

; netdb.h
void endhostent(void);
void endnetent(void);
void endnetgrent(void);
void endprotoent(void);
void endservent(void);
void freeaddrinfo(addr);
string gai_strerror(int);
int getaddrinfo(string, string, addr, addr);
addr gethostbyaddr(string, uint, int);
addr gethostbyname(string);
addr gethostent(void);
int getnameinfo(addr, uint, string, uint, string, uint, uint);
addr getnetbyaddr(uint, int);
addr getnetbyname(string);
addr getnetent(void);
int getnetgrent(addr, addr, addr);
addr getprotobyname(string);
addr getprotobynumber(int);
addr getprotoent(void);
addr getservbyname(string, string);
addr getservbyport(int, string);
addr getservent(void);
void herror(string);
string hstrerror(int);
int rcmd(addr, ushort, string, string, string, addr);
int rcmd_af(addr, ushort, string, string, string, addr, int);
int rexec(addr, int, string, string, string, addr);
int rexec_af(addr, int, string, string, string, addr, int);
int rresvport (addr);
int rresvport_af (addr, int);
int ruserok(string, int, string, string);
int ruserok_af(string, int, string, string, int);
void sethostent(int);
void setnetent(int);
int setnetgrent(string);
void setprotoent(int);
void setservent(int);

; netinet/in.h
uint ntohs(uint);

; pcap.h
string pcap_lookupdev(addr);
addr pcap_open_live(string, int, int, int, addr);
int pcap_snapshot(addr);
int pcap_lookupnet(string, addr, addr, addr);
int pcap_compile(addr, addr, string, int, addr);

; pwd.h
string getpass(string);
void endpwent(void);
addr getpwnam(string);
void setpwent(void);

; readline/readline.h
string readline(string);

; signal.h
int kill(int,int);
addr signal(int,addr);
int sigemptyset(addr);
int sigfillset(addr);
int sigaddset(addr, int);
int sigdelset(addr, int);
int sigismember(addr, int);
int sigaction(int, addr, addr);
int sigprocmask(int, addr, addr);
int sigpending(addr);
int sigsuspend(addr);

; stdio.h
int fclose(file);
int feof(file);
int ferror(file);
int fflush(file);
char fgetc(file);
addr fgets(+string, int, file);
int fileno(file);
file fopen(string,string);
file fopen64(string,string);
int fprintf(file,format);
int fputc(char,file);
int fputs(string,file);
ulong fread(addr,ulong,ulong,file);
ulong fread_unlocked(addr,ulong,ulong,file);
ulong fwrite(string,ulong,ulong,file);
ulong fwrite_unlocked(string,ulong,ulong,file);
int pclose(addr);
void perror(string);
addr popen(string, string);
int printf(format);
int puts(string);
int remove(string);
int snprintf(+string2,ulong,format);
int sprintf(+string,format);
string tempnam(string,string);
int vfprintf(file,string,addr);
int vsnprintf(+string2,ulong,string,addr);
int setvbuf(file,addr,int,ulong);
void setbuf(file,addr);
void setbuffer(file,addr,ulong);
void setlinebuf(file);
int rename(string,string);

; stdlib.h
long __strtol_internal(string,addr,int);
ulong __strtoul_internal(string,addr,int);
int atexit(addr);
addr bsearch(string, addr, ulong, ulong, addr);
addr calloc(ulong, ulong);
void exit(int);
void free(addr);
string getenv(string);
int putenv(string);
int setenv(string,string,int);
void unsetenv(string);
addr malloc(ulong);
void qsort(addr,ulong,ulong,addr);
int random(void);
addr realloc(addr,ulong);
void srandom(uint);
int system(string);

; string.h
void bcopy(addr,addr,ulong);
void bzero(addr,ulong);
string basename(string);
string index(string,char);
addr memchr(string,char,ulong);
addr memcpy(addr,string3,ulong);
addr memset(addr,char,long);
string rindex(string,char);
addr stpcpy(addr,string);
int strcasecmp(string, string);
string strcat(string, string);
string strchr(string,char);
int strcoll(string,string);
ulong strlen(string);
int strcmp(string,string);
addr strcpy(addr,string);
addr strdup(string);
string strerror(int);
int strncmp(string,string,ulong);
addr strncpy(addr,string3,ulong);
string strrchr(string,char);
string strsep(addr,string);
ulong strspn(string,string);
ulong strcspn(string,string);
string strstr(string,string);
string strtok(string, string);

; sys/ioctl.h
int ioctl(int, int, addr);

; sys/socket.h
int socket(int,int,int);

; sys/stat.h
int __fxstat(int,int,addr);
int __xstat(int,string,addr);
int __lxstat(int,string,addr);
int __fxstat64(int,int,addr);
int __xstat64(int,string,addr);
int __lxstat64(int,string,addr);
int chmod(string,octal);
int fchmod(int,octal);
int mkfifo(string,octal);
octal umask(octal);

; sys/utsname.h
int uname(addr);

; sys/vfs.h
int statfs(string,addr);

; syslog.h
void closelog(void);
void openlog(string,int,int);
void syslog(int,format);

; term.h
int tputs(string, int, addr);

; termios.h
int tcgetattr(int,addr);
int tcsetattr(int,int,addr);

; time.h
string ctime(addr);
int gettimeofday(addr, addr);
addr gmtime(addr);
addr localtime(addr);
ulong strftime(+string2,ulong,string,addr);
long time(addr);

; unistd.h
void _exit(int);
int access(string, int);
uint alarm(uint);
int chdir(string);
int chown(string,int,int);
int close(int);
string crypt(string,string);
int dup2(int,int);
int execlp(string,string,addr,addr,addr);
int execv(string,addr);
int fchdir(int);
int fork(void);
int ftruncate(int,ulong);
string2 getcwd(addr,ulong);
int getdomainname(+string2,ulong);
int geteuid(void);
int getegid(void);
int getgid(void);
int gethostname(+string2,ulong);
string getlogin(void);
int getopt(int,addr,string);
int getpid(void);
int getppid(void);
int getuid(void);
int getpgrp(void);
int setpgrp(void);
int getpgid(int);
int isatty(int);
int link(string,string);
int mkdir(string,octal);
long read(int, +string[retval], ulong);
int rmdir(string);
int seteuid(uint);
int setgid(int);
int sethostname(+string2,ulong);
int setpgid(int,int);
int setreuid(uint, uint);
int setuid(int);
uint sleep(uint);
int symlink(string,string);
int sync(void);
int truncate(string,ulong);
string ttyname(int);
int unlink(string);
void usleep(uint);
long write(int, string3, ulong);
addr sbrk(long);
int getpagesize(void);
long lseek(int,long,int);
int pipe(addr);

; utmp.h
void endutent(void);
addr getutent(void);
void setutent(void);

; wchar.h
int fwide(addr, int);

; sys/wait.h
int wait(addr);
int waitpid(int,addr,int);

; X11/Xlib.h
void XCloseDisplay(addr);
int XMapWindow(addr,addr);
addr XOpenDisplay(string);

; sys/acl.h
int acl_add_perm(addr,uint);
int acl_calc_mask(addr);
int acl_clear_perms(addr);
int acl_copy_entry(addr,addr);
int acl_copy_ext(addr,addr,int);
addr acl_copy_int(addr);
int acl_create_entry(addr,addr);
int acl_delete_def_file(string);
int acl_delete_entry(addr,addr);
int acl_delete_perm(addr,uint);
addr acl_dup(addr);
int acl_free(addr);
addr acl_from_text(string);
int acl_get_entry(addr,int,addr);
addr acl_get_fd(int);
addr acl_get_file(string,int);
int acl_get_permset(addr,addr);
addr acl_get_qualifier(addr);
int acl_get_tag_type(addr,addr);
addr acl_init(int);
int acl_set_fd(int,addr);
int acl_set_file(string,int,addr);
int acl_set_permset(addr,addr);
int acl_set_qualifier(addr,addr);
int acl_set_tag_type(addr,int);
int acl_size(addr);
string acl_to_text(addr,addr);
itn acl_valid(addr);

; acl/libacl.h
int acl_check(addr,addr);
int acl_cmp(addr,addr);
int acl_entries(addr);
int acl_equiv_mode(addr,addr);
string acl_error(int);
int acl_extended_fd(int);
int acl_extended_file(string);
addr acl_from_mode(octal);
int acl_get_perm(addr,uint);
string acl_to_any_text(addr,string,char,int);

; SYSCALLS
addr  SYS_brk(addr);
int   SYS_close(int);
int   SYS_execve(string,addr,addr);
void  SYS_exit(int);
void  SYS_exit_group(int);
int   SYS_fork(void);
int   SYS_getcwd(+string2,ulong);
int   SYS_getpid(void);
;addr SYS_mmap(addr,ulong,int,int,int,long);
int   SYS_munmap(addr,ulong);
int   SYS_open(string,int,octal);
int   SYS_personality(uint);
long  SYS_read(int,+string0,ulong);
int   SYS_stat(string,addr);
octal SYS_umask(octal);
int   SYS_uname(addr);
long  SYS_write(int,string3,ulong);
int   SYS_sync(void);
int   SYS_setxattr(string,string,addr,uint,int);
int   SYS_lsetxattr(string,string,addr,uint,int);
int   SYS_fsetxattr(int,string,addr,uint,int);
int   SYS_getxattr(string,string,addr,uint);
int   SYS_lgetxattr(string,string,addr,uint);
int   SYS_fgetxattr(int,string,addr,uint);
int   SYS_listxattr(string,addr,uint);
int   SYS_llistxattr(string,addr,uint);
int   SYS_flistxattr(int,addr,uint);
int   SYS_removexattr(string,string);
int   SYS_lremovexattr(string,string);
int   SYS_fremovexattr(int,string);
