The given sizes are estimations, each function added as single function within a binary that much bytes to the overall size.
It is however not possible to give exact numbers, these depend on how much the compiler can optimize for each call. What is different each time, depending on the circumstances.
To complicate things more, some functions will be inlined, others will be reused.
And, the choosen linker script will have it’s (sometimes surprising) influence.
Before the include of minilib.h, the minilib has to be configured.
The proposed way is to use the supplied script minimake,
which translates config options to define flags,
and pipes the minilib header to gcc.
The config file is a bash script and can be a separate file, or within one of the source files.
Since it is a bash script, it is possible to e.g.
source other files from within the configuration.
A simple example is given below:
#if 0 // has to be the first line # mini_start is the start routine. # Most possibly needed mini_start # define and compile puts mini_puts INCLUDESRC # this is a comment. # INCLUDESRC has to be defined for one sourcefile. # without it only the defines, and no implementations are parsed. # shrink the binary with tools/shrinkelf SHRINKELF # use the linker script onlytext # meaning, only text and stack sections are loaded LDSCRIPT onlytext # return, and the #endif statement are the last lines of the config return #endif int main(int argc, char *argv[] ){ puts("Hello, world!"); return(0); }
Only functions defined are going to be built.
There are several examples given within the folder examples,
the files within the folder test are there for regression tests,
but might also be helpful.
To compile a c source file with embedded configuration (as in the example above),
type minimake --config example.c -o example example.c.
(Shortcut minimake -mlc example.c)
(minimake needs to be in the standard search path)
If you’d like to "install" the minimake, simply copy the script minimake into /usr/local/bin,
or wherever your executables live and can be found.
The minilib itself, as well as the supllied linker scripts are embedded into minimake,
and extracted and piped to gcc on demand.
(There are compatibility headers provided, e.g. stdio.h;
these are however not stable and will most probably not work.
I’m going to update them, as soon other and more important things are finished.)
In addition to the switches, which are built of the function’s name and the prefix mini_;
e.g. mini_puts, these switches are defined for the configuration of minilib:
- mini_start
-
Built the start routine, which is needed for the execution of the binary.
- mini_buf 512
-
the buf size in Bytes (here 512Bytes), which is used by minilib for input/output functions, the globals and malloc/free. Uncomment this, if you do not need globals or functions, depending on the buffer.
- globals_on_stack
-
put the minibuf and all globals onto the stack (this enables to omit all sections besides text and stack of the binary, when nowhere else globals (ans static variables) are used, for aggressive size optimization) The address of the globals is going to be stored within a fixed cpu register. (r15 at amd64) The globals are stored at the end of the stack, behind the first return addresse. (They are setup within startup.c; however, startup calls main, but never returns itself, instead the function exits via syscall. So it is not possible to overwrite the return addresse with a Bufferoverflow. In case you have to work with unsafe userinput, please have a look into map_protected)
- mini_errno
-
generate the code for the errno variable.
This generates some overhead
(a few bytes per every syscall, and every function which sets errno; globals are generated as well)
Without the switch, syscalls do return the negative errno value on failure. - mini_syscalls
-
define the syscall wrappers, starting with sys_
- HEADERGUARDS
-
define the headerguards, which hopefully prevent the inclusion of the standard library headers.
- OPTFLAG -Os
-
optimization Flag. Os,O1,O2 should be save. O3 causes sometimes troubles
e.g. OPTFLAG '-g -O0' (compile with debug info)
- OPTIMIZE
-
add some speed optimizations, mainly vectorizations for 64bit.
This comes naturally with a memory penalty,
yet, the raise in memory usage is neglectible. (a few hundred bytes) - STRIPFLAG
-
stripflag ( defaults to -s)
Leaving STRIPFLAG alone removes the flag parameter from gcc’s commandline. - SOURCES file1 file2 …
-
(optional)
define other files as sources, to be compiled into the binary. - BINARY name
-
(optional)
Set the name of the resulting binary.+ (supplied to gcc as -o name) - INCLUDESRC
-
Build minilib with source.
Without this switch, only defines and declarations are included.
When building with several object files, most probably you should
enable this flag only for one object file.
It’s also possible to pass the switch via a define flag to gcc.
(-DINCLUDESRC) - LDSCRIPT default
-
The ldscript to use
Defines, which executable sections are going to be built.
Can be one of:-
default: .text .data .rodata .bss (.stack)
-
default_execstack: .text .data .rodata .bss (.stack)
The stack is executable, what is needed for e.g. closures+ -
textandbss: .text .bss (.stack)
-
onlytext: .text (.stack)
-
onlytext_tiny: .text (the stack is defined by the kernel, and made executable)
Despite general meaning, an executable stack isn’t harmful on its own,and even widely used. It just is important (as always), to check user input against e.g. overflows.
-
- SHRINKELF
-
Shrink the compiled binary with shrinkelf.
Aggressively strip the elf headers. - DEBUG
-
generate debug info (-O0 -g). Overwrites OPTFLAG, STRIPFLAG and SHRINKELF
- DEFINE def value
-
add a #define def value "def" and "value" have to be within apostrophes, when they contain either brackets,spaces, or other operators. Multilines are possible, with a preceding \\ before the linebreak.
- _itobin
-
int _itobin(int i, char*buf, int prec, int groups )
Size: ~188B ../src/conversions/itobin.c l.8
- _itohex
-
int _itohex(int i,char* buf,int padding, int capitals)
Size: ~250B ../src/conversions/itohex.c l.6
- atoi
-
int atoi(const char c)
*convert a string to an integer Size: ~32B ../src/conversions/atoi.c l.3 manpage: atoi
- atol
-
long atol(const char c)
*convert a string to a long integer Size: ~108B ../src/conversions/atol.c l.3 manpage: atol
- dtodec
-
int dtodec(double d, char* buf, int precision)
Defines: uitodec
Size: ~760B ../src/conversions/dtodec.c l.10
- itoHEX
-
int itoHEX(int i,char* buf,int padding)
convert a number to hexadecimal representation with big capitals. the conversion assumes a size of 32bits for integers, negative values are represented as they are stored internally. ( -1 is 0xFFFFFFFF, -2 0xFFFFFFFE, ... )
Size: ~250B ../src/conversions/itohex.c l.65
- itobin
-
#define itobin(A,B,…) _itobin(A,B,VARARG(SHIFT(VA_ARGS),0), VARARG(SHIFT(ARG( VA_ARGS )),32) )
convert a number to a binary representation. the conversion assumes a size of 32bits for integers, negative values are represented as they are stored internally. ( -1 is 11111111111111111111111111111111, -2 11111111111111111111111111111110, ...)
- itodec
-
int itodec(int i, char buf, int prec, char limiter, char pad )
*Defines: uitodec
Size: ~555B ../src/conversions/itodec.c l.123
- itohex
-
int itohex(int i,char* buf,int padding)
convert a number to hexadecimal representation. the conversion assumes a size of 32bits for integers, negative values are represented as they are stored internally. ( -1 is 0xffffffff, -2 0xfffffffe, ... )
Size: ~247B ../src/conversions/itohex.c l.53
- itooct
-
int itooct(int i, char *buf)
convert int to octal return the number of chars written.
- ltodec
-
int ltodec(long i, char buf, int prec, char limiter )
*Defines: ultodec
Size: ~323B ../src/conversions/ltodec.c l.3
- strtol
-
long int strtol(const char c, const char **endp, int base)
*convert a string to a long integer
conversion
Size: ~252B ../src/string/strtol.c l.4 manpage: strtol
- uitodec
-
int ATTR_OPT("Os")uitodec(unsigned int i, char *buf, int prec, char limiter, char pad )
convert int to string. prec: precision, e.g. 4=> 0087 pad: 0 (pad with spaces), or the char to pad
- ultodec
-
int ultodec(unsigned long ui, char *buf, int prec, char limiter )
Size: ~293B ../src/conversions/ultodec.c l.2
- alphasort
-
int alphasort( const struct dirent de1, const struct dirent de2 )
Sort dirents by name. Deviating of the standard, the asciitables is used for the comparison (using strcmp)
../src/directories/alphasort.c l.7 manpage: alphasort
- basename
-
char basename(char *path)
*return the last component of a pathname Size: ~151B ../src/directories/basename.c l.2 manpage: basename
- chdir
-
int chdir(const char* path)
change working directory Size: ~47B ../include/syscall_stubs.h l.114 manpage: chdir
- dirbuf
-
__
the switch for defining the dirbuf. used internally
- dirbufsize
-
__
- dirfd
-
int dirfd(DIR d)
*extract the file descriptor used by a DIR stream ../src/directories/dirfd.c l.2 manpage: dirfd
- dirname
-
char dirname(char *s)
*Defines: strlen
report the parent directory name of a file pathname Size: ~179B ../src/directories/dirname.c l.8 manpage: dirname
- fstat
-
int fstat(int fd,struct stat* statbuf)
get file status Size: ~53B ../include/syscall_stubs.h l.111 manpage: fstat
- getcwd
-
int getcwd( char buf, unsigned long size)
*get the pathname of the current working directory Size: ~61B ../include/syscall_stubs.h l.123 manpage: getcwd
- getdents
-
int getdents( unsigned int fd, struct dirent direntry, unsigned int count )
*get directory entries Size: ~65B ../include/syscall_stubs.h l.106 manpage: getdents
- inotify_add_watch
-
int inotify_add_watch( int fd, const char *pathname, u32 mask)
../include/syscall_stubs.h l.220
- inotify_init
-
int DEF_syscall(inotify_init,0)
../include/syscall_stubs.h l.219
- inotify_init1
-
int inotify_init1( int flags)
../include/syscall_stubs.h l.222
- inotify_rm_watch
-
int inotify_rm_watch( int fd, __s32 wd)
../include/syscall_stubs.h l.221
- mkdir
-
int mkdir( const char pathname, int mode)
*make a directory relative to directory file descriptor Size: ~59B ../include/syscall_stubs.h l.174 manpage: mkdir
- opendir
-
DIR opendir(const char *name )
*Defines: getbrk sys_brk write open dirbuf 0 close
open directory associated with file descriptor Size: ~281B ../src/directories/opendir.c l.10 manpage: opendir
- opendirp
-
DIR opendirp(const char *name, DIR *dir)
*Defines: dirbuf 0 close getbrk sys_brk open
../src/directories/opendirp.c l.5
- readdir
-
struct dirent readdir(DIR *dir)
*Defines: dirbuf getdents
read a directory
read a directory. return the next dirent, or 0, if the end is reached. return 0 on error and set errno, if mini_errno is not defined, return -errno on error
Size: ~133B ../src/directories/readdir.c l.10 manpage: readdir
- rewinddir
-
void rewinddir(DIR dir)
*reset the position of a directory stream to the beginning Size: ~80B ../src/directories/rewinddir.c l.2 manpage: rewinddir
- rmdir
-
int rmdir( const char pathname)
*remove a directory Size: ~47B ../include/syscall_stubs.h l.175 manpage: rmdir
- scandir
-
int scandir(const char path, struct dirent listing[], int (*fp_select)(const struct dirent *), int (*cmp)(const struct dirent , const struct dirent *))
Defines: kill strlen seterrno 0 getbrk open dirbuf swap memcpy getpid sys_brk errno write getdents
scan a directory
list files and dirs in a directory This implementation uses malloc_brk() for the dynamic allocation of the listing, and tries to do as less copies as possible. The dynamically allocated space for the result list (**listing[]) is guaranteed to be at one continuous memory location. if the select callback is 0, meaning all entries should be returned, There are no copies done at all, besides the copying from kernelspace to userspace. To free the space, allocated for the listing, either call free_brk(), when no other allocations via malloc_brk took place. Or save the brk before you call scandir, and restore it after the call. (e.g.) long savebrk=getbrk(); int ret=scandir(...); brk(savebrk); Freeing single list entries might give unexpected results. returns the number of the read entries, or the negative errno on error.
../src/directories/scandir.c l.30 manpage: scandir
- scandir_bufsize
-
__
the increment of the buffer of scandir in bytes for memory allocations (default:4096)
- seekdir
-
void seekdir(DIR dir, long off)
*set the position of a directory stream Size: ~100B ../src/directories/seekdir.c l.2 manpage: seekdir
- telldir
-
long telldir(DIR dir)
*current location of a named directory stream Size: ~32B ../src/directories/telldir.c l.2 manpage: telldir
- errno
-
#ifdef mini_errno
error return value
- errno_str
-
char *errno_str(int err)
convert errno to str, with 3 chars length ending the string (global) with two \0\0, when errno<100 errnum must be <200.
Size: ~123B ../src/process/errno_str.c l.7
- exit_errno
-
void exit_errno( int errnum )
Defines: write exit errno_str execve
exit, and execute /bin/errno this is intended to give a error message for the given errno num. Instead of having the error messages compiled into each binary, they can stay within one executable, "errno" This spares about 4kB, but needs errno installed to /bin/errno It's the drawback of not having a shared library, where all executables would share the same errno messages in memory. On the other hand, a shared library would need to be installed as well. The supplied errno can be negative, the absolute value is supplied to errno.
- perror
-
void perror(const char msg)
*Defines: write strlen fileno strerror errno
write error messages to standard error Size: ~329B ../src/output/perror.c l.4 manpage: perror
- ret_errno
-
#ifdef mini_errno
This macro expands to a return, and (when mini_errno is defined) returns -1 and sets errno, or returns the negative errno value.
- seterrno
-
#ifdef mini_errno
set errno, but only when errno is defined.
- strerror
-
char* strerror( int errnum )
../src/string/strerror.c l.7 manpage: strerror
- verbose_errstr
-
const char* verbose_errstr(int num)
verbose error (errno) string. this adds about 3.5kB to the compiled binary(!)
../include/errstr.h l.10
- verbose_errstr2
-
const char* verbose_errstr2(int num)
verbose error (errno) string. this adds about 3.5kB to the compiled binary(!) Trying to shrink that here.
../include/errstr2.h l.11
- _fopen
-
FILE _fopen(int fd, const char filename, const char* mode, FILE f)
*Defines: close fileno open
modes implemented: r, r+, w, w+, a, a+
Size: ~316B ../src/streams/_fopen.c l.12
- access
-
int access( const char filename, int mode)
*determine accessibility of a file relative to directory file Size: ~59B ../include/syscall_stubs.h l.177 manpage: access
- chmod
-
int chmod( const char filename, mode_t mode)
*change mode of a file relative to directory file descriptor Size: ~59B ../include/syscall_stubs.h l.201 manpage: chmod
- chown
-
int chown( const char filename, uid_t user, gid_t group)
*change owner and group of a file relative to directory Size: ~71B ../include/syscall_stubs.h l.202 manpage: chown
- close
-
int close( int fd )
close a file descriptor Size: ~51B ../include/syscall_stubs.h l.102 manpage: close
- closedir
-
int closedir(DIR dir)
*Defines: getbrk sys_brk
close a directory stream Size: ~323B ../src/directories/closedir.c l.6 manpage: closedir
- creat
-
int volatile creat( const char s, int mode )
*Defines: open
create a new file or rewrite an existing one Size: ~124B ../src/file/creat.c l.5 manpage: creat
- dup
-
int dup(int fd)
duplicate an open file descriptor Size: ~51B ../include/syscall_stubs.h l.119 manpage: dup
- dup2
-
int dup2(int oldfd, int newfd)
duplicate a file descriptor Size: ~63B ../include/syscall_stubs.h l.120 manpage: dup2
- dup3
-
int dup3(int oldfd, int newfd, int flags)
duplicate a file descriptor Size: ~75B ../include/syscall_stubs.h l.121 manpage: dup3
- fchmod
-
int fchmod( unsigned int fd, mode_t mode)
change mode of a file Size: ~63B ../include/syscall_stubs.h l.117 manpage: fchmod
- fchown
-
int fchown( unsigned int fd, uid_t user, gid_t group)
change owner and group of a file Size: ~75B ../include/syscall_stubs.h l.116 manpage: fchown
- fcntl
-
int fcntl( unsigned int fd, unsigned int cmd, unsigned long arg)
file control Size: ~77B ../include/syscall_stubs.h l.178 manpage: fcntl
- fsync
-
int fsync(int a1 )
synchronize changes to a file Size: ~51B ../include/lseek.h l.21 manpage: fsync
- ftruncate
-
int ftruncate(unsigned int a1, unsigned int a2 )
truncate a file to a specified length Size: ~63B ../include/lseek.h l.20 manpage: ftruncate
- link
-
int link( const char oldname, const char *newname)
*link one file to another file relative to two directory Size: ~53B ../include/syscall_stubs.h l.125 manpage: link
- lseek
-
int lseek(unsigned int a1, int a2, int a3 )
move the read/write file offset Size: ~75B ../include/lseek.h l.18 manpage: lseek
- open
-
int volatile open( const char s, int flags, … )
*open file relative to directory file descriptor
open or create a file. warning: when using the flag O_CREAT, file permission flags have to be given as third argument. Otherwise file permission flags will be random. (I still do not know, what the flag showing up as "-T" means..)
Size: ~124B ../src/file/open.c l.18 manpage: open
- readahead
-
int readahead( int fd, loff_t offset, size_t count)
initiate file readahead into page cache Size: ~79B ../include/syscall_stubs.h l.258
- rename
-
int rename( const char* oldpath, const char* newpath )
rename file relative to directory file descriptor Size: ~53B ../include/syscall_stubs.h l.108 manpage: rename
- select
-
int volatile ATTR_OPT("O0") select(int fd, volatile fd_set* readfd, volatile fd_set writefd, volatile fd_set *exceptfd, volatile struct timeval *wait)
*synchronous I/O multiplexing Size: ~138B ../include/select.h l.16 manpage: select
- sendfile
-
int sendfile( int out_fd, int in_fd, off_t offset, size_t count)
*transfer data between file descriptors Size: ~142B ../include/syscall_stubs.h l.181 manpage: sendfile
- stat
-
int stat(const char* filename,struct stat* statbuf)
get file status Size: ~49B ../include/syscall_stubs.h l.112 manpage: stat
- symlink
-
int symlink( const char oldname, const char *newname)
*make a symbolic link relative to directory file descriptor Size: ~53B ../include/syscall_stubs.h l.126 manpage: symlink
- umask
-
int umask( int mask)
set and get the file mode creation mask Size: ~51B ../include/syscall_stubs.h l.257 manpage: umask
- unlink
-
int unlink( const char* path)
remove a directory entry relative to directory file descriptor Size: ~47B ../include/syscall_stubs.h l.109 manpage: unlink
- djb_cksum
-
unsigned int djb_cksum( const char* p, unsigned int len )
checksum algorithm by d.j.bernstein. Didn't do any benchmarks, but the computation might be quite performant. It is a bitshift and two additions per byte.
- fgetc
-
int fgetc(FILE F)
*Defines: fileno read
get a byte from a stream Size: ~57B ../src/streams/fgetc.c l.5 manpage: fgetc
- fgets
-
char* fgets(char buf, int size, FILE F)
Defines: fileno read
get a string from a stream ../src/streams/fgets.c l.4 manpage: fgets
- getc
-
#define getc(F) fgetc(F)
Defines: read fileno
get a byte from a stream ../include/fgetc.h l.8 manpage: getc
- getchar
-
#define getchar() fgetc(0)
Defines: fileno read
get a byte from a ../include/fgetc.h l.11 manpage: getchar
- gets
-
#define gets(F) fgets(F,0xfffffff,stdin)
Defines: fileno read
get a string from a ../src/streams/gets.c l.3 manpage: gets
- read
-
int read( int fd, void buf, int len )
*read from a file Size: ~62B ../include/syscall_stubs.h l.103 manpage: read
- ungetc
-
int ungetc(int c, FILE F)
*push byte back into input stream
pushes one char back to the stream. Overwrites a previously pushed char (conforming to the posix spec)
Size: ~66B ../src/streams/ungetc.c l.5 manpage: ungetc
- kill
-
int kill( pid_t pid, int sig)
send a signal to a process or a group of processes Size: ~63B ../include/syscall_stubs.h l.136 manpage: kill
- mkfifo
-
int mkfifo( const char* path, mode_t mode )
make a FIFO special file relative to directory file descriptor Size: ~68B ../include/mkfifo.h l.4 manpage: mkfifo
- pipe
-
int pipe( int filedes)
*create an interprocess channel Size: ~41B ../include/syscall_stubs.h l.256 manpage: pipe
- raise
-
int raise(int signr)
Defines: kill getpid
send a signal to the executing process Size: ~68B ../src/process/sigaction.c l.145 manpage: raise
- rt_sigaction
-
int rt_sigaction( int sig, const struct sigaction act, struct sigaction *oact, size_t sigsetsize)
*examine and change a signal action Size: ~132B ../include/syscall_stubs.h l.152
- rt_sigprocmask
-
int rt_sigprocmask( int how, sigset_t nset, sigset_t *oset, size_t sigsetsize)
*examine and change blocked signals Size: ~132B ../include/syscall_stubs.h l.186
- rt_sigreturn
-
int rt_sigreturn( unsigned long __unused)
return from signal handler and cleanup stack frame Size: ~53B ../include/syscall_stubs.h l.153
- sigaction
-
int volatile sigaction(int sig, const struct sigaction act, struct sigaction *oact)
*Defines: memcpy rt_sigaction
examine and change a signal action Size: ~215B ../src/process/sigaction.c l.117 manpage: sigaction
- sigaddset
-
int sigaddset(sigset_t set, int sig)
*add a signal to a signal set Size: ~85B ../src/process/sigaction.c l.34 manpage: sigaddset
- sigdelset
-
int sigdelset(sigset_t set, int sig)
*delete a signal from a signal set Size: ~85B ../src/process/sigaction.c l.68 manpage: sigdelset
- sigemptyset
-
int sigemptyset(sigset_t set)
*initialize and empty a signal set Size: ~41B ../src/process/sigaction.c l.7 manpage: sigemptyset
- sigfillset
-
int sigfillset(sigset_t set)
*initialize and fill a signal set Size: ~41B ../src/process/sigaction.c l.20 manpage: sigfillset
- sigismember
-
int sigismember(sigset_t set, int sig)
*test for a signal in a signal set Size: ~44B ../src/process/sigaction.c l.85 manpage: sigismember
- signal
-
sighandler_t signal(int sig, sighandler_t func )
Defines: rt_sigaction write memcpy
signal management Size: ~337B ../src/process/signal.c l.5 manpage: signal
- sigprocmask
-
int sigprocmask(int how, const sigset_t set, sigset_t *oldset)
*Defines: rt_sigprocmask
examine and change blocked signals Size: ~130B ../src/process/sigaction.c l.61 manpage: sigprocmask
- wait
-
pid_t wait(int wstatus)
*Defines: wait4
wait for a child process to stop or terminate Size: ~122B ../src/process/wait.c l.8 manpage: wait
- wait4
-
int wait4( pid_t upid, int stat_addr, int options, struct rusage *ru)
*wait for process to change state, BSD style Size: ~133B ../include/syscall_stubs.h l.176 manpage: wait4
- waitpid
-
pid_t waitpid(pid_t pid, int wstatus, int options)
*Defines: wait4
wait for a child process to stop or terminate Size: ~138B ../src/process/wait.c l.16 manpage: waitpid
- abs
-
int abs(int i)
return an integer absolute value ../include/math.h l.25 manpage: abs
- div
-
div_t div(int numerator, int denominator)
compute the quotient and remainder of an integer division Size: ~84B ../include/math.h l.8 manpage: div
- djb2_hash
-
unsigned long djb2_hash(const unsigned char *str)
hashes, from d.j.Bernstein (http://www.cse.yorku.ca/~oz/hash.html) I've tested djb2_hash, and it gives quite good results. I'm sure, Bernstein did think and test his algorithm sincerely. When combining djb2_hash and sdbm_hash, the probability of collisions might tend to zero. Me I'm going this way. I guess. I might check djb2_hash for collisions within a space of around 8 digits. The hash functions compute the hashes of a c string with a 0 at the end. The cksum functions do work with a pointer and a given len.
Size: ~86B ../src/math/hashes.c l.12
- labs
-
long int labs(long int i)
return a long integer absolute value Size: ~46B ../include/math.h l.30 manpage: labs
- ldiv
-
ldiv_t ldiv(long int numerator, long int denominator)
compute quotient and remainder of a long division Size: ~82B ../include/math.h l.16 manpage: ldiv
- rand
-
unsigned int rand()
Size: ~118B ../src/math/rand.c l.7 manpage: rand
- sdbm_hash
-
unsigned long sdbm_hash(const unsigned char *str)
Size: ~80B ../src/math/sdbm_hash.c l.3
- srand
-
void srand( unsigned int i )
pseudo-random number generator Size: ~48B ../src/math/srand.c l.4 manpage: srand
- brk
-
int brk( const void* addr )
Defines: sys_brk
change data segment size
set the brk to addr return 0 on success. conformant brk, when mini_errno is defined return -1 and set errno. if errno isn't available, returns the negative errno value on error
Size: ~66B ../src/memory/brk.c l.8 manpage: brk
- free
-
void free(void p)
*Defines: getbrk sys_brk
free allocated memory Size: ~32B ../src/memory/malloc.c l.168 manpage: free
- free_brk
-
int free_brk()
free all memory, which has been allocated with malloc_brk. Returns 0, if memory has been freed; 1, when there hasn't been any memory allocations with malloc_brk before. Then brk() gives an error, return the return value of brk
- getbrk
-
long getbrk()
get the current brk does either a syscall to brk, or returns the globally saved var
- malloc
-
void* malloc(int size)
a memory allocator
0 switch mini_malloc_minibuf (Use the global minibuf for "allocations". Advantage: tiny code, fast, located either in the bss or data segment, or past the stack(might be fastest). Disadvantage: Possible to overwrite environmental vsariables when located at the stack via overflow. No dynamic allocations, the minibuf has a fixed size. Here we go.. with the .. well. Fastes and smallest malloc/free combi ever. Not the smartest. Since it isn't exactly a memory allocation, instead it uses the minilib buf. Which is allocated by the kernel, and located either in the bss section, or is allocated on the stack. (option "globals_on_stack") When allocated at the stack, the stack is first expanded within startup_c.c, and the return address of startup_c discarded. (Jump to exit) Therefore an overflow of the globals would result in a segfault. For debugging and analization of mallocs and free's, there's the option analyzemalloc; which dumps all malloc's and free's to stderr. Format: Address - size) This is basically a linked list, optimized for fast access, allocation of new elements, and small memory overhead. Albite the list structure might be hard to recognize. It is not the right malloc, if you expect many de- or reallocations. And it obviously is not the right choose, when expecting medium to big sized allocations. (> 1 page, here 4kB, as medium sized) Here we use mbuf from top to bottom as stack. 64 Bytes are left at the bottom as reserve. Possibly we'd like to complain about the lack of memory, before we exit. ATM, the 'free' is really lazy. It free's memory, but a real 'free' is only commited, when all memory below a freed area is also freed. Since the target of minilib atm are tiny tools, this might be ok. ;) but, as I told before - probably you should look out for a proper malloc implementation. It depends on your needs. I'm not sure yet, whether another implementation of free would be useful at all. Overall, I'd really prefer keeping minilib tiny. Reusing sparse freed memory areas also leads to a whole bunch of complications. cache misses, searching complexity, storage overhead, potentially page faults, just to name a few. I'm not sure whether it's worth it. And the existing malloc implementations out there are countless. ;) It's sometimes smarter to stay special, albite in this case this means the opposite. /misc The memory layout looks like this: mlgl->ibuf and mlgl->mbuf do point to the same address range. mlgl->ibuf is provided for alignment and faster access to the int values. flag prev free is the first bit in size. (0x8000, eq 1000 0000 0000 0000 binary when free), (mbufsize) ``` size data size mini_buf size 8008dataxxxx0004data8000
Size: ~173B ../src/memory/malloc.c l.142 manpage: malloc
- malloc_brk
-
void* malloc_brk(int size)
Defines: sys_brk getbrk
allocate via setting the brk free and realloc can be used normally. The intention of malloc_brk is for subsequent calls to realloc. The saved data has not to be copied, instead realloc just writes the new size and sets the brk accordingly. if the break is saved before one or more calls to malloc_brk, the allocated memory can also be free'd by setting the brk to the saved value with brk(saved_brk) free_brk() free's all memory, which has been allocated with malloc_brk
- map_protected
-
void* map_protected(int len)
Defines: mprotect mmap
allocate a buffer, which is surrounded by protected pages. mprotect(PROT_NONE) When there is a buffer overflow, neither the stack, nor other structures can be overwritten. Instead the overflow (or underflow) touches the next protected page, what results in a segfault. Most probably you'd like to catch the segfault signal. (By installing a segfault signal handler) The size is always a multiple of the system's pagesize, 4kB here. The len of the mapped memory area is rounded up to the next pagesize. The mapped area can only be free'd by call(s) to unmap_protected, neither realloc nor free are allowed. There is one page before, and one page after the mapped area protected with PROT_NONE, and len rounded up to the next pagebreak. So this is the overhead. If an error occures, errno is set (when defined by the switch mini_errno), and -1 returned, or the negative errno value, when errno isn't defined.
- memcmp
-
int memcmp(const void* c1,const void* c2,int len)
compare bytes in memory Size: ~44B ../src/memory/memcmp.c l.3 manpage: memcmp
- memcpy
-
void* memcpy( void*d, const void s, int n )
*copy bytes in memory Size: ~84B ../src/memory/memcpy.c l.4 manpage: memcpy
- memfd_create
-
int memfd_create( const char uname_ptr, unsigned int flags)
*create an anonymous file Size: ~59B ../include/syscall_stubs.h l.191
- memfrob
-
void* memfrob(void* s, unsigned int len)
frobnicate (encrypt) a memory area
frob string; xor every char with 42
Size: ~78B ../src/memory/memfrob.c l.4
- memmove
-
void* memmove(void dest, const void *src, int n)
*copy bytes in memory with overlapping areas Size: ~88B ../src/memory/memmove.c l.3 manpage: memmove
- memset
-
void memset( void *s, int c, int n)
*set bytes in memory Size: ~90B ../src/memory/memset.c l.3 manpage: memset
- mmap
-
void* ATTR_OPT("O0") mmap(void* addr, size_t len, int prot, int flags, int fd, off_t off)
map pages of memory
mmap wrapper address length is rounded up to a multiple of pagesize (4096 Bytes here) for the description, please look up the according manpage errno is only set, when mini_errno is defined if not, on error the negative errno value is returned. (e.g. -22 for "invalid argument")
Size: ~197B ../src/memory/mmap.c l.8 manpage: mmap
- mprotect
-
int mprotect( POINTER a1, POINTER a2, int a3 )
*set protection of memory mapping Size: ~146B ../include/syscall_stubs.h l.254 manpage: mprotect
- mremap
-
void* volatile ATTR_OPT("O0") mremap(void* addr, size_t old_len, size_t new_len, int flags, void* new_addr)
remap a virtual memory address Size: ~162B ../include/mremap.h l.4
- munmap
-
int munmap( void* addr, size_t len)
unmap pages of memory ../include/syscall_stubs.h l.261 manpage: munmap
- realloc
-
void* realloc(void p, int size)
*Defines: 0 getbrk sys_brk
memory reallocator Size: ~636B ../src/memory/malloc.c l.240 manpage: realloc
- sbrk
-
void* sbrk(long incr)
Defines: sys_brk
change data segment size
Set the new brk, increment/decrement by incr bytes. return the old brk on success. conformant sbrk, when mini_errno is defined if no errno is available, returns the negative errno value on error
Size: ~108B ../src/memory/sbrk.c l.9 manpage: sbrk
- splice
-
int splice( int fd_in, loff_t off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags)
*splice data to/from a pipe Size: ~178B ../include/syscall_stubs.h l.196
- swap
-
void swap(void* a, void* b,int size)
swap a with b, with 'size' bytes swaps integers and longs at once, when size eq sizeof(int/long)
- unmap_protected
-
int unmap_protected(void p, int len)
*Defines: munmap mprotect
free an area, allocated before with map_protected (len must be the same, when at the invocation of map_protected) returns the value of munmap, when an error occures. errno is set, when defined. return 0 on success.
- _mprints
-
#define _mprints(…) dprints(STDOUT_FILENO, VA_ARGS)
Defines: write
../include/prints.h l.10
- ansicolors
-
__
defines for ansicolors at the console, 16 color mode the names are: AC_NORM ( white text on black background) AC_BLACK AC_RED AC_GREEN AC_BROWN AC_BLUE AC_MAGENTA AC_MARINE (= AC_CYAN) AC_LGREY AC_WHITE AC_GREY AC_LRED AC_LGREEN AC_YELLOW AC_LBLUE AC_LMAGENTA AC_LMARINE (= AC_LCYAN) AC_LWHITE AC_BGBLACK AC_BGRED AC_BGGREEN AC_BGBROWN AC_BGBLUE AC_BGMAGENTA AC_BGMARINE AC_BGLGREY AC_BGWHITE AC_BOLD AC_FAINT AC_CURSIVE AC_UNDERLINE AC_LIGHTBG AC_BLINK AC_INVERTED AC_INVERSE ( Faint to inverse are not available at every terminal )
- dprintf
-
int dprintf( int fd, const char fmt, … )
*Defines: write strlen getpid kill
print formatted output Size: ~818B ../src/output/dprintf.c l.5 manpage: dprintf
- dprints
-
int dprints(int fd, const char msg,…)
*Defines: write
../src/output/dprints.c l.14
- eprint
-
#define eprint(str) write(STDERR_FILENO,str,strlen(str))
Defines: strlen write
write str to stderr. Needs strlen
../include/prints.h l.57
- eprintfs
-
#define eprintfs(fmt,…) fprintfs(stderr, fmt, VA_ARGS)
Defines: strlen write fileno
write fmt and arguments to stderr. only format %s and %c are recognized
../include/prints.h l.128
- eprintl
-
#define eprintl() write(STDERR_FILENO,"\n",1)
Defines: write
write a newline to stderr
../include/prints.h l.66
- eprints
-
#define eprints(…) dprints(STDERR_FILENO,VA_ARGS,0)
Defines: write
print the string(s) supplied as arg(s) to stdout this macro has an variable argument count.
../include/prints.h l.26
- eprintsl
-
#define eprintsl(…) dprints(STDERR_FILENO,VA_ARGS,"\n",0)
Defines: write
print the string(s) supplied as arg(s) and newline to stderr
../include/prints.h l.48
- eputs
-
#define eputs(msg) ( eprint(msg) + eprintl() )
Defines: strlen write
write msg to stderr, append a newline. Needs strlen.
../include/prints.h l.76
- ewrites
-
#define ewrites(str) write(STDERR_FILENO,str,sizeof(str))
Defines: write
write the constant str to stderr. Computes length with sizeof(str) at compile time.
../include/prints.h l.87
- fprint
-
#define fprint(…) fprintf(VA_ARGS)
Defines: write fileno strlen globals getpid kill
../include/mini_fstream.h l.84
- fprintf
-
#define fprintf(stream,…) write(fileno(stream),mlgl→mbuf,snprintf(mlgl→mbuf,mlgl→mbufsize,VA_ARGS))
Defines: write fileno strlen globals getpid kill
fprintf, formatted output conversions implemented: %d: signed int (mini_itodec) %u: unsigned int (mini_uitodec) %f: double (max precision 8 digits, highest possible number: 2^31 (mini_dtodec) %l (modify a following d,u to long) (mini_ltodec,mini_ultodec) %s: string %c: char binary and hex output print the numbers, as they are internally stored(!). Negative numbers are represented with the first sign bit set. (e.g. -1 = 0xFFFFFFFF at x64) %b : binary output (mini_itobin) %o : octal output (mini_itooct) %x/X : hex output (small/big capitals) (mini_itohex,mini_itoHEX %(: grouping (mini_atoi) warning - most possibly you'd like to define besides fprintf, or family, mini_itodec (%d conversion) For squeezing a few more bytes, and saving some checking; writes(constant string) and print (variable string), prints (formatted output of one or several strings) are provided.
../src/output/fprintf.c l.32 manpage: fprintf
- fprintfs
-
int fprintfs( FILE* F, char fmt, …)
*Defines: strlen write fileno
prints formatted and unbuffered output to the stream F. only %s and %c are recognized. no mini_buf or globals are used, so using fprintfs instead of fprintf can save some sections / bytes.
Size: ~427B ../src/output/fprintfs.c l.8
- fprints
-
#define fprints(F,…) dprints(fileno(F),VA_ARGS,0)
Defines: fileno strlen write
print the string(s) supplied as arg(s) to stream this macro has an variable argument count.
../include/prints.h l.34
- fputc
-
int volatile fputc(int c, FILE* F)
Defines: fileno write
put a byte on a stream Size: ~64B ../include/fputc.h l.9 manpage: fputc
- fwrite
-
size_t fwrite(const void ptr, size_t size, size_t nmemb, FILE *f)
*Defines: write
binary output Size: ~117B ../include/mini_fstream.h l.95 manpage: fwrite
- fwrites
-
#define fwrites(fd,str) write(fd,str,sizeof(str))
Defines: write
write the constant str to fd. Computes length with sizeof(str) at compile time.
../include/prints.h l.107
- group_print
-
__
Defines: getpid kill fileno write strlen globals
enable print and related functions This switch enables strlen; but neither globals nor the mini_buf are used.
- group_write
-
__
Defines: write ewrite
write, and related functions these functions do not depend on strlen, or any globals.
-
#define print(str) write(STDOUT_FILENO,str,strlen(str))
Defines: strlen write
write str to stdout. Needs strlen
../include/prints.h l.53
- printf
-
#define printf(…) fprintf(stdout,VA_ARGS)
Defines: globals fileno write strlen kill getpid
print formatted output ../include/mini_fstream.h l.80 manpage: printf
- printfs
-
#define printfs(fmt,…) fprintfs(stdout, fmt, VA_ARGS)
Defines: strlen write fileno
write fmt and arguments to stdout. only format %s and %c are recognized
../include/prints.h l.122
- printl
-
#define printl() write(STDOUT_FILENO,"\n",1)
Defines: write
write a newline to stdout
../include/prints.h l.62
- prints
-
#define prints(…) _mprints(VA_ARGS,0)
Defines: write
print the string(s) supplied as arg(s) to stdout, this macro has an variable argument count.
../include/prints.h l.18
- printsl
-
#define printsl(…) _mprints(VA_ARGS,"\n",0)
Defines: write
print the string(s) supplied as arg(s) and newline to stdout
../include/prints.h l.42
- putc
-
#define putc(c,stream) fputc(c,stream)
Defines: write fileno
put a byte on a stream ../include/fputc.h l.18 manpage: putc
- putchar
-
#define putchar(c) fputc(c,stdout)
Defines: write fileno
put a byte on a stdout stream ../include/fputc.h l.15 manpage: putchar
- puts
-
#define puts(msg) ( print(msg) + printl() )
Defines: getpid kill write fileno strlen globals
put a string on standard output
write msg to stdout, append a newline. Needs strlen.
../include/prints.h l.72 manpage: puts
- shortcolornames
-
__
short ansi color names all colornames, without the praefix "AC_"
../include/ansicolors.h l.103
- snprintf
-
int snprintf( char buf, size_t size, const char *fmt, … )
*Defines: kill getpid write strlen
print formatted output Size: ~738B ../src/output/snprintf.c l.5 manpage: snprintf
- vfprintf
-
#define vfprintf(…) fprintf(VA_ARGS)
Defines: globals strlen fileno write kill getpid
../include/mini_fstream.h l.89 manpage: vfprintf
- vsnprintf
-
int vsnprintf(char buf, size_t size, const char fmt, va_list args )
Defines: kill getpid write strlen
format output of a stdarg argument list
the function, translating the fmt of printf. warning - most possibly you'd like to define besides fprintf, or family, mini_itodec (%d conversion) mini_atoi is needed for grouping numbers
Size: ~590B ../src/output/vsnprintf.c l.18 manpage: vsnprintf
- vsprintf
-
int vsprintf( char *buf, const char *fmt, … )
write fmt and arguments into buf calls vsnprintf, the size is limited to 4096 by default and assumes a buf len of 4096.
../src/output/vsprintf.c l.10 manpage: vsprintf
- write
-
int write(int fd,const void buf, int len )
*write on a file Size: ~65B ../include/syscall_stubs.h l.104 manpage: write
- writes
-
#define writes(str) write(STDOUT_FILENO,str,sizeof(str))
Defines: write
write the constant str to stdout. Computes length with sizeof(str) at compile time.
../include/prints.h l.83
- abort
-
void abort()
Defines: write rt_sigaction memcpy getpid kill
../src/process/abort.c l.3 manpage: abort
- atexit
-
int atexit( functionp* func )
Defines: globals
register functions, which are callen on exit in reverse order the switch mini_atexit takes a optional number, which defines the maximum numbers of functions to be registered. (defaults to 8)
../src/process/atexit.c l.7 manpage: atexit
- clone
-
int clone( int clone_flags, unsigned long stack, void *parent_tid, void *child_tid)
../include/syscall_stubs.h l.225
- clone_t
-
int clone_t(int flags)
../src/process/clone.c l.7
- execl
-
int execl(const char pathname, const char arg0,… )
Defines: execve environ
../src/exec/execl.c l.6 manpage: execl
- execv
-
int execv(const char pathname, char *const argv[])
*Defines: environ execve
execute a file Size: ~300B ../src/exec/_execv.c l.4 manpage: execv
- execve
-
int execve( const char filename, char const* argv, char* const* envp)
execute program Size: ~53B ../include/syscall_stubs.h l.134 manpage: execve
- execveat
-
int execveat( int dirfd, const char filename, char const* argv, char* const* envp, int flags)
execute program relative to a directory file descriptor Size: ~158B ../include/syscall_stubs.h l.173
- execvp
-
int execvp(const char file, char *const argv[])
*Defines: execve access environ
execute a file Size: ~556B ../src/exec/_execvp.c l.4 manpage: execvp
- execvpe
-
int execvpe(const char file, char *const argv[], char *const envp[])
*Defines: environ access execve
execute a file
When invoked with a filename, starting with "." or "/", interprets this as absolute path. (calls execve with the pathname) Looks for file in the PATH environment, othwerise.
Size: ~556B ../src/exec/execvp.c l.11
- fexecve
-
int fexecve(int fd, char const argv[], char *const envp[])
*execute a file Size: ~151B ../include/fexecve.h l.3 manpage: fexecve
- fexecveat
-
int fexecveat(int fd, char *const argv[], char *const envp[])
Size: ~151B ../include/fexecveat.h l.3
- fork
-
int DEF_syscall(fork,0)
create a new process ../include/syscall_stubs.h l.138 manpage: fork
- getenv
-
char* getenv(const char* name)
Defines: environ
get value of an environment variable Size: ~106B ../src/system/getenv.c l.5 manpage: getenv
- getpgrp
-
int DEF_syscall(getpgrp,0)
get the process group ID of the calling process ../include/syscall_stubs.h l.207 manpage: getpgrp
- getpid
-
int DEF_syscall(getpid,0 )
get the process ID ../include/syscall_stubs.h l.159 manpage: getpid
- getppid
-
int DEF_syscall(getppid,0)
get the parent process ID ../include/syscall_stubs.h l.204 manpage: getppid
- setpgid
-
int setpgid( pid_t pid, pid_t pgid)
set process group ID for job control Size: ~63B ../include/syscall_stubs.h l.205 manpage: setpgid
- setsid
-
int DEF_syscall(setsid,0 )
create session and set process group ID ../include/syscall_stubs.h l.160 manpage: setsid
- system
-
int system( const char* command )
Defines: environ wait4 write execve vfork
issue a command Size: ~326B ../src/exec/system.c l.4 manpage: system
- vexec
-
int vexec( const char* path, char* const* argv, char* const* envp )
Defines: wait4 seterrno vfork execve exit
execute a path, wait until the executed file exits. Deviating of system() an absolute pathname is taken. sets errno on error.
- vexec_q
-
int vexec_q( const char* path, char* const* argv, char* const* envp )
Defines: vfork execve exit wait4 seterrno
execute a path, wait until the executed file exits, do not write any output of the process. (close stdout) Deviating of system() an absolute pathname is taken.
- vfork
-
int DEF_syscall(vfork,0)
create a child process and block parent ../include/syscall_stubs.h l.139 manpage: vfork
- ext_match
-
int ext_match(char *text, const char *re, void(*p_match)(int number, char *pos,int len), int(*p_match_char)(int number, char *match_char), regex_match *st_match)
- match
-
int match(char *text, const char *re, text_match *st_match)
text matching engine little bit simpler version than match_ext. Consciusly named 'text matching', since the inherent logic is quite different to a regular expression machine. The engine matches nongreedy straight from left to right, so backtracking is minimized. It is a compromise between performance, size and capabilities. matches: * for every count of any char (nongreedy(!)) + for 1 or more chars % for 1 or more chars, and fills in arg 3 (text_match) ? for 1 char @ matches the beginning of the text or endofline (\n) -> beginning of a line # for space, endofline, \t, \n, \f, \r, \v or end of text (0) $ match end of text backslash: escape *,?,%,!,+,#,$ and backslash itself. ! : invert the matching of the next character or character class [xyz]: character classes, here x,y or z the characters are matched literally, also \,*,?,+,.. it is not possible to match the closing bracket (]) within a character class % : matches like a '+', and fills in argument 3, the text_match struct, when the pointer is non null. The matching is 'nongreedy'. returns: 1 on match, 0 on no match ( RE_MATCH / RE_NOMATCH ) if the pointer (argument 3) st_match is nonnull, the supplied struct text_match will be set to the first matching '%' location; if there is no match, text_match.len will be set to 0. The struct is defined as: typedef struct _text_match { char* pos; int len; } text_match; examples: "*word*" matches "words are true" or "true words are rare" "word*" matches "words are true" and not "true words are rare" "word" matches none of the above two texts (!) "*words%" extracts with % " are true" and " are rare" into text_match "Some\ntext\nwith\nlinebreaks\n\n" "*@%#*" matches with % "Some" "*@line%#*" matches % = "breaks" "*text\n%" % = "with linebreaks\n\n" (memo) When the regex ist defined within C/cpp source code, a backslash has to be defined as double backslash. (note) - be careful when negating a following *, or ?. somehow - it is logical, but seems to me I overshoot a bit, and tapped into a logical paradox. Negating EVERYTHING translates to true. However, since truth is negated as,... well, there's a problem. (I'm not kidding here. Just don't do a regex with !* or !?., or you might experience the meaning of full featured. Maybe I should say, it's not allowed?) A "!+" will translate into nongreedy matching of any char, however; "%!+" will match with % everything but the last char; while "%+" matches with % only the first char. !+ basically sets the greedyness of the left * or % higher.
../src/match/match.c l.83
- clearerr
-
void clearerr(FILE f)
*clear indicators on a stream Size: ~36B ../include/mini_fstream.h l.189 manpage: clearerr
- clearerror
-
void clearerror(FILE *f)
Size: ~36B ../include/mini_fstream.h l.194
- fclose
-
int fclose( FILE* f )
Defines: close
close a stream Size: ~40B ../include/mini_fstream.h l.66 manpage: fclose
- fdopen
-
FILE fdopen(int fd, const char mode)
Defines: close fileno open
associate a stream with a file descriptor
modes implemented: r, r+, w, w+, a, a+
Size: ~323B ../src/streams/fdopen.c l.6 manpage: fdopen
- feof
-
int feof(FILE f)
*test end-of-file indicator on a stream ../include/mini_fstream.h l.175 manpage: feof
- ferror
-
int ferror(FILE f)
*test error indicator on a stream Size: ~32B ../include/mini_fstream.h l.182 manpage: ferror
- fflush
-
int fflush( FILE F )
*flush a stream
This does nothing, since minilib doesn't provide buffered streams yet.In order to sync data to disc, please use fsync
Size: ~32B ../include/mini_fstream.h l.28 manpage: fflush
- fgetpos
-
void fgetpos(FILE f, long *pos )
*Defines: lseek
get current file position information Size: ~62B ../include/mini_fstream.h l.117 manpage: fgetpos
- fileno
-
int fileno( FILE f )
*map a stream pointer to a file descriptor
Return the fd nummber of stdin,-out,-err.
Size: ~32B ../include/mini_fstream.h l.56 manpage: fileno
- fopen
-
FILE fopen(const char filename, const char* mode)
Defines: close fileno open
open a stream
modes implemented: r, r+, w, w+, a, a+
Size: ~324B ../src/streams/fopen.c l.8 manpage: fopen
- fputs
-
int volatile fputs(const char c, FILE *F)
*Defines: fileno write strlen
put a string on a stream Size: ~90B ../include/fputs.h l.18 manpage: fputs
- fread
-
size_t fread(void ptr, size_t size, size_t nmemb, FILE *f)
*Defines: read
binary input Size: ~110B ../include/mini_fstream.h l.152 manpage: fread
- freopen
-
FILE freopen(const char filename, const char* mode, FILE F)
*Defines: open fileno close
open a stream
modes implemented: r, r+, w, w+, a, a+
Size: ~320B ../src/streams/freopen.c l.7 manpage: freopen
- fseek
-
int fseek(FILE f, long offset, int whence )
*Defines: lseek
reposition a file-position indicator in a stream Size: ~80B ../include/mini_fstream.h l.134 manpage: fseek
- fsetpos
-
int fsetpos(FILE f, int pos )
*Defines: lseek
set current file position Size: ~78B ../include/mini_fstream.h l.123 manpage: fsetpos
- ftell
-
long ftell(FILE f)
*Defines: lseek
return a file offset in a stream Size: ~53B ../include/mini_fstream.h l.111 manpage: ftell
- rewind
-
void rewind( FILE f )
*Defines: lseek
reset the file position indicator in a stream Size: ~58B ../include/mini_fstream.h l.143 manpage: rewind
- setbuf
-
void setbuf(FILE stream, char *buf)
*assign buffering to a stream
dummy function. There is no buffering implemented for the streams yet.
Size: ~32B ../include/mini_fstream.h l.202 manpage: setbuf
- setvbuf
-
int setvbuf(FILE stream, char *buf, int mode, size_t size)
*assign buffering to a stream
dummy function
Size: ~58B ../include/mini_fstream.h l.207 manpage: setvbuf
- _strcasecmp
-
int _strcasecmp(const char*c1,const char*c2,int len)
Defines: tolower
Size: ~44B ../src/string/strcasecmp.c l.5
- _strcmp
-
int _strcmp(const char *s1, const char *s2, int n)
Size: ~44B ../src/string/strcmp.c l.10
- sprintf
-
#define sprintf(str,…) snprintf( str, mini_buf, VA_ARGS)
Defines: write strlen getpid kill
print formatted output
I'm really uncertain about the size arg here, amongst others these are just misdefined functions, inhaerent insecure. :/ If possible, do not use sprintf. Use snprintf instead.
../src/output/sprintf.c l.9 manpage: sprintf
- strcasecmp
-
int strcasecmp(const char*c1,const char*c2)
../src/string/strcasecmp.c l.26 manpage: strcasecmp
- strcat
-
char strcat(char *dest, const char *src )
*Defines: strlen
concatenate two strings Size: ~126B ../src/string/strcat.c l.5 manpage: strcat
- strchr
-
char strchr(const char *s, int c)
*Defines: strchrnul
string scanning operation Size: ~104B ../src/string/strchr.c l.6 manpage: strchr
- strchrnul
-
char strchrnul(const char *s, int c)
*locate character in string Size: ~87B ../src/string/strchrnul.c l.3 manpage: strchrnul
- strcmp
-
int strcmp(const char*c1,const char*c2)
compare two strings Size: ~32B ../src/string/strcmp.c l.36 manpage: strcmp
- strcpy
-
char strcpy(char *dest, const char *src)
*copy a string and return a pointer to the end of the result Size: ~84B ../src/string/strcpy.c l.3 manpage: strcpy
- strdup
-
char strdup(const char *source)
*Defines: strcpy 0 strlen
duplicate a specific number of bytes from a string Size: ~258B ../src/string/strdup.c l.7 manpage: strdup
- strlen
-
int strlen(const char*str)
get length of fixed size string
return len of str. if str points to 0, return 0
Size: ~32B ../src/string/strlen.c l.6 manpage: strlen
- strncasecmp
-
int strncasecmp(const char*c1,const char*c2,int len)
case-insensitive string comparisons ../src/string/strcasecmp.c l.34 manpage: strncasecmp
- strncmp
-
int strncmp(const char*c1,const char*c2,int len)
compare part of two strings Size: ~44B ../src/string/strcmp.c l.44 manpage: strncmp
- strncpy
-
char strncpy(char *dest, const char *src, int n)
*copy fixed length string, returning a pointer to the array end
copy max n chars from src to dest, write 0's up to src[n] when len of dest < n Please note strlcpy (borrowed from freebsd), which does the same, but doesn't pad dest with 0's.
Size: ~96B ../src/string/strncpy.c l.7 manpage: strncpy
- strrchr
-
char strrchr(const char *s, int c)
*Defines: strchrnul
string scanning operation Size: ~122B ../src/string/strrchr.c l.4 manpage: strrchr
- strstr
-
char* strstr(const char big, const char *little)
*find a substring Size: ~104B ../src/string/strstr.c l.3 manpage: strstr
- chroot
-
int chroot( const char filename)
*change root directory Size: ~47B ../include/syscall_stubs.h l.155 manpage: chroot
- getgid
-
int DEF_syscall(getgid,0)
get the real group ID ../include/syscall_stubs.h l.206 manpage: getgid
- getuid
-
int DEF_syscall(getuid,0)
get a real user ID ../include/syscall_stubs.h l.208 manpage: getuid
- ioctl
-
int volatile ATTR_OPT("O0") ioctl( int fd, unsigned long int request, … )
control a STREAMS device (\fBSTREAMS\fP) Size: ~319B ../src/system/ioctl.c l.9 manpage: ioctl
- macro
-
void optimization_fence(void*p){}
Size: ~32B
- mknod
-
int mknod( const char filename, umode_t mode, unsigned dev)
*make directory, special file, or regular file Size: ~73B ../include/syscall_stubs.h l.259 manpage: mknod
- mount
-
int mount( char dev_name, char *dir_name, char *type, unsigned long flags, void *data)
*mount filesystem Size: ~151B ../include/syscall_stubs.h l.184 manpage: mount
- pivot_root
-
int pivot_root( const char new_root, const char *put_old)
*change the root mount Size: ~53B ../include/syscall_stubs.h l.156
- putenv
-
int putenv( char string )
*Defines: ret_errno environ
put a string into the environmental vars the supplied string's pointer is put into the environmental array of pointers. Subsequent changes of the string therefore will change the environment, and the supplied string may not be deallocated. Returns: - 0 on success, - EINVAL: string was 0, didn't contain a '=', some other error
../src/system/putenv.c l.10 manpage: putenv
- reboot
-
int reboot( int magic1, int magic2, unsigned int cmd, void arg)
*reboot or enable/disable Ctrl-Alt-Del Size: ~139B ../include/syscall_stubs.h l.182 manpage: reboot
- setgid
-
int setgid( gid_t gid)
set-group-ID Size: ~51B ../include/syscall_stubs.h l.161 manpage: setgid
- setgroups
-
int setgroups( int gidsetsize, gid_t *grouplist)
../include/syscall_stubs.h l.199 manpage: setgroups
- setuid
-
int setuid( uid_t uid)
set user ID Size: ~51B ../include/syscall_stubs.h l.162 manpage: setuid
- sync
-
int DEF_syscall(sync,0)
schedule file system updates ../include/syscall_stubs.h l.128 manpage: sync
- umount2
-
int umount2( const char mountpoint, int flags)
*unmount filesystem Size: ~59B ../include/syscall_stubs.h l.180
- uname
-
int uname(struct new_utsname name )
*get the name of the current system Size: ~41B ../include/syscall_stubs.h l.168 manpage: uname
- grantpt
-
int grantpt(int fd)
Defines: fstat getpid write open ioctl kill termio uitodec strlen
grant access to the slave pseudo-terminal device Size: ~44B ../src/termios/pty.c l.49 manpage: grantpt
- isatty
-
int isatty(int fd)
Defines: termio ioctl
test for a terminal device Size: ~325B ../src/termios/isatty.c l.5 manpage: isatty
- nanosleep
-
int nanosleep( struct timespec rqtp, struct timespec *rmtp)
*high resolution sleep Size: ~47B ../include/syscall_stubs.h l.146 manpage: nanosleep
- posix_openpt
-
int posix_openpt(int flags)
Defines: open termio
open a pseudo-terminal device Size: ~140B ../src/termios/pty.c l.8 manpage: posix_openpt
- ptsname
-
char ptsname(int fd)
*Defines: uitodec open strlen write ioctl termio kill getpid
get name of the slave pseudo-terminal device Size: ~1767B ../src/termios/pty.c l.34 manpage: ptsname
- ptsname_r
-
int ptsname_r(int fd, char buf, size_t len)
*Defines: uitodec write strlen open ioctl getpid termio kill
get the name of the slave pseudoterminal Size: ~1748B ../src/termios/pty.c l.21
- tcgetattr
-
int tcgetattr(int fd, struct termios io)
*Defines: ioctl termio
get the parameters associated with the terminal Size: ~300B ../src/termios/tcgetattr.c l.12 manpage: tcgetattr
- tcsetattr
-
int tcsetattr(int fd, int opt, const struct termios io)
*Defines: ioctl termio
set the parameters associated with the terminal Size: ~316B ../src/termios/tcsetattr.c l.12 manpage: tcsetattr
- unlockpt
-
int unlockpt(int fd)
Defines: ioctl termio
unlock a pseudo-terminal master/slave pair Size: ~325B ../src/termios/pty.c l.14 manpage: unlockpt
- vhangup
-
int DEF_syscall(vhangup,0 )
virtually hangup the current terminal ../include/syscall_stubs.h l.166
- getitimer
-
int getitimer( int which, struct itimerval value)
*get and set value of interval timer Size: ~53B ../include/syscall_stubs.h l.265 manpage: getitimer
- gettimeofday
-
int gettimeofday( struct timeval a1, struct timezone *a2)
*get the date and time Size: ~47B ../include/syscall_stubs.h l.147 manpage: gettimeofday
- setitimer
-
int setitimer( int which, struct itimerval value, struct itimerval *ovalue)
*set the value of an interval timer Size: ~56B ../include/syscall_stubs.h l.264 manpage: setitimer
- sleep
-
unsigned int volatile sleep(unsigned int seconds)
Defines: nanosleep
suspend execution for an interval of time
nonconformant sleep TODO: ignore blocked signals, sigchld
Size: ~123B ../src/process/sleep.c l.10 manpage: sleep
- time
-
int time(unsigned int a1 )
*get time Size: ~41B ../include/syscall_stubs.h l.277 manpage: time
- usleep
-
unsigned int volatile usleep(unsigned int useconds)
Defines: nanosleep
suspend execution for microsecond intervals
nonconformant usleep. Sleep useconds. I just hope, noone relies on an exact sleep time. which isn't possible without a real time os, anyways. When for whatever reason you'd need nanoseconds exact times, best shot might be a spinloop, and looking for cpu ticks. TODO: ignore blocked signals, sigchld
Size: ~147B ../src/process/sleep.c l.31 manpage: usleep
- utime
-
int utime( const char filename, struct utimbuf *times)
*set file access and modification times Size: ~49B ../include/syscall_stubs.h l.203 manpage: utime
- ALIGN
-
__
macros for alignment. They take a number or pointer, and align upwards to 2,4,8,..256 There are the macros ALIGN_2 ALIGN_4 ALIGN_8 ..., and ALIGN_P, which aligns to the size of a pointer. (8 for amd64)
- OPTFENCE
-
#ifndef clang
prevent gcc to optimize away registers and variables the macro OPTFENCE(...) can be invoked with any parameter. The parameters will get calculated, even if gcc doesn't recognize the use of the parameters, e.g. cause they are needed for an inlined asm syscall. The macro translates to an asm jmp and a function call to the function opt_fence, which is defined with the attribute "noipa" - (the compiler "forgets" the function body, so gcc is forced to generate all arguments for the function) The generated asm jump hops over the call to the function, but this gcc doesn't recognize. This generates some overhead, (a few (never reached) bytes for setting up the function call, and the jmp) but I didn't find any other solution, which gcc wouldn't cut for optimizations from time to time. (volatile, volatile asm, optimize attributes, andsoon have all shown up to be unreliable - sometimes(!)). Had some fun debugging these bugs, which naturally showed up only sometimes. (Many syscalls also work with scrambled arguments..) And, I believe it IS a compiler bug. Volatile should be volatile for sure, not only sometimes. I mean, why the heck do I write volatile??
../include/syscall.h l.66
- OPTIMIZATIONS
-
__
enable some optimizations, with a slitghtly bigger memory footprint. defaults to off (yet only calloc is optimized. todo)
../include/config.h l.33
- _die
-
void _die()
internal implementation of die
../src/process/die.c l.36
- _match
-
int _match(char *text, const char *re, text_match *st_match)
../src/match/match.c l.96
- _match_ext2
-
char* _match_ext2(char *text, char *re, void(*p_matched_cb)(int number, char *pos,int len), int(*p_wildcard_cb)(int number, char *match_char), text_match *st_match)
internal implementation of match_ext
- accept
-
int accept( int fd, struct sockaddr *upeersockaddr, int *upeeraddrlen)
../include/syscall_stubs.h l.247 manpage: accept
- assert
-
__
Defines: kill getpid memcpy write rt_sigaction
../macros/assert.h l.4
- bind
-
int bind( int fd, struct sockaddr *umyaddr, int addrlen)
../include/syscall_stubs.h l.241 manpage: bind
- bsd_cksum
-
unsigned int bsd_cksum( const char* p, unsigned int len )
bsd checksum
../src/file/cksum.c l.31
- bsd_cksumblock
-
unsigned int bsd_cksumblock( unsigned int hash, const char* p, unsigned int len )
bsd checksum, called by bsd_cksum, with initial hash value
../src/file/cksum.c l.20
- bsd_definitions
-
__
definitions, found at BSD enable with mini_bsd_definitions
- bsd_timespec
-
__
timespec functions, copied from freebsd
- bsearch
-
void* bsearch(const void *key, const void *base0, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
search for an element code is copied from netbsd
../src/sort/bsearch.c l.55 manpage: bsearch
- calloc
-
void* calloc(int nmemb, int size)
../src/memory/calloc.c l.2 manpage: calloc
- cfmakeraw
-
void cfmakeraw(struct termios tp)
*Defines: termio
../src/termios/cfmakeraw.c l.3 manpage: cfmakeraw
- config
-
__
configuration settings, to be compiled statically. System specific paths, maximums, etc go here. Other values are within globaldefs.h; architecture specific values are within the folder headers.
- ctype_functions
-
#ifdef mini_ctype_functions
create functions instead of macros for isalpha, .., isprint the ctype macros are defined also without being explicitely enabled.
../include/ctype.h l.23
- def
-
#define SETOPT_short( opts, option ) (
Set a option flag(s) (bit(s)) manually. param options: e.g. just a, or ( a+h+l) to check for several flags at once
../macros/getoptm.h l.52
- die
-
#define die(errnum,msg) {ewritesl(msg);exit_errno(errnum);}
Defines: execve errno_str exit write
write msg to stderr and exit with failure if errno is defined and set, /bin/errno is executed to give a verbose error message if errno is either not defined or not set, exit with -1
../src/process/die.c l.11
- die_if
-
#define die_if( when, errnum, msg ) if( when ) die( errnum, msg )
Defines: write execve errno_str exit
when arg1 is true, write msg to stderr and exit with failure if errno is defined and set, /bin/errno is executed to give a verbose error message if errno is either not defined or not set, exit with -1
../src/process/die.c l.59
- dief
-
#define dief(errnum,fmt,…) {fprintf(stderr,fmt,VA_ARGS);exit_errno(errnum);}
Defines: getpid fileno write kill errno_str exit execve strlen globals
write fmt andargs via fprintf to stderr and exit with failure if errno is defined and set, /bin/errno is executed to give a verbose error message if errno is either not defined or not set, exit with -1
../src/process/die.c l.20
- dief_if
-
#define dief_if( when, errnum, fmt,… ) if( when ) dief( errnum, fmt, VA_ARGS )
Defines: write exit errno_str execve
when arg1 is true, vall dief(errnum,fmt) if errno is defined and set, /bin/errno is executed to give a verbose error message if errno is either not defined or not set, exit with -1
../src/process/die.c l.69
- dies
-
#define dies(errnum,…) {eprintsl(VA_ARGS);exit_errno(errnum);}
Defines: execve errno_str exit write
write variable string list to stderr and exit with failure if errno is defined and set, /bin/errno is executed to give a verbose error message if errno is either not defined or not set, exit with -1
../src/process/die.c l.30
- dies_if
-
#define dies_if( when, errnum, … ) if( when ) dies( errnum, VA_ARGS )
Defines: exit errno_str execve write
when arg1 is true, vall dies(errnum, ... ) if errno is defined and set, /bin/errno is executed to give a verbose error message if errno is either not defined or not set, exit with -1
../src/process/die.c l.80
- dirbuf_malloc
-
#ifndef mini_dirbuf_malloc
which malloc to use for allocating the dir handles malloc : use malloc, therefore the minibuf malloc_brk : use malloc_brk defaults to malloc
../include/dirent.h l.31
- eprintf
-
#define eprintf(fmt,…) fprintf(stderr, fmt, VA_ARGS)
Defines: strlen write fileno
write fmt and arguments to stderr.
../include/prints.h l.133
- err
-
#define err( status, fmt … ) { fprintf(stderr,fmt ); fprints(stderr,":",strerror(errno)); exit(status); }
Defines: kill exit strlen globals getpid strerror errno write fileno
print an error message to stderr, print an error message dependend on errno ( strerror(errno) ), exit with status
../src/process/error.h l.20 manpage: err
- error
-
#define error( status, errnum, fmt … ) { fprintf(stderr,fmt ); if (errnum) fprints(stderr,":",strerror(errnum)); if ( status ) exit(status); }
Defines: exit kill strlen globals getpid strerror fileno write
print an error message to stderr when errnum is not 0, print either the number, or a verbose error message (with strerror), when mini_verbose_errstr is defined. (verbose error messages add aboyut 4kB) when status is non null, terminate with status
- errx
-
#define errx( status, fmt … ) { fprintf(stderr,fmt); exit(status); }
Defines: kill exit strlen globals getpid write fileno
print an error message to stderr, exit with status
../src/process/error.h l.27 manpage: errx
- ether_ntoa
-
char* ether_ntoa( const struct ether_addr e )
*Defines: network
../src/network/ether_ntoa.c l.3 manpage: ether_ntoa
- ewritesl
-
#define ewritesl(str) write(STDERR_FILENO,str"\n",sizeof(str)+1)
Defines: write
write the constant str to stderr, followed by a newline. Computes length with sizeof(str) at compile time.
../include/prints.h l.100
- fgetsn
-
int fgetsn(char buf, int size, FILE F)
Defines: read fileno
get a line like fgets, but return the len of the read string.
- fgetsp
-
char* fgetsp(char buf, int size, FILE F)
Defines: read fileno
read a line from F into buf with max chars size. Return a pointer to the terminating '0' byte. A terminating linebreak is not written to buf.
- fgetud
-
unsigned int fgetud(FILE* F)
Defines: read fileno
read an unsigned integer from the stream F reads all digits until a nondigit is read.
- fgetul
-
unsigned long int fgetul(FILE* F)
Defines: fileno read
read an unsigned long integer from the stream F reads all digits until a nondigit is read.
- flock
-
int flock( unsigned int fd, unsigned int cmd)
../include/syscall_stubs.h l.130 manpage: flock
- fwritesl
-
#define fwritesl(fd,str) write(fd,str"\n",sizeof(str)+1)
Defines: write
write the constant str to fd,followed by a newline. Computes length with sizeof(str) at compile time.
../include/prints.h l.114
- getegid
-
int DEF_syscall(getegid,0)
../include/syscall_stubs.h l.215 manpage: getegid
- geteuid
-
int DEF_syscall(geteuid,0)
../include/syscall_stubs.h l.213 manpage: geteuid
- getgrouplist
-
int getgrouplist(const char* user, gid_t group, gid_t groups, int *ngroups)
*Defines: grent token_i userdb passwdfile_open setpwent pwent setgrent token_s write open mmap
needs rewrite. now nonstandard.
../src/userdb/getgrouplist.c l.5 manpage: getgrouplist
- getgroups
-
int getgroups(int maxgroups, int list)
*Defines: token_s write open mmap getuid grent token_i userdb passwdfile_open setpwent pwent setgrent
get the groups of the calling process does not necessarily contain the primary group, which is given in the passwd entry. This function calls internally setgrent() and getgrent(); therefore any iteration with getgrent will be resetted.
../src/userdb/getgroups.c l.8 manpage: getgroups
- gethostname
-
int gethostname(char name,int len)
*Defines: network uname
gethostname
../src/network/gethostname.c l.4 manpage: gethostname
- getresuid
-
int getresuid( uid_t *ruid, uid_t *euid, uid_t *suid)
../include/syscall_stubs.h l.210 manpage: getresuid
- getrlimit
-
int getrlimit( unsigned int resource, struct rlimit *rlim)
../include/syscall_stubs.h l.231 manpage: getrlimit
- getrusage
-
int getrusage( int who, struct rusage *ru)
../include/syscall_stubs.h l.142 manpage: getrusage
- getsid
-
int getsid( pid_t pid)
../include/syscall_stubs.h l.164 manpage: getsid
- getsockopt
-
int getsockopt( int fd, int level, int optname, char *optval, int *optlen)
../include/syscall_stubs.h l.245 manpage: getsockopt
- getusergroups
-
int getusergroups(const char* user, int maxgroups, int list)
*Defines: userdb passwdfile_open pwent setpwent setgrent grent token_i mmap token_s write open
get the supplementary groups for the user uid. does not necessarily contain the primary group, which is given in the passwd entry. This function calls internally setgrent() and getgrent(); therefore any iteration with getgrent will be resetted.
- group_printf
-
//
Defines: getpid fileno write itooct uitohex atoi globals uitodec uitoHEX ultodec kill strlen
printf, eprintf, fprintf, itodec, ltodec, itohex, anprintf, sprintf (conversions %d %l %x %ud %ul %ux ),
- htonl
-
uint32_t htonl(uint32_t i)
Defines: network
../src/network/htonl.c l.5 manpage: htonl
- htons
-
uint16_t htons(uint16_t i)
Defines: network
../src/network/htons.c l.3 manpage: htons
- inet_aton
-
int inet_aton(const char* s, struct in_addr addr)
*Defines: network
../src/network/inet_aton.c l.3 manpage: inet_aton
- inet_ntoa
-
char* inet_ntoa( struct in_addr in)
Defines: network
convert a address This returns a pointer to a string in the globals, therefore the routine isn't reentrant. (whoever thought this might be a good idea..)
../src/network/inet_ntoa.c l.7 manpage: inet_ntoa
- initgroups
-
int initgroups(const char* user, gid_t group)
../src/userdb/initgroups.c l.2 manpage: initgroups
- killpg
-
int killpg( int pid, int signal )
../src/process/killpg.c l.2 manpage: killpg
- listen
-
int listen( int fd, int backlog)
../include/syscall_stubs.h l.248 manpage: listen
- locale_dummies
-
__
several dummy definitions, mostly locale related. (locales are not the target of minilib, so define mini_dummies to have code relying on locales running) Quite often some code does only checking for locales, but doesn't rely on them.
../include/dummies.h l.10
- lstat
-
int lstat(const char* filename,struct stat* statbuf)
../include/syscall_stubs.h l.113 manpage: lstat
- match_ext
-
int match_ext(char *text, const char *re, void(*p_match)(int number, char *pos,int len, void *userdata), int(*p_match_char)(int number, char *match_char, void *userdata), tmatch_ext *st_match, void *userdata)
text matching engine This is somewhere between a fully fledged expression machine, and a simplicistic solution. Consciusly named 'text matching', since the inherent logic is quite different to a regular expression machine. The engine matches from left to right, backtracking is done as less as possible. Since the matching is nongreedy in general, many tries can be spared. Opposed to another route, where most patterns are per default greedy, and therfore not the first matching next char is seeked for, but the first solution while matching the most chars. (I do not want to make this a hard statement, and it depends onto each pattern. But it is the way, the solution of the pattern is searched for, in most patterns.) This shows up in the logic of the patterns, which is more natural to me. It is a compromise between performance, size and capabilities. The logic is different of a "regular" regular expression machine, but has advantages (and disadvantages). I'd say, the main advantage is the easiness of adding callbacks, and defining your own matching/logic within these. Performance might be better as well overall, but this depends also on the expressions. A few nonextensive benchmarks show, this engine is a bit faster than perl's regular expression machine, slower than gnu grep (around factor2), and has the same speed as sed. This might however vary with each usecase. In favor of codesize I'm not going to optimize match_ext, but there would be several possibilities, if you'd need a faster engine. (Albite I'd like to emphasise, sed (and match_ext), also perl, are quite fast. About 10 times faster than most expression engines.) matches: * for every count of any char + for 1 or more chars ? for 1 char # for space or end of text (0) $ match end of text backslash: escape *,?,%,$,!,+,#,& and backslash itself. !: invert the matching of the next character or character class ,: separator. e.g. %,1 matches like ?*1. ( without the commata, the '1' would be part of the % match) predefined character classes: \d - digit \D - nondigit \s - space \S - nonspace \w - word character ( defined as ascii 32-126,160-255 ) \W - nonword character ( defined as ascii 0-31,127-159 ) [xyz]: character classes, here x,y or z the characters are matched literally, also \,*,?,+,.. it is not possible to match the closing bracket (]) within a character class {nX}: counted match Match n times X. For X, all expressions are allowed. If you need to match a number at the first char of 'X', separate X by a commata. E.g. {5,0} matches 5 times '0'. %[1]..%[9]: matches like a '+', and calls the callback supplied as 3rd argument (when not null). the number past the %, e.g. %1, is optional, p_match will be callen with this number as first parameter. When not supplied, p_matched will be callen with the parameter 'number' set to 0. The matching is 'nongreedy'. It is possible to rewrite the string to match from within the p_matched callback. This will not have an effect onto the current matching, even if text is e.g. deleted by writing 0's. The matched positions are called in reverse order. (The last matched % in the regex calls p_match first, the first % in the regex from the left will be callen last) supply 0 for p_matched, when you do not need to extract matches. This will treat % in the regex like a *, a following digit (0..9) in the regex is ignored. if the 5th argument, a pointer to a tmatch_ext struct, is supplied, it will be filled with the first match. (counting from left) &[1] .. &[9] "match" like a '?' and call p_match_char p_match_char has to return either RE_MATCH, RE_NOMATCH, RE_MATCHEND or a number of the count of chars, which have been matched. Therefore it is possible to e.g. rule your own character classes, defined at runtime, or do further tricks like changing the matched chars, match several chars, andsoon. When returning RE_NOMATCH, it is possible, the p_match and p_match_char callbacks are callen several times, but with different pos or len parameters. The matching works straight from left to right. So, a "*&*" will call the callback & for the first char. When returning RE_NOMATCH, the second char will be matched. Until either RE_MATCH is returned from the callback, or the last char has been matched. Matching several characters is also posssible from within the callback, the position within the text will be incremented by that number, you return from the callback. When returning RE_MATCHEND from the callback, the whole regular expression is aborted, and returns with matched; no matter, if there are chars left in the expression. The difference between % and & is the logic. % matches nongreedy, and has to check therefore the right side of the star for its matching. Possibly this has to be repeated, when following chars do not match. & is matched straight from left to right. Whatever number you return, the textpointer will be incremented by that value. However, a & isn't expanded on it's own. ( what a % is ). e.g. "x%x" will match 'aa' in xaax, x&x will match the whole expression only, when you return '2' from the callback. Performancewise, matching with & is faster, since the % has on its right side to be matched with recursing calls of match_ext. When using closures for the callbacks, you will possibly have to enable an executable stack for the trampoline code of gcc. Here, gcc complains about that. For setting this bit, have a look into the ldscripts in the folder with the same name. supply 0 for p_match_char, when you don't need it. This will treat & in the regex like ?, and match a following digit (0..9) in the text, a following digit (0..9) in the regex is ignored. ----- In general, you have to somehow invert the logic of regular expressions when using match_ext. e.g. when matching the parameter 'runlevel=default' at the kernel's commandline, a working regular expression would be "runlevel=(\S*)". This could be written here as "*runlevel=%#". For matching e.g. numbers, you'd most possibly best of with writing your own & callback. returns: 1 on match, 0 on no match ( RE_MATCH / RE_NOMATCH ) if the pointer (argument 5) st_match is nonnull, the supplied struct tmatch_ext will be set to the first matching '%' location; if there is no match, tmatch_ext.len will be set to 0. The struct is defined as: typedef struct _tmatch_ext { char* pos; int len; } tmatch_ext; (memo) When the regex ist defined within C/cpp source code, a backslash has to be defined as double backslash. (note) - be careful when negating a following *, or ?. somehow - it is logical, but seems to me I overshoot a bit, tragically hit my own foot, and stumbled into a logical paradox. Negating EVERYTHING translates to true. However, since truth is negated as well, there's a problem, cause it's now 'false', but 'false' is true. This is very close to proving 42 is the answer. What is the escape velocity in km/s out of the solar system, btw. (I'm not kidding here. Just don't do a regex with !* or !?.. And, please, do not ask me what is going to happen when the impossible gets possibilized. I have to point at the according sentences of the BSD license;// there is NO WARRANTY for CONSEQUENTIAL DAMAGE, LOSS OF PROFIT, etc pp.) A "!+" will translate into nongreedy matching of any char, however; "%!+" will match with % everything but the last char; while "%+" matches with % only the first char. !+ basically sets the greedyness of the left * or % higher.
../src/match/match_ext.c l.193
- match_ext2
-
int match_ext2(char *text, char *re, void(*p_matched_cb)(int number, char *pos,int len), int(*p_wildcard_cb)(int number, char *match_char),text_match *st_match)
text matching engine WORK IN PROGRESS, please use ext_match Atm, please nested brackets are featureful. nesting {} within () seems to work. Nesting round brackets within {} gives sometimes trouble, when wildcards are used within the brackets. I'm leaving this at it is for now. Possibly I'm going to hardcode an error message for nested brackets, or nested brackets with wildcards. This is somewhere between a fully fledged expression machine, and a simplicistic solution. Consciusly named 'text matching', since the inherent logic is quite different to a regular expression machine; "natural expressions" might fit better for the name. The engine matches from left to right, backtracking is done as less as possible. Since the matching is nongreedy in general, many tries can be spared. Opposed to another route, where most patterns are per default greedy, and therfore not the first matching next char is seeked for, but the first solution while matching the most chars. (I do not want to make this a hard statement, and it depends onto each pattern. But it is the way, the solution of the pattern is searched for, in most patterns.) This shows up in the logic of the patterns, which is more natural to me. Your mileage might vary. It is a compromise between performance, size and capabilities. The logic is different of a "regular" regular expression machine, but has advantages (and disadvantages). I'd say, the main advantage is the easiness of adding callbacks, and defining your own matching/logic within these. Performance might be better as well overall, but this depends on the expressions and usecases as well. Yet I for myself have to get a grip of the possibilities of this engine. However, I have the feeling, the logic is much more natural. With regular regexes you always have to think kind of 'backwards', e.g., match ".*" -> match "." (any char) x times. gets to a simple "*" or, to match all group and user id's of /etc/passwd, a regular expression would be: "(\d*):(\d*)" This is here: "*(\d*):(\d*)*" The content in the brackets looks the same, but it's matched quite different. The regular expression (the first) matches x times \d, for x>=0. In the second expressin, the ext_match expression, the first digit is matched, and then nongreedy any chars, until the first occurence of ':'. It is another logic. Whether it suits you, you have to decide. The callbacks have shown up to be a mighty tool, while at the same time having a good performance. A few nonextensive benchmarks show, this engine is a bit faster than perl's regular expression machine, slower than gnu grep (around factor2), and has the same speed as sed. This might vary with each usecase, but the callbacks for extracting matches have some advantage, as well as the strict left to right and nongreedy parsing. In favor of codesize I'm not going to optimize ext_match, but there would be several possibilities, if you'd need a faster engine. (Albite I'd like to emphasise, sed (and ext_match), also perl, are quite fast. About 5 to 10 times faster than most expression engines.) matches: * for every count of any char + for 1 or more chars ? for 1 char # for space, end of text (\0), linebreak, tab ( \t \n \f \r \v ) @ matches the beginning of the text or endofline (\n) $ match end of text (\0) or linebreak backslash: escape *,?,%,@,$,!,+,#,& and backslash itself. !: invert the matching of the next character or character class ,: separator. e.g. %,1 matches like ?*1. ( without the commata, the '1' would be part of the % match) predefined character classes: \d - digit \D - nondigit \s - space \S - nonspace \w - word character ( defined as ascii 32-126,160-255 ) \W - nonword character ( defined as ascii 0-31,127-159 ) \x - hexadecimal digit (0-9,a-f,A-F) [xyz]: character classes, here x,y or z the characters are matched literally, also \,*,?,+,.. it is not possible to match the closing bracket (]) within a character class {nX}: counted match Match n times X. For X, all expressions are allowed. If you need to match a number at the first char of 'X', separate X by a commata. E.g. {5,0} matches 5 times '0'. n can be a number, * or +. ('*' matches 0 or more, '+' 1 or more times) (X): match the subexpression X. atm, no nesting of round () and {} brackets allowed %[1]..%[9]: matches like a '+', and calls the callback supplied as 3rd argument (when not null). the number past the %, e.g. %1, is optional, p_matched_cb will be callen with this number as first parameter. When not supplied, p_matched_cb will be callen with the parameter 'number' set to 0. The matching is 'nongreedy'. It is possible to rewrite the string to match from within the p_matched_cb callback. This will not have an effect onto the current matching, even if text is e.g. deleted by writing 0's. The matched positions are called in reverse order. (The last matched % in the regex calls p_matched_cb first, the first % in the regex from the left will be callen last) / The regex is first matched; when the regex has matched, the %'s are filled/ the callbacks executed. (x) bracketed patterns are matched the same way. (Not like &, which callbacks are invoked, while matching) supply 0 for p_matched_cb, when you do not need to extract matches. This will treat % in the regex like a *, a following digit (0..9) in the regex is ignored. if the 5th argument, a pointer to a text_match struct, is supplied, it will be filled with the first match. (counting from left) &[1] .. &[9] "match" like a '?' and call p_wildcard_cb p_wildcard_cb has to return either RE_MATCH, RE_NOMATCH, RE_MATCHEND or the number of the count of chars, which have been matched. Therefore it is possible to e.g. rule your own character classes, defined at runtime, or do further tricks like changing the matched chars, match several chars, andsoon. When returning RE_NOMATCH, it is possible, the p_wildcard_cb callback is callen several times, but with different pos or len parameters, since p_wildcard_cb is invoked while matching. The matching works straight from left to right. So, a "*&*" will call the callback & for the first char. When returning RE_NOMATCH, the second char will be tried to match. Until either RE_MATCH is returned from the callback, or the last char of the text has been tried to match. Matching several characters is also posssible from within the callback, the position within the text will be incremented by that number, you return from the callback. When returning RE_MATCHEND from the callback, the whole expression is aborted, and returns with matched; no matter, if there are chars left in the expression. The difference between % and & is the logic. % matches nongreedy, and has to check therefore the right side of the star for its matching. Possibly this has to be repeated, when following chars do not match. & is matched straight from left to right. Whatever number you return, the textpointer will be incremented by that value. However, a & isn't expanded on it's own. ( what a % is ). e.g. "x%x" will match 'aa' in xaax, x&x will match the whole expression only, when you return '2' from the callback. Performancewise, matching with & is faster, since the % has on its right side to be matched with recursing calls of ext_match. When using closures for the callbacks, you will possibly have to enable an executable stack for the trampoline code of gcc. Here, gcc complains about that. For setting this bit, please have a look into the ldscripts in the folder with the same name. supply 0 for p_wildcard_cb, when you don't need it. This will treat & in the regex like ?, and match a following digit (0..9) in the text, a following digit (0..9) in the regex is ignored. ----- In general, you have to somehow invert the logic of regular expressions when using ext_match. Regular expressions could be regarded as "polish rpn notation", first the char to be matched, then the count. This expression machine could be described as "natural expression" machine. First you define the number, then the chars or expression to be matched. Furthermore, *,% and + match as less as possible. You have to think about what needs to follow the wildcards. e.g. when matching the parameter 'runlevel=default' at the kernel's commandline, a working regular expression would be "runlevel=(\S*)". This could be written here as "*runlevel=%#". For matching e.g. numbers, you'd most possibly best of with writing your own & callback. returns: 1 on match, 0 on no match ( RE_MATCH / RE_NOMATCH ) if the pointer (argument 5) st_match is nonnull, the supplied struct text_match will be set to the first matching '%' location; if there is no match, text_match.len will be set to 0. The struct is defined as: typedef struct _text_match { char* pos; int len; } text_match; (memo) When the regex ist defined within C/cpp source code, a backslash has to be defined as double backslash. (note) - be careful when negating a following *, or ?. somehow - it is logical, but seems to me I overshoot a bit, tragically hit my own foot, and stumbled into a logical paradox. Negating EVERYTHING translates to true. However, since truth is negated as well, there's a problem, cause it's now 'false', but 'false' is true. This is very close to proving 42 is the answer. What is the escape velocity in km/s out of the solar system, btw. (I'm not kidding here. Just don't do a regex with !* or !?.. And, please, do not ask me what is going to happen when the impossible gets possibilized. I have to point at the according sentences of the BSD license; there is NO WARRANTY for CONSEQUENTIAL DAMAGE, LOSS OF PROFIT, etc pp.) A "!+" will translate into nongreedy matching of any char, however; "%!+" will match with % everything but the last char; while "%+" matches with % only the first char. !+ basically sets the greedyness of the left * or % higher. (work in progress here) please use ext_match return 0 for nomatch, the current textpos ( >0 ) for a match With the exception of an empty text, matched by e.g. "*". This will return 0, albite the regex formally matches, with 0 chars. (todo) bracket matching () and {} needs debugging. (test/extmatch2 for testing) Add a callback for bracket matches, and add a matchlist (linked list, allocated with malloc_brk) Trouble: e.g. *:(*) doesn't match, albite it should .. better. Now: # matches the end, after a bracket. Like it should $ doesn't. But should as well. change '+' to greedy matching of any char for {n,X} let n be * or + as well. (this would be closer to regular regulars again.?.) note. About a tokenizer: matching quoted string is really easy with the callback structure: just match with &. When a quote is matched, look forward to the next quote, and return that many chars. Same time, the quoted string is matched. That's so easy, it is hard to believe. When using closures for that, it is same time easy to collect all tokens. It is even easier. just a "*("*")*" is enough. ->There is something needed for partial matching. Possibly spare the last *, and return, as soon the pattern is at it's end (and not the text?) Already works this way. Should start to define the language for the init scripts. Or better, start thinking abut that, but follow my other obligations the next time. Have to think thouroughly about what points would make such a language useful. The reason to think about that is clear - performance squeezing, faster startup time. And writing the startup scripts in C is. Well. little bit painful. However, together with minilib, there is nearly no difference between having a C program compiled and run, or working with scripts. To not have the overhead of linking the external libraries in, is of quite some advance. The only difference, the compiled binaries are "cached". have just to sort something sensible out for the systematic. Implement an own loader? possibly easy. Since the loading address is fixed. This could possibly also be the solution for the yet unclear question of the line between parsing arguments and calling the main function of the small core tools, andsoon. ..yet I've to fiddle out the possibilities (and quirks) of this machine. seems, this expression language did overpower it's creator. Bugs (features): matching e.g. *matches*@*doesn't match* potentiates the *@* to many possibilities. One for every linebreak following 'matches'.
- memchr
-
void* memchr(const void *s, int c, unsigned int n)
../src/memory/memchr.c l.2 manpage: memchr
- msync
-
int msync( void* addr, size_t len, int flags)
../include/syscall_stubs.h l.262 manpage: msync
- network
-
__
network definitions
- ntohl
-
#define ntohl(i) htonl(i)
../src/network/ntohl.h l.2 manpage: ntohl
- ntohs
-
#define ntohs(i) htons(i)
Defines: network
../src/network/macros.h l.2 manpage: ntohs
- optimization_fence
-
void optimization_fence(void*p)
prevent optimizations. cast a var to void*, and calling this, leaves the compiler unknown on what he can strip. The function attribute noipa means, the compiler doesn't know, what the function itself does. (the function does nothing, but don't tell that gcc, please..) therefore, everything used as parameter to this function, will be calculated, defined, and so on before. It's used for the globals, shich are pushed within _start onto the stack. since _start itself only provides a global pointer, and initialitzes some of the globals, but doesn't use them again, this construction is needed. more funnily, the function will never be called. It's past the asm inline syscall to exit. But again, luckily gcc doesn't know. All other options, like having the globals volatile, setting the optimization flag of _start to 0, having a volatile asm call with the globals as param, and so on, have been useless. All after all, seems to me, ai has it's restrictions. With less overhead the macro OPTFENCE(...) goes. There the call to the "ipa" function is jumped over, via asm inline instructions. Doesn't work with clang. But yet I also didn't it with clang.
- poll
-
int poll(struct pollfd *fds, nfds_t cnt, int timeout)
../include/poll.h l.25 manpage: poll
- prctl
-
int prctl( int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)
../include/syscall_stubs.h l.274
- pwent
-
__
define passwd and group structures
- qsort
-
void qsort(void base, size_t nel, size_t width, int (*comp)(const void *, const void *))
*Defines: swap
(quick) shell sort routine following the tradition, this isn't exactly a quicksort algorithm, albite named quicksort. It is a shell sort implementation, originally done by Ray Gardner, 5/90; which in turn I did find within musl.
../src/sort/qsort.c l.35 manpage: qsort
- readlink
-
int readlink( const char *path, char *buf, int bufsiz)
../include/syscall_stubs.h l.127 manpage: readlink
- recv
-
int recv(int sockfd, void buf, size_t len, int flags)
*Defines: recvfrom
../src/network/recv.c l.3 manpage: recv
- recvfrom
-
int recvfrom( int fd, void *ubuf, size_t size, unsigned flags, struct sockaddr *addr, unsigned int *addr_len)
../include/syscall_stubs.h l.236 manpage: recvfrom
- rt_sigsuspend
-
int rt_sigsuspend( const sigset_t *mask, size_t sigsetsize)
../include/syscall_stubs.h l.188
- sendto
-
int sendto( int fd, void *buff, size_t len, unsigned flags, struct sockaddr *addr, int addr_len)
../include/syscall_stubs.h l.239 manpage: sendto
- setbrk
-
int setbrk(long addr)
Defines: sys_brk
set the current brk wrapper for brk(), with type of brk changed to long
- setenv
-
int setenv( const char name, const char *value, int overwrite )
*Defines: stpcpy strcpy ret_errno strlen 0 environ
put a string into the environmental vars UNTESTED (!) TODO the supplied string's pointer is put into the environmental array of pointers. The supplied strings are copied into memory. If overwrite is zero, an existing environmental variable is not overritten. If overwrite is 1, the environmental variable is overwritten, but not(!) freed from memory. The supplied value is not checked for e.g. an '=' Returns: - 0 on success - EINVAL on error
../src/system/setenv.c l.15 manpage: setenv
- setresuid
-
int setresuid( uid_t *ruid, uid_t *euid, uid_t *suid)
../include/syscall_stubs.h l.211 manpage: setresuid
- setreuid
-
int setreuid( uid_t ruid, uid_t euid)
../include/syscall_stubs.h l.163 manpage: setreuid
- setrlimit
-
int setrlimit( unsigned int resource, struct rlimit *rlim)
../include/syscall_stubs.h l.232 manpage: setrlimit
- setsockopt
-
int setsockopt( int fd, int level, int optname, const void *optval, int optlen)
../include/syscall_stubs.h l.243 manpage: setsockopt
- short_errstr
-
const char* short_errstr(int num)
short error (errno) string. this adds about 2kB to the compiled binary(!)
- sigsuspend
-
int sigsuspend( const sigset_t mask )
*Defines: rt_sigsuspend
../src/process/sigaction.c l.53 manpage: sigsuspend
- snprintfs
-
int snprintfs( char* buf, int size, char *fmt, …)
prints formatted and unbuffered output into buf. only %s and %c are recognized. snprintfs instead of snprintf can save some bytes. untested
- socket
-
int socket( int family, int type, int protocol)
../include/syscall_stubs.h l.229 manpage: socket
- stpcpy
-
char *stpcpy(char *dest, const char *src)
copy src to dest, return a pointer to the last char +1 ( ending '0' )
../src/string/stpcpy.c l.3 manpage: stpcpy
- stplcpy
-
char *stplcpy(char *dest, const char *src, int size)
copy src to dest, return a pointer to the last char +1 ( ending '0' ) doesn't pad dest with 0, when size<src;
- stpncpy
-
char *stpncpy(char *dest, const char *src, int size)
copy src to dest, return a pointer to the last char +1 ( ending '0' ) Please note stplcpy (terminology borrowed from freebsd), which does the same, but doesn't pad dest with 0's.
../src/string/stpncpy.c l.6 manpage: stpncpy
- strcspn
-
int strcspn(const char *s1, const char *s2)
look for the first place in s1, containing one of the chars of s2. Optimizes a bit (+16Bytes code), when OPTIMIZE is defined
../src/string/strcspn.c l.6 manpage: strcspn
- strlcpy
-
char *strlcpy(char *dest, const char *src, int n)
copy max n chars from src to dest, when src is longer than dest, end dest[n-1] with '\0'.
../src/string/strlcpy.c l.5 manpage: strlcpy
- strncat
-
char* strncat( char* dst, const char* src, unsigned int n)
../src/string/strncat.c l.2 manpage: strncat
- strndup
-
char strndup(const char *source, int maxlen)
*Defines: stplcpy strlen 0
../src/string/strndup.c l.5 manpage: strndup
- strnlen
-
int strnlen(const char*str, int max)
return len of str. if str points to 0, return 0 if no 0 is within max chars of str, return max
../src/string/strnlen.c l.8 manpage: strnlen
- strpbrk
-
char* strpbrk(const char* s, const char* charset)
../src/string/strpbrk.c l.2 manpage: strpbrk
- strspn
-
int strspn(const char *s1, const char *s2)
../src/string/strspn.c l.2 manpage: strspn
- strtoimax
-
int strtoimax(const char *c, const char **endp, int base)
conversion
../src/string/strtoimax.c l.4 manpage: strtoimax
- strtok
-
char* strtok(char s, const char *delim)
*Defines: strtok_r
../src/string/strtok.c l.3 manpage: strtok
- strtok_r
-
char* strtok_r(char *s, const char *delim, char **last)
../src/string/strtok_r.c l.2 manpage: strtok_r
- strtoll
-
long long int strtoll(const char c, const char **endp, int base)
*Defines: strtol
conversion doesn't check for overflow(!) For linux x64, long long and long both have 64 bit. Therefore, strtoll just calls strtol
../src/string/strtoll.c l.8 manpage: strtoll
- sys_signame
-
_const char* sys_signame[] = _
abbreviated signal names, according to BSD > 4.2
../src/process/signames.h l.3 manpage: sys_signame
- tcgetpgrp
-
int tcgetpgrp(int fd)
../src/termios/tcgetpgrp.c l.2 manpage: tcgetpgrp
- tcsetpgrp
-
int tcsetpgrp(int fd, int pgrp)
../src/termios/tcsetpgrp.c l.2 manpage: tcsetpgrp
- term_width
-
int term_width()
Defines: environ termio
get the terminal width reads the environmental var COLS, if not present, returns 80. Doesn't check for the existence of a terminal.
- termio
-
__
termios structures and definitions
- timerfd_create
-
int timerfd_create( int clockid, int flags)
../include/syscall_stubs.h l.268
- timerfd_gettime
-
int timerfd_gettime( int ufd, struct itimerspec *otmr)
../include/syscall_stubs.h l.272
- timerfd_settime
-
int timerfd_settime( int ufd, int flags, const struct itimerspec *utmr, struct itimerspec *otmr)
../include/syscall_stubs.h l.270
- times
-
int times( struct tms *info)
../include/syscall_stubs.h l.149 manpage: times
- token_i
-
int token_i( userdb* udb, char **p )
../src/userdb/userdb.c l.33
- token_s
-
char *token_s( userdb *udb, char **p )
tokenizer for the passwd/group files. used by the group/user pwentry access functions. performance of subsequent calls could be improved by replacing all ':' and '\n' by 0's when loading the db file. it would be possible as well, testing not only single bytes, but integers of longs at once. However, in most cases, e.g. for big directories with many small files, in most cases all files do have the same owner and group. Since the last result to calls of the access functions is cached, there wouldn't be an improvement by optimizing the tokenizing functions. So I'm leaving this for now, as it is. And most possibly it would be better to implement bsd's cached versions of the user db access functions instead.
- unsetenv
-
int unsetenv( char name)
*Defines: ret_errno environ
remove a string from the environmental vars The env var is not free'd. (It's not possible, since we don't know whether the string has been allocated with malloc or has been setup by the system ) Returns: - 0 on success, - EINVAL: string was 0, did contain a '=', some other error
../src/system/unsetenv.c l.10 manpage: unsetenv
- userdb_open
-
int userdb_open(userdb udb, const char file)
Defines: fstat close write globals
../src/userdb/userdb_open.c l.3
- warn
-
#define warn( fmt … ) { fprintf(stderr,fmt ); }
Defines: write fileno strlen globals getpid kill
print an error message to stderr
../src/process/error.h l.33 manpage: warn
- where
-
int where(const char file,char *buf)
*Defines: access environ
locate an executable in PATH
- writesl
-
#define writesl(str) write(STDOUT_FILENO,str "\n",sizeof(str)+1)
Defines: write
write the constant str to stdout, followed by a newline. Computes length with sizeof(str) at compile time.
../include/prints.h l.93
- endgrent
-
void endgrent()
Defines: pwent munmap
../src/userdb/endgrent.c l.4 manpage: endgrent
- endpwent
-
void endpwent()
Defines: pwent munmap
../src/userdb/endpwent.c l.4 manpage: endpwent
- getgrent
-
struct group* getgrent()
Defines: userdb pwent open
../src/userdb/getgrent.c l.4 manpage: getgrent
- getgrgid
-
struct group getgrgid(gid_t gid)
*Defines: token_i globals close grent pwent setgrent userdb write open token_s mmap fstat
get the group entry of the group "gid". the last result is cached, multiple calls with the same name will return the cached result.
../src/userdb/getgrgid.c l.7 manpage: getgrgid
- getgrnam
-
struct group getgrnam(const char name)
Defines: token_i globals grent close pwent setgrent userdb write open token_s mmap fstat
get the group entry of the group "name". the last result is cached, multiple calls with the same name will return the cached result.
../src/userdb/getgrnam.c l.7 manpage: getgrnam
- getpwent
-
struct passwd* getpwent()
Defines: userdb open
../src/userdb/getpwent.c l.4 manpage: getpwent
- getpwnam
-
struct passwd getpwnam(const char name)
Defines: token_i globals close pwent write open token_s mmap fstat
get the passwd entry of the user "name". the last result is cached, multiple calls with the same name will return the cached result.
../src/userdb/getpwnam.c l.7 manpage: getpwnam
- getpwuid
-
struct passwd getpwuid(uid_t uid)
*Defines: token_s write open mmap token_i passwdfile_open pwent setpwent
get the passwd entry of the user with uid. the last result is cached, multiple calls with the same uid will return the cached result.
../src/userdb/getpwuid.c l.7 manpage: getpwuid
- max_groupmembers
-
#ifndef mini_max_groupmembers
The maximum number of users, which are within a group. used for the allocation of the array gr_mem. default: 64
../include/globaldefs.h l.108
- setgrent
-
void setgrent()
../src/userdb/setgrent.c l.3 manpage: setgrent
- setpwent
-
void setpwent()
../src/userdb/setpwent.c l.3 manpage: setpwent
- sys__sysctl
-
syssysctl( struct sysctl_args args)
*read/write system parameters ../include/syscalls_x64.h l.316
- sys_accept
-
sys_accept( int fd, struct sockaddr upeersockaddr, int *upeeraddrlen)
*accept a new connection on a socket ../include/syscalls_x64.h l.91
- sys_accept4
-
sys_accept4( int fd, struct sockaddr upeer_sockaddr, int *upeer_addrlen, int flags)
*accept a connection on a socket ../include/syscalls_x64.h l.552
- sys_access
-
sys_access( const char filename, int mode)
*determine accessibility of a file relative to directory file ../include/syscalls_x64.h l.47
- sys_acct
-
sys_acct( const char name)
*switch process accounting on or off ../include/syscalls_x64.h l.330
- sys_add_key
-
sys_add_key( const char _type, const char *_description, const void *_payload, size_t plen)
*add a key to the kernel’s key management facility ../include/syscalls_x64.h l.472
- sys_adjtimex
-
sys_adjtimex( struct timex txc_p)
*tune kernel clock ../include/syscalls_x64.h l.322
- sys_alarm
-
sys_alarm( unsigned int seconds)
schedule an alarm signal ../include/syscalls_x64.h l.79
- sys_arch_prctl
-
sys_arch_prctl( struct task_struct task, int code, unsigned long *addr)
*set architecture-specific thread state ../include/syscalls_x64.h l.320
- sys_bind
-
sys_bind( int fd, struct sockaddr umyaddr, int addrlen)
*bind a name to a socket ../include/syscalls_x64.h l.103
- sys_brk
-
long sys_brk(unsigned long addr)
change data segment size
the kernel syscall brk.
- sys_capget
-
sys_capget( cap_user_header_t header, cap_user_data_t dataptr)
set/get capabilities of thread(s) ../include/syscalls_x64.h l.256
- sys_capset
-
sys_capset( cap_user_header_t header, const cap_user_data_t data)
set/get capabilities of thread(s) ../include/syscalls_x64.h l.258
- sys_chdir
-
sys_chdir( const char filename)
*change working directory ../include/syscalls_x64.h l.166
- sys_chmod
-
sys_chmod( const char filename, mode_t mode)
*change mode of a file relative to directory file descriptor ../include/syscalls_x64.h l.186
- sys_chown
-
sys_chown( const char filename, uid_t user, gid_t group)
*change owner and group of a file relative to directory ../include/syscalls_x64.h l.190
- sys_chroot
-
sys_chroot( const char filename)
*change root directory ../include/syscalls_x64.h l.326
- sys_clock_adjtime
-
sys_clock_adjtime( clockid_t which_clock, struct timex *tx)
../include/syscalls_x64.h l.586
- sys_clock_getres
-
sys_clock_getres( const clockid_t which_clock, struct timespec *tp)
../include/syscalls_x64.h l.436
- sys_clock_gettime
-
sys_clock_gettime( const clockid_t which_clock, struct timespec tp)
*clock and time functions ../include/syscalls_x64.h l.434
- sys_clock_nanosleep
-
sys_clock_nanosleep( const clockid_t which_clock, int flags, const struct timespec rqtp, struct timespec *rmtp)
*high resolution sleep with specifiable clock ../include/syscalls_x64.h l.438
- sys_clock_settime
-
sys_clock_settime( const clockid_t which_clock, const struct timespec tp)
*clock and timer functions ../include/syscalls_x64.h l.432
- sys_clone
-
sys_clone( unsigned long clone_flags, unsigned long newsp, void parent_tid, void *child_tid)
*create a child process ../include/syscalls_x64.h l.117
- sys_close
-
sys_close( unsigned int fd)
close a file descriptor ../include/syscalls_x64.h l.11
- sys_connect
-
sys_connect( int fd, struct sockaddr uservaddr, int addrlen)
*connect a socket ../include/syscalls_x64.h l.89
- sys_creat
-
sys_creat( const char pathname, int mode)
*create a new file or rewrite an existing one ../include/syscalls_x64.h l.176
- sys_delete_module
-
sys_delete_module( const char name_user, unsigned int flags)
*unload a kernel module ../include/syscalls_x64.h l.354
- sys_dup
-
sys_dup( unsigned int fildes)
duplicate an open file descriptor ../include/syscalls_x64.h l.69
- sys_dup2
-
sys_dup2( unsigned int oldfd, unsigned int newfd)
duplicate a file descriptor ../include/syscalls_x64.h l.71
- sys_dup3
-
sys_dup3( unsigned int oldfd, unsigned int newfd, int flags)
duplicate a file descriptor ../include/syscalls_x64.h l.560
- sys_epoll_create
-
sys_epoll_create( int size)
open an epoll file descriptor ../include/syscalls_x64.h l.408
- sys_epoll_create1
-
sys_epoll_create1( int flags)
open an epoll file descriptor ../include/syscalls_x64.h l.558
- sys_epoll_ctl
-
sys_epoll_ctl( int epfd, int op, int fd, struct epoll_event event)
*control interface for an epoll file descriptor ../include/syscalls_x64.h l.444
- sys_epoll_pwait
-
sys_epoll_pwait( int epfd, struct epoll_event events, int maxevents, int timeout, const sigset_t *sigmask, size_t sigsetsize)
*wait for an I/O event on an epoll file descriptor ../include/syscalls_x64.h l.538
- sys_epoll_wait
-
sys_epoll_wait( int epfd, struct epoll_event events, int maxevents, int timeout)
*wait for an I/O event on an epoll file descriptor ../include/syscalls_x64.h l.442
- sys_eventfd
-
sys_eventfd( unsigned int count)
create a file descriptor for event notification ../include/syscalls_x64.h l.544
- sys_eventfd2
-
sys_eventfd2( unsigned int count, int flags)
create a file descriptor for event notification ../include/syscalls_x64.h l.556
- sys_execve
-
sys_execve( const char filename, const char *const argv[], const char *const envp[])
*execute program ../include/syscalls_x64.h l.123
- sys_exit
-
sys_exit( int error_code)
terminate a process
- sys_exit_group
-
sys_exit_group( int error_code)
exit all threads in a process ../include/syscalls_x64.h l.440
- sys_faccessat
-
sys_faccessat( int dfd, const char filename, int mode)
*determine accessibility of a file relative to directory file ../include/syscalls_x64.h l.514
- sys_fadvise64
-
sys_fadvise64( int fd, loff_t offset, size_t len, int advice)
predeclare an access pattern for file data ../include/syscalls_x64.h l.420
- sys_fallocate
-
sys_fallocate( long fd, long mode, loff_t offset, loff_t len)
manipulate file space ../include/syscalls_x64.h l.546
- sys_fanotify_init
-
sys_fanotify_init( unsigned int flags, unsigned int event_f_flags)
create and initialize fanotify group ../include/syscalls_x64.h l.576
- sys_fanotify_mark
-
sys_fanotify_mark( long fanotify_fd, long flags, __u64 mask, long dfd, long pathname)
add, remove, or modify an fanotify mark on a filesystem ../include/syscalls_x64.h l.578
- sys_fchdir
-
sys_fchdir( unsigned int fd)
change working directory ../include/syscalls_x64.h l.168
- sys_fchmod
-
sys_fchmod( unsigned int fd, mode_t mode)
change mode of a file ../include/syscalls_x64.h l.188
- sys_fchmodat
-
sys_fchmodat( int dfd, const char filename, mode_t mode)
*change mode of a file relative to directory file descriptor ../include/syscalls_x64.h l.512
- sys_fchown
-
sys_fchown( unsigned int fd, uid_t user, gid_t group)
change owner and group of a file ../include/syscalls_x64.h l.192
- sys_fchownat
-
sys_fchownat( int dfd, const char filename, uid_t user, gid_t group, int flag)
*change owner and group of a file relative to directory ../include/syscalls_x64.h l.496
- sys_fcntl
-
sys_fcntl( unsigned int fd, unsigned int cmd, unsigned long arg)
file control ../include/syscalls_x64.h l.150
- sys_fdatasync
-
sys_fdatasync( unsigned int fd)
synchronize the data of a file ../include/syscalls_x64.h l.156
- sys_fgetxattr
-
sys_fgetxattr( int fd, const char name, void *value, size_t size)
*retrieve an extended attribute value ../include/syscalls_x64.h l.372
- sys_finit_module
-
sys_finit_module( int fd, const char uargs, int flags)
*load a kernel module ../include/syscalls_x64.h l.602
- sys_flistxattr
-
sys_flistxattr( int fd, char list, size_t size)
*list extended attribute names ../include/syscalls_x64.h l.378
- sys_flock
-
sys_flock( unsigned int fd, unsigned int cmd)
apply or remove an advisory lock on an open file ../include/syscalls_x64.h l.152
- sys_fork
-
sysSYSDEF_syscall(_fork,0)
create a new process ../include/syscalls_x64.h l.119
- sys_fremovexattr
-
sys_fremovexattr( int fd, const char name)
*remove an extended attribute ../include/syscalls_x64.h l.384
- sys_fsetxattr
-
sys_fsetxattr( int fd, const char name, const void *value, size_t size, int flags)
*set an extended attribute value ../include/syscalls_x64.h l.366
- sys_fstat
-
sys_fstat( unsigned int fd, struct stat statbuf)
*get file status ../include/syscalls_x64.h l.15
- sys_fstatfs
-
sys_fstatfs( unsigned int fd, struct statfs buf)
*get filesystem statistics ../include/syscalls_x64.h l.280
- sys_fsync
-
sys_fsync( unsigned int fd)
synchronize changes to a file ../include/syscalls_x64.h l.154
- sys_ftruncate
-
sys_ftruncate( unsigned int fd, unsigned long length)
truncate a file to a specified length ../include/syscalls_x64.h l.160
- sys_futex
-
sys_futex( u32 uaddr, int op, u32 val, struct timespec *utime, u32 *uaddr2, u32 val3)
*fast user-space locking ../include/syscalls_x64.h l.390
- sys_futimesat
-
sys_futimesat( int dfd, const char filename, struct timeval *utimes)
*change timestamps of a file relative to a directory file descriptor ../include/syscalls_x64.h l.498
- sys_get_mempolicy
-
sys_get_mempolicy( int policy, unsigned long *nmask, unsigned long maxnode, unsigned long addr, unsigned long flags)
*retrieve NUMA memory policy for a thread ../include/syscalls_x64.h l.454
- sys_get_robust_list
-
sys_get_robust_list( int pid, struct robust_list_head *head_ptr, size_t *len_ptr)
*get/set list of robust futexes ../include/syscalls_x64.h l.524
- sys_getcpu
-
sys_getcpu( unsigned cpup, unsigned *nodep, struct getcpu_cache *unused)
*determine CPU and NUMA node on which the calling thread is running ../include/syscalls_x64.h l.594
- sys_getcwd
-
sys_getcwd( char buf, unsigned long size)
*get the pathname of the current working directory ../include/syscalls_x64.h l.164
- sys_getdents
-
sys_getdents( unsigned int fd, struct linux_dirent dirent, unsigned int count)
*get directory entries ../include/syscalls_x64.h l.162
- sys_getdents64
-
sys_getdents64( unsigned int fd, struct linux_dirent64 dirent, unsigned int count)
*get directory entries ../include/syscalls_x64.h l.412
- sys_getegid
-
sysSYSDEF_syscall(_getegid,0)
get the effective group ID ../include/syscalls_x64.h l.222
- sys_geteuid
-
sysSYSDEF_syscall(_geteuid,0)
get the effective user ID ../include/syscalls_x64.h l.220
- sys_getgid
-
sysSYSDEF_syscall(_getgid,0)
get the real group ID ../include/syscalls_x64.h l.214
- sys_getgroups
-
sys_getgroups( int gidsetsize, gid_t grouplist)
*get supplementary group IDs ../include/syscalls_x64.h l.236
- sys_getitimer
-
sys_getitimer( int which, struct itimerval value)
*get and set value of interval timer ../include/syscalls_x64.h l.77
- sys_getpeername
-
sys_getpeername( int fd, struct sockaddr usockaddr, int *usockaddr_len)
*get the name of the peer socket ../include/syscalls_x64.h l.109
- sys_getpgid
-
sys_getpgid( pid_t pid)
get the process group ID for a process ../include/syscalls_x64.h l.248
- sys_getpgrp
-
sysSYSDEF_syscall(_getpgrp,0)
get the process group ID of the calling process ../include/syscalls_x64.h l.228
- sys_getpid
-
sysSYSDEF_syscall(_getpid,0)
get the process ID ../include/syscalls_x64.h l.83
- sys_getppid
-
sysSYSDEF_syscall(_getppid,0)
get the parent process ID ../include/syscalls_x64.h l.226
- sys_getpriority
-
sys_getpriority( int which, int who)
get and set the nice value ../include/syscalls_x64.h l.284
- sys_getrandom
-
sys_getrandom( char buf, size_t count, unsigned int flags)
*obtain a series of random bytes ../include/syscalls_x64.h l.612
- sys_getresgid
-
sys_getresgid( gid_t rgid, gid_t *egid, gid_t *sgid)
*get real, effective and saved user/group IDs ../include/syscalls_x64.h l.246
- sys_getresuid
-
sys_getresuid( uid_t ruid, uid_t *euid, uid_t *suid)
*get real, effective and saved user/group IDs ../include/syscalls_x64.h l.242
- sys_getrlimit
-
sys_getrlimit( unsigned int resource, struct rlimit rlim)
*control maximum resource consumption ../include/syscalls_x64.h l.200
- sys_getrusage
-
sys_getrusage( int who, struct rusage ru)
*get information about resource utilization ../include/syscalls_x64.h l.202
- sys_getsid
-
sys_getsid( pid_t pid)
get the process group ID of a session leader ../include/syscalls_x64.h l.254
- sys_getsockname
-
sys_getsockname( int fd, struct sockaddr usockaddr, int *usockaddr_len)
*get the socket name ../include/syscalls_x64.h l.107
- sys_getsockopt
-
sys_getsockopt( int fd, int level, int optname, char optval, int *optlen)
*get the socket options ../include/syscalls_x64.h l.115
- sys_gettid
-
sysSYSDEF_syscall(_gettid,0)
get thread identification ../include/syscalls_x64.h l.358
- sys_gettimeofday
-
sys_gettimeofday( struct timeval tv, struct timezone *tz)
*get the date and time ../include/syscalls_x64.h l.198
- sys_getuid
-
sysSYSDEF_syscall(_getuid,0)
get a real user ID ../include/syscalls_x64.h l.210
- sys_getxattr
-
sys_getxattr( const char pathname, const char *name, void *value, size_t size)
*retrieve an extended attribute value ../include/syscalls_x64.h l.368
- sys_init_module
-
sys_init_module( void umod, unsigned long len, const char *uargs)
*load a kernel module ../include/syscalls_x64.h l.352
- sys_inotify_add_watch
-
sys_inotify_add_watch( int fd, const char pathname, u32 mask)
*add a watch to an initialized inotify instance ../include/syscalls_x64.h l.484
- sys_inotify_init
-
sysSYSDEF_syscall(_inotify_init,0)
initialize an inotify instance ../include/syscalls_x64.h l.482
- sys_inotify_init1
-
sys_inotify_init1( int flags)
initialize an inotify instance ../include/syscalls_x64.h l.564
- sys_inotify_rm_watch
-
sys_inotify_rm_watch( int fd, __s32 wd)
remove an existing watch from an inotify instance ../include/syscalls_x64.h l.486
- sys_io_cancel
-
sys_io_cancel( aio_context_t ctx_id, struct iocb iocb, struct io_event *result)
*cancel an outstanding asynchronous I/O operation ../include/syscalls_x64.h l.404
- sys_io_destroy
-
sys_io_destroy( aio_context_t ctx)
destroy an asynchronous I/O context ../include/syscalls_x64.h l.398
- sys_io_getevents
-
sys_io_getevents( aio_context_t ctx_id, long min_nr, long nr, struct io_event events)
*read asynchronous I/O events from the completion queue ../include/syscalls_x64.h l.400
- sys_io_setup
-
sys_io_setup( unsigned nr_events, aio_context_t ctxp)
*create an asynchronous I/O context ../include/syscalls_x64.h l.396
- sys_io_submit
-
sys_io_submit( aio_context_t ctx_id, long nr, struct iocb *iocbpp)
*submit asynchronous I/O blocks for processing ../include/syscalls_x64.h l.402
- sys_ioctl
-
sys_ioctl( unsigned int fd, unsigned int cmd, unsigned long arg)
control a STREAMS device (\fBSTREAMS\fP) ../include/syscalls_x64.h l.37
- sys_ioperm
-
sys_ioperm( unsigned long from, unsigned long num, int turn_on)
set port input/output permissions ../include/syscalls_x64.h l.350
- sys_iopl
-
sys_iopl( unsigned int level, struct pt_regs regs)
*change I/O privilege level ../include/syscalls_x64.h l.348
- sys_ioprio_get
-
sys_ioprio_get( int which, int who)
get/set I/O scheduling class and priority ../include/syscalls_x64.h l.480
- sys_ioprio_set
-
sys_ioprio_set( int which, int who, int ioprio)
get/set I/O scheduling class and priority ../include/syscalls_x64.h l.478
- sys_kcmp
-
sys_kcmp( pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2)
compare two processes to determine if they share a kernel resource ../include/syscalls_x64.h l.600
- sys_kexec_file_load
-
sys_kexec_file_load( int kernel_fd, int initrd_fd, unsigned long cmdline_len, const char cmdline_ptr, unsigned long flags)
*load a new kernel for later execution ../include/syscalls_x64.h l.616
- sys_kexec_load
-
sys_kexec_load( unsigned long entry, unsigned long nr_segments, struct kexec_segment segments, unsigned long flags)
*load a new kernel for later execution ../include/syscalls_x64.h l.468
- sys_keyctl
-
sys_keyctl( int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)
key management function wrappers ../include/syscalls_x64.h l.476
- sys_kill
-
sys_kill( pid_t pid, int sig)
send a signal to a process or a group of processes ../include/syscalls_x64.h l.130
- sys_lchown
-
sys_lchown( const char filename, uid_t user, gid_t group)
*change the owner and group of a symbolic link ../include/syscalls_x64.h l.194
- sys_lgetxattr
-
sys_lgetxattr( const char pathname, const char *name, void *value, size_t size)
*retrieve an extended attribute value ../include/syscalls_x64.h l.370
- sys_link
-
sys_link( const char oldname, const char *newname)
*link one file to another file relative to two directory ../include/syscalls_x64.h l.178
- sys_linkat
-
sys_linkat( int oldfd, const char oldname, int newfd, const char *newname, int flags)
*make a new name for a file ../include/syscalls_x64.h l.506
- sys_listen
-
sys_listen( int fd, int backlog)
listen for socket connections and limit the queue of incoming ../include/syscalls_x64.h l.105
- sys_listxattr
-
sys_listxattr( const char pathname, char *list, size_t size)
*list extended attribute names ../include/syscalls_x64.h l.374
- sys_llistxattr
-
sys_llistxattr( const char pathname, char *list, size_t size)
*list extended attribute names ../include/syscalls_x64.h l.376
- sys_lremovexattr
-
sys_lremovexattr( const char pathname, const char *name)
*remove an extended attribute ../include/syscalls_x64.h l.382
- sys_lseek
-
sys_lseek( unsigned int fd, off_t offset, unsigned int origin)
move the read/write file offset ../include/syscalls_x64.h l.21
- sys_lsetxattr
-
sys_lsetxattr( const char pathname, const char *name, const void *value, size_t size, int flags)
*set an extended attribute value ../include/syscalls_x64.h l.364
- sys_lstat
-
sys_lstat( const char filename, struct stat *statbuf)
*get file status ../include/syscalls_x64.h l.17
- sys_madvise
-
sys_madvise( unsigned long start, size_t len_in, int behavior)
give advice about use of memory ../include/syscalls_x64.h l.61
- sys_mbind
-
sys_mbind( unsigned long start, unsigned long len, unsigned long mode, unsigned long nmask, unsigned long maxnode, unsigned flags)
*set memory policy for a memory range ../include/syscalls_x64.h l.450
- sys_memfd_create
-
sys_memfd_create( const char uname_ptr, unsigned int flags)
*create an anonymous file ../include/syscalls_x64.h l.614
- sys_migrate_pages
-
sys_migrate_pages( pid_t pid, unsigned long maxnode, const unsigned long old_nodes, const unsigned long *new_nodes)
*move all pages in a process to another set of nodes ../include/syscalls_x64.h l.488
- sys_mincore
-
sys_mincore( unsigned long start, size_t len, unsigned char vec)
*determine whether pages are resident in memory ../include/syscalls_x64.h l.59
- sys_mkdir
-
sys_mkdir( const char pathname, int mode)
*make a directory relative to directory file descriptor ../include/syscalls_x64.h l.172
- sys_mkdirat
-
sys_mkdirat( int dfd, const char pathname, int mode)
*create a directory ../include/syscalls_x64.h l.492
- sys_mknod
-
sys_mknod( const char filename, umode_t mode, unsigned dev)
*make directory, special file, or regular file ../include/syscalls_x64.h l.272
- sys_mknodat
-
sys_mknodat( int dfd, const char filename, int mode, unsigned dev)
*create a special or ordinary file ../include/syscalls_x64.h l.494
- sys_mlock
-
sys_mlock( unsigned long start, size_t len)
lock or unlock a range of process address space ../include/syscalls_x64.h l.302
- sys_mlockall
-
sys_mlockall( int flags)
lock/unlock the address space of a process ../include/syscalls_x64.h l.306
- sys_mmap
-
sys_mmap( unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long off)
map pages of memory ../include/syscalls_x64.h l.23
- sys_modify_ldt
-
sys_modify_ldt( int func, void ptr, unsigned long bytecount)
*get or set a per-process LDT entry ../include/syscalls_x64.h l.312
- sys_mount
-
sys_mount( char dev_name, char *dir_name, char *type, unsigned long flags, void *data)
*mount filesystem ../include/syscalls_x64.h l.334
- sys_move_pages
-
sys_move_pages( pid_t pid, unsigned long nr_pages, const void pages[], const int *nodes, int *status, int flags)
*move individual pages of a process to another node ../include/syscalls_x64.h l.534
- sys_mprotect
-
sys_mprotect( unsigned long start, size_t len, unsigned long prot)
set protection of memory mapping ../include/syscalls_x64.h l.25
- sys_mq_getsetattr
-
sys_mq_getsetattr( mqd_t mqdes, const struct mq_attr u_mqstat, struct mq_attr *u_omqstat)
*get/set message queue attributes ../include/syscalls_x64.h l.466
- sys_mq_notify
-
sys_mq_notify( mqd_t mqdes, const struct sigevent u_notification)
*notify process that a message is available ../include/syscalls_x64.h l.464
- sys_mq_open
-
sys_mq_open( const char u_name, int oflag, mode_t mode, struct mq_attr *u_attr)
*open a message queue ../include/syscalls_x64.h l.456
- sys_mq_timedreceive
-
sys_mq_timedreceive( mqd_t mqdes, char u_msg_ptr, size_t msg_len, unsigned int *u_msg_prio, const struct timespec *u_abs_timeout)
*receive a message from a message queue ../include/syscalls_x64.h l.462
- sys_mq_timedsend
-
sys_mq_timedsend( mqd_t mqdes, const char u_msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec *u_abs_timeout)
*send a message to a message queue ../include/syscalls_x64.h l.460
- sys_mq_unlink
-
sys_mq_unlink( const char u_name)
*remove a message queue ../include/syscalls_x64.h l.458
- sys_mremap
-
sys_mremap( unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr)
remap a virtual memory address ../include/syscalls_x64.h l.55
- sys_msgctl
-
sys_msgctl( int msqid, int cmd, struct msqid_ds buf)
*XSI message control operations ../include/syscalls_x64.h l.148
- sys_msgget
-
sys_msgget( key_t key, int msgflg)
get the XSI message queue identifier ../include/syscalls_x64.h l.142
- sys_msgrcv
-
sys_msgrcv( int msqid, struct msgbuf msgp, size_t msgsz, long msgtyp, int msgflg)
*XSI message receive operation ../include/syscalls_x64.h l.146
- sys_msgsnd
-
sys_msgsnd( int msqid, struct msgbuf msgp, size_t msgsz, int msgflg)
*XSI message send operation ../include/syscalls_x64.h l.144
- sys_msync
-
sys_msync( unsigned long start, size_t len, int flags)
synchronize memory with physical storage ../include/syscalls_x64.h l.57
- sys_munlock
-
sys_munlock( unsigned long start, size_t len)
unlock a range of process address space ../include/syscalls_x64.h l.304
- sys_munlockall
-
sysSYSDEF_syscall(_munlockall,0)
unlock the address space of a process ../include/syscalls_x64.h l.308
- sys_munmap
-
sys_munmap( unsigned long addr, size_t len)
unmap pages of memory ../include/syscalls_x64.h l.27
- sys_name_to_handle_at
-
sys_name_to_handle_at( int dfd, const char name, struct file_handle *handle, int *mnt_id, int flag)
*obtain handle ../include/syscalls_x64.h l.582
- sys_nanosleep
-
sys_nanosleep( struct timespec rqtp, struct timespec *rmtp)
*high resolution sleep ../include/syscalls_x64.h l.75
- sys_newfstatat
-
sys_newfstatat( int dfd, const char filename, struct stat *statbuf, int flag)
*get file status ../include/syscalls_x64.h l.500
- sys_open
-
sys_open( const char filename, int flags, int mode)
*open file relative to directory file descriptor ../include/syscalls_x64.h l.9
- sys_open_by_handle_at
-
sys_open_by_handle_at( int dfd, const char name, struct file_handle *handle, int *mnt_id, int flags)
*obtain handle ../include/syscalls_x64.h l.584
- sys_openat
-
sys_openat( int dfd, const char filename, int flags, int mode)
*open file relative to directory file descriptor ../include/syscalls_x64.h l.490
- sys_pause
-
sysSYSDEF_syscall(_pause,0)
suspend the thread until a signal is received ../include/syscalls_x64.h l.73
- sys_perf_event_open
-
sys_perf_event_open( struct perf_event_attr attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags)
*set up performance monitoring ../include/syscalls_x64.h l.572
- sys_personality
-
sys_personality( unsigned int personality)
set the process execution domain ../include/syscalls_x64.h l.274
- sys_pipe
-
sys_pipe( int filedes)
*create an interprocess channel ../include/syscalls_x64.h l.49
- sys_pipe2
-
sys_pipe2( int filedes, int flags)
*create pipe ../include/syscalls_x64.h l.562
- sys_pivot_root
-
sys_pivot_root( const char new_root, const char *put_old)
*change the root mount ../include/syscalls_x64.h l.314
- sys_poll
-
sys_poll( struct poll_fd ufds, unsigned int nfds, long timeout_msecs)
*input/output multiplexing ../include/syscalls_x64.h l.19
- sys_ppoll
-
sys_ppoll( struct pollfd ufds, unsigned int nfds, struct timespec *tsp, const sigset_t *sigmask, size_t sigsetsize)
*wait for some event on a file descriptor ../include/syscalls_x64.h l.518
- sys_prctl
-
sys_prctl( int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)
operations on a process ../include/syscalls_x64.h l.318
- sys_pread64
-
sys_pread64( unsigned long fd, char buf, size_t count, loff_t pos)
*read from or write to a file descriptor at a given offset ../include/syscalls_x64.h l.39
- sys_preadv
-
sys_preadv( unsigned long fd, const struct iovec vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h)
*read or write data into multiple buffers ../include/syscalls_x64.h l.566
- sys_prlimit64
-
sys_prlimit64( pid_t pid, unsigned int resource, const struct rlimit64 new_rlim, struct rlimit64 *old_rlim)
*get/set resource limits ../include/syscalls_x64.h l.580
- sys_process_vm_readv
-
sys_process_vm_readv( pid_t pid, const struct iovec lvec, unsigned long liovcnt, const struct iovec *rvec, unsigned long riovcnt, unsigned long flags)
*transfer data between process address spaces ../include/syscalls_x64.h l.596
- sys_process_vm_writev
-
sys_process_vm_writev( pid_t pid, const struct iovec lvec, unsigned long liovcnt, const struct iovcc *rvec, unsigned long riovcnt, unsigned long flags)
*transfer data between process address spaces ../include/syscalls_x64.h l.598
- sys_pselect6
-
sys_pselect6( int n, fd_set inp, fd_set *outp, fd_set *exp, struct timespec *tsp, void *sig)
*select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \- ../include/syscalls_x64.h l.516
- sys_ptrace
-
sys_ptrace( long request, long pid, unsigned long addr, unsigned long data)
process trace ../include/syscalls_x64.h l.208
- sys_pwrite64
-
sys_pwrite64( unsigned int fd, const char buf, size_t count, loff_t pos)
*read from or write to a file descriptor at a given offset ../include/syscalls_x64.h l.41
- sys_pwritev
-
sys_pwritev( unsigned long fd, const struct iovec vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h)
*read or write data into multiple buffers ../include/syscalls_x64.h l.568
- sys_quotactl
-
sys_quotactl( unsigned int cmd, const char special, qid_t id, void *addr)
*manipulate disk quotas ../include/syscalls_x64.h l.356
- sys_read
-
sys_read( unsigned int fd, char buf, size_t count)
*read from a file ../include/syscalls_x64.h l.5
- sys_readahead
-
sys_readahead( int fd, loff_t offset, size_t count)
initiate file readahead into page cache ../include/syscalls_x64.h l.360
- sys_readlink
-
sys_readlink( const char path, char *buf, int bufsiz)
*read the contents of a symbolic link ../include/syscalls_x64.h l.184
- sys_readlinkat
-
sys_readlinkat( int dfd, const char pathname, char *buf, int bufsiz)
*read value of a symbolic link ../include/syscalls_x64.h l.510
- sys_readv
-
sys_readv( unsigned long fd, const struct iovec vec, unsigned long vlen)
*read a vector ../include/syscalls_x64.h l.43
- sys_reboot
-
sys_reboot( int magic1, int magic2, unsigned int cmd, void arg)
*reboot or enable/disable Ctrl-Alt-Del ../include/syscalls_x64.h l.342
- sys_recvfrom
-
sys_recvfrom( int fd, void ubuf, size_t size, unsigned flags, struct sockaddr *addr, int *addr_len)
*receive a message from a socket ../include/syscalls_x64.h l.95
- sys_recvmmsg
-
sys_recvmmsg( int fd, struct msghdr mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout)
*receive multiple messages on a socket ../include/syscalls_x64.h l.574
- sys_recvmsg
-
sys_recvmsg( int fd, struct msghdr msg, unsigned int flags)
*receive a message from a socket ../include/syscalls_x64.h l.99
- sys_remap_file_pages
-
sys_remap_file_pages( unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags)
create a nonlinear file mapping ../include/syscalls_x64.h l.410
- sys_removexattr
-
sys_removexattr( const char pathname, const char *name)
*remove an extended attribute ../include/syscalls_x64.h l.380
- sys_rename
-
sys_rename( const char oldname, const char *newname)
*rename file relative to directory file descriptor ../include/syscalls_x64.h l.170
- sys_renameat
-
sys_renameat( int oldfd, const char oldname, int newfd, const char *newname)
*change the name or location of a file ../include/syscalls_x64.h l.504
- sys_renameat2
-
sys_renameat2( int olddfd, const char oldname, int newdfd, const char *newname, unsigned int flags)
*change the name or location of a file ../include/syscalls_x64.h l.608
- sys_request_key
-
sys_request_key( const char _type, const char *_description, const char *_callout_info, key_serial_t destringid)
*request a key from the kernel’s key management facility ../include/syscalls_x64.h l.474
- sys_restart_syscall
-
sysSYSDEF_syscall(_restart_syscall,0)
restart a system call after interruption by a stop signal ../include/syscalls_x64.h l.416
- sys_rmdir
-
sys_rmdir( const char pathname)
*remove a directory ../include/syscalls_x64.h l.174
- sys_rt_sigaction
-
sys_rt_sigaction( int sig, const struct sigaction act, struct sigaction *oact, size_t sigsetsize)
*examine and change a signal action ../include/syscalls_x64.h l.31
- sys_rt_sigpending
-
sys_rt_sigpending( sigset_t set, size_t sigsetsize)
*examine pending signals ../include/syscalls_x64.h l.260
- sys_rt_sigprocmask
-
sys_rt_sigprocmask( int how, sigset_t nset, sigset_t *oset, size_t sigsetsize)
*examine and change blocked signals ../include/syscalls_x64.h l.33
- sys_rt_sigqueueinfo
-
sys_rt_sigqueueinfo( pid_t pid, int sig, siginfo_t uinfo)
*queue a signal and data ../include/syscalls_x64.h l.264
- sys_rt_sigreturn
-
sys_rt_sigreturn( unsigned long __unused)
return from signal handler and cleanup stack frame ../include/syscalls_x64.h l.35
- sys_rt_sigsuspend
-
sys_rt_sigsuspend( sigset_t unewset, size_t sigsetsize)
*wait for a signal ../include/syscalls_x64.h l.266
- sys_rt_sigtimedwait
-
sys_rt_sigtimedwait( const sigset_t uthese, siginfo_t *uinfo, const struct timespec *uts, size_t sigsetsize)
*synchronously wait ../include/syscalls_x64.h l.262
- sys_rt_tgsigqueueinfo
-
sys_rt_tgsigqueueinfo( pid_t tgid, pid_t pid, int sig, siginfo_t uinfo)
*queue a signal and data ../include/syscalls_x64.h l.570
- sys_sched_get_priority_max
-
sys_sched_get_priority_max( int policy)
get priority limits ../include/syscalls_x64.h l.296
- sys_sched_get_priority_min
-
sys_sched_get_priority_min( int policy)
get static priority range ../include/syscalls_x64.h l.298
- sys_sched_getaffinity
-
sys_sched_getaffinity( pid_t pid, unsigned int len, unsigned long user_mask_ptr)
*set and get a thread’s CPU affinity mask ../include/syscalls_x64.h l.394
- sys_sched_getattr
-
sys_sched_getattr( pid_t pid, struct sched_attr attr, unsigned int size, unsigned int flags)
*sched_setattr, sched_getattr \- ../include/syscalls_x64.h l.606
- sys_sched_getparam
-
sys_sched_getparam( pid_t pid, struct sched_param param)
*get scheduling parameters ../include/syscalls_x64.h l.290
- sys_sched_getscheduler
-
sys_sched_getscheduler( pid_t pid)
get scheduling policy ../include/syscalls_x64.h l.294
- sys_sched_rr_get_interval
-
sys_sched_rr_get_interval( pid_t pid, struct timespec interval)
*get execution time limits ../include/syscalls_x64.h l.300
- sys_sched_setaffinity
-
sys_sched_setaffinity( pid_t pid, unsigned int len, unsigned long user_mask_ptr)
*set and get a thread’s CPU affinity mask ../include/syscalls_x64.h l.392
- sys_sched_setattr
-
sys_sched_setattr( pid_t pid, struct sched_attr attr, unsigned int flags)
*sched_setattr, sched_getattr \- ../include/syscalls_x64.h l.604
- sys_sched_setparam
-
sys_sched_setparam( pid_t pid, struct sched_param param)
*set scheduling parameters ../include/syscalls_x64.h l.288
- sys_sched_setscheduler
-
sys_sched_setscheduler( pid_t pid, int policy, struct sched_param param)
*set scheduling policy and parameters ../include/syscalls_x64.h l.292
- sys_sched_yield
-
sysSYSDEF_syscall(_sched_yield,0)
yield the processor ../include/syscalls_x64.h l.53
- sys_seccomp
-
sys_seccomp( unsigned int op, unsigned int flags, const char uargs)
*operate on Secure Computing state of the process ../include/syscalls_x64.h l.610
- sys_select
-
sys_select( int n, fd_set inp, fd_set *outp, fd_set *exp, struct timeval *tvp)
*synchronous I/O multiplexing ../include/syscalls_x64.h l.51
- sys_semctl
-
sys_semctl( int semid, int semnum, int cmd, semun_u arg)
XSI semaphore control operations ../include/syscalls_x64.h l.138
- sys_semget
-
sys_semget( key_t key, int nsems, int semflg)
get set of XSI semaphores ../include/syscalls_x64.h l.134
- sys_semop
-
sys_semop( int semid, struct sembuf tsops, unsigned nsops)
*XSI semaphore operations ../include/syscalls_x64.h l.136
- sys_semtimedop
-
sys_semtimedop( int semid, struct sembuf tsops, unsigned nsops, const struct timespec *timeout)
*System V semaphore operations ../include/syscalls_x64.h l.418
- sys_sendfile
-
sys_sendfile( int out_fd, int in_fd, off_t offset, size_t count)
*transfer data between file descriptors ../include/syscalls_x64.h l.85
- sys_sendmmsg
-
sys_sendmmsg( int fd, struct mmsghdr mmsg, unsigned int vlen, unsigned int flags)
*send multiple messages on a socket ../include/syscalls_x64.h l.590
- sys_sendmsg
-
sys_sendmsg( int fd, struct msghdr msg, unsigned flags)
*send a message on a socket using a message structure ../include/syscalls_x64.h l.97
- sys_sendto
-
sys_sendto( int fd, void buff, size_t len, unsigned flags, struct sockaddr *addr, int addr_len)
*send a message on a socket ../include/syscalls_x64.h l.93
- sys_set_mempolicy
-
sys_set_mempolicy( int mode, unsigned long nmask, unsigned long maxnode)
*set default NUMA memory policy for a thread and its children ../include/syscalls_x64.h l.452
- sys_set_robust_list
-
sys_set_robust_list( struct robust_list_head head, size_t len)
*get/set list of robust futexes ../include/syscalls_x64.h l.522
- sys_set_tid_address
-
sys_set_tid_address( int tidptr)
*set pointer to thread ID ../include/syscalls_x64.h l.414
- sys_setdomainname
-
sys_setdomainname( char name, int len)
*get/set NIS domain name ../include/syscalls_x64.h l.346
- sys_setfsgid
-
sys_setfsgid( gid_t gid)
set group identity used for filesystem checks ../include/syscalls_x64.h l.252
- sys_setfsuid
-
sys_setfsuid( uid_t uid)
set user identity used for filesystem checks ../include/syscalls_x64.h l.250
- sys_setgid
-
sys_setgid( gid_t gid)
set-group-ID ../include/syscalls_x64.h l.218
- sys_setgroups
-
sys_setgroups( int gidsetsize, gid_t grouplist)
*get/set list of supplementary group IDs ../include/syscalls_x64.h l.238
- sys_sethostname
-
sys_sethostname( char name, int len)
*get/set hostname ../include/syscalls_x64.h l.344
- sys_setitimer
-
sys_setitimer( int which, struct itimerval value, struct itimerval *ovalue)
*set the value of an interval timer ../include/syscalls_x64.h l.81
- sys_setns
-
sys_setns( int fd, int nstype)
reassociate thread with a namespace ../include/syscalls_x64.h l.592
- sys_setpgid
-
sys_setpgid( pid_t pid, pid_t pgid)
set process group ID for job control ../include/syscalls_x64.h l.224
- sys_setpriority
-
sys_setpriority( int which, int who, int niceval)
set the nice value ../include/syscalls_x64.h l.286
- sys_setregid
-
sys_setregid( gid_t rgid, gid_t egid)
set real and effective group IDs ../include/syscalls_x64.h l.234
- sys_setresgid
-
sys_setresgid( gid_t rgid, gid_t egid, gid_t sgid)
set real, effective and saved user or group ID ../include/syscalls_x64.h l.244
- sys_setresuid
-
sys_setresuid( uid_t ruid, uid_t *euid, uid_t *suid)
*set real, effective and saved user or group ID ../include/syscalls_x64.h l.240
- sys_setreuid
-
sys_setreuid( uid_t ruid, uid_t euid)
set real and effective user IDs ../include/syscalls_x64.h l.232
- sys_setrlimit
-
sys_setrlimit( unsigned int resource, struct rlimit rlim)
*control maximum resource consumption ../include/syscalls_x64.h l.324
- sys_setsid
-
sysSYSDEF_syscall(_setsid,0)
create session and set process group ID ../include/syscalls_x64.h l.230
- sys_setsockopt
-
sys_setsockopt( int fd, int level, int optname, char optval, int optlen)
*set the socket options ../include/syscalls_x64.h l.113
- sys_settimeofday
-
sys_settimeofday( struct timeval tv, struct timezone *tz)
*get / set time ../include/syscalls_x64.h l.332
- sys_setuid
-
sys_setuid( uid_t uid)
set user ID ../include/syscalls_x64.h l.216
- sys_setxattr
-
sys_setxattr( const char pathname, const char *name, const void *value, size_t size, int flags)
*set an extended attribute value ../include/syscalls_x64.h l.362
- sys_shmat
-
sys_shmat( int shmid, char shmaddr, int shmflg)
*XSI shared memory attach operation ../include/syscalls_x64.h l.65
- sys_shmctl
-
sys_shmctl( int shmid, int cmd, struct shmid_ds buf)
*XSI shared memory control operations ../include/syscalls_x64.h l.67
- sys_shmdt
-
sys_shmdt( char shmaddr)
*XSI shared memory detach operation ../include/syscalls_x64.h l.140
- sys_shmget
-
sys_shmget( key_t key, size_t size, int shmflg)
get an XSI shared memory segment ../include/syscalls_x64.h l.63
- sys_shutdown
-
sys_shutdown( int fd, int how)
shut down socket send and receive operations ../include/syscalls_x64.h l.101
- sys_sigaltstack
-
sys_sigaltstack( const stack_t uss, stack_t *uoss)
*set and get signal alternate stack context ../include/syscalls_x64.h l.268
- sys_signalfd
-
sys_signalfd( int ufd, sigset_t user_mask, size_t sizemask)
*create a file descriptor for accepting signals ../include/syscalls_x64.h l.540
- sys_signalfd4
-
sys_signalfd4( int ufd, sigset_t user_mask, size_t sizemask, int flags)
*create a file descriptor for accepting signals ../include/syscalls_x64.h l.554
- sys_socket
-
sys_socket( int family, int type, int protocol)
create an endpoint for communication ../include/syscalls_x64.h l.87
- sys_socketpair
-
sys_socketpair( int family, int type, int protocol, int usockvec)
*create a pair of connected sockets ../include/syscalls_x64.h l.111
- sys_splice
-
sys_splice( int fd_in, loff_t off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags)
*splice data to/from a pipe ../include/syscalls_x64.h l.526
- sys_stat
-
sys_stat( const char filename, struct stat *statbuf)
*get file status ../include/syscalls_x64.h l.13
- sys_statfs
-
sys_statfs( const char pathname, struct statfs *buf)
*get filesystem statistics ../include/syscalls_x64.h l.278
- sys_swapoff
-
sys_swapoff( const char specialfile)
*start/stop swapping to file/device ../include/syscalls_x64.h l.340
- sys_swapon
-
sys_swapon( const char specialfile, int swap_flags)
*start/stop swapping to file/device ../include/syscalls_x64.h l.338
- sys_symlink
-
sys_symlink( const char oldname, const char *newname)
*make a symbolic link relative to directory file descriptor ../include/syscalls_x64.h l.182
- sys_symlinkat
-
sys_symlinkat( const char oldname, int newfd, const char *newname)
*make a new name for a file ../include/syscalls_x64.h l.508
- sys_sync
-
sysSYSDEF_syscall(_sync,0)
schedule file system updates ../include/syscalls_x64.h l.328
- sys_sync_file_range
-
sys_sync_file_range( long fd, loff_t offset, loff_t bytes, long flags)
sync a file segment with disk ../include/syscalls_x64.h l.530
- sys_syncfs
-
sys_syncfs( int fd)
commit filesystem caches to disk ../include/syscalls_x64.h l.588
- sys_sysfs
-
sys_sysfs( int option, unsigned long arg1, unsigned long arg2)
get filesystem type information ../include/syscalls_x64.h l.282
- sys_sysinfo
-
sys_sysinfo( struct sysinfo info)
*return system information ../include/syscalls_x64.h l.204
- sys_syslog
-
sys_syslog( int type, char buf, int len)
*log a message ../include/syscalls_x64.h l.212
- sys_tee
-
sys_tee( int fdin, int fdout, size_t len, unsigned int flags)
duplicating pipe content ../include/syscalls_x64.h l.528
- sys_tgkill
-
sys_tgkill( pid_t tgid, pid_t pid, int sig)
send a signal to a thread ../include/syscalls_x64.h l.446
- sys_time
-
sys_time( time_t tloc)
*get time ../include/syscalls_x64.h l.388
- sys_timer_create
-
sys_timer_create( const clockid_t which_clock, struct sigevent timer_event_spec, timer_t *created_timer_id)
*create a per-process timer ../include/syscalls_x64.h l.422
- sys_timer_delete
-
sys_timer_delete( timer_t timer_id)
delete a per-process timer ../include/syscalls_x64.h l.430
- sys_timer_getoverrun
-
sys_timer_getoverrun( timer_t timer_id)
../include/syscalls_x64.h l.428
- sys_timer_gettime
-
sys_timer_gettime( timer_t timer_id, struct itimerspec setting)
*arm/disarm and fetch ../include/syscalls_x64.h l.426
- sys_timer_settime
-
sys_timer_settime( timer_t timer_id, int flags, const struct itimerspec new_setting, struct itimerspec *old_setting)
*arm/disarm and fetch ../include/syscalls_x64.h l.424
- sys_timerfd_create
-
sys_timerfd_create( int clockid, int flags)
timerfd_create, timerfd_settime, timerfd_gettime \- ../include/syscalls_x64.h l.542
- sys_timerfd_gettime
-
sys_timerfd_gettime( int ufd, struct itimerspec otmr)
*timerfd_create, timerfd_settime, timerfd_gettime \- ../include/syscalls_x64.h l.550
- sys_timerfd_settime
-
sys_timerfd_settime( int ufd, int flags, const struct itimerspec utmr, struct itimerspec *otmr)
*timerfd_create, timerfd_settime, timerfd_gettime \- ../include/syscalls_x64.h l.548
- sys_times
-
sys_times( struct sysinfo info)
*get process and waited-for child process times ../include/syscalls_x64.h l.206
- sys_tkill
-
sys_tkill( pid_t pid, int sig)
send a signal to a thread ../include/syscalls_x64.h l.386
- sys_truncate
-
sys_truncate( const char path, long length)
*truncate a file to a specified length ../include/syscalls_x64.h l.158
- sys_umask
-
sys_umask( int mask)
set and get the file mode creation mask ../include/syscalls_x64.h l.196
- sys_umount2
-
sys_umount2( const char target, int flags)
*unmount filesystem ../include/syscalls_x64.h l.336
- sys_uname
-
sys_uname( struct old_utsname name)
*get the name of the current system ../include/syscalls_x64.h l.132
- sys_unlink
-
sys_unlink( const char pathname)
*remove a directory entry relative to directory file descriptor ../include/syscalls_x64.h l.180
- sys_unlinkat
-
sys_unlinkat( int dfd, const char pathname, int flag)
*delete a name and possibly the file it refers to ../include/syscalls_x64.h l.502
- sys_ustat
-
sys_ustat( unsigned dev, struct ustat ubuf)
*get filesystem statistics ../include/syscalls_x64.h l.276
- sys_utime
-
sys_utime( char filename, struct utimbuf *times)
*set file access and modification times ../include/syscalls_x64.h l.270
- sys_utimensat
-
sys_utimensat( int dfd, const char filename, struct timespec *utimes, int flags)
*set file access and modification times relative to directory ../include/syscalls_x64.h l.536
- sys_utimes
-
sys_utimes( char filename, struct timeval *utimes)
*change file last access and modification times ../include/syscalls_x64.h l.448
- sys_vfork
-
sysSYSDEF_syscall(_vfork,0)
create a child process and block parent ../include/syscalls_x64.h l.121
- sys_vhangup
-
sysSYSDEF_syscall(_vhangup,0)
virtually hangup the current terminal ../include/syscalls_x64.h l.310
- sys_vmsplice
-
sys_vmsplice( int fd, const struct iovec iov, unsigned long nr_segs, unsigned int flags)
*splice user pages to/from a pipe ../include/syscalls_x64.h l.532
- sys_wait4
-
sys_wait4( pid_t upid, int stat_addr, int options, struct rusage *ru)
*wait for process to change state, BSD style ../include/syscalls_x64.h l.128
- sys_waitid
-
sys_waitid( int which, pid_t upid, struct siginfo infop, int options, struct rusage *ru)
*wait for a child process to change state ../include/syscalls_x64.h l.470
- sys_write
-
sys_write( unsigned int fd, const char buf, size_t count)
*write on a file ../include/syscalls_x64.h l.7
- sys_writev
-
sys_writev( unsigned long fd, const struct iovec vec, unsigned long vlen)
*write a vector ../include/syscalls_x64.h l.45