diff options
author | Andreas Baumann <abaumann@yahoo.com> | 2009-03-24 12:38:26 +0100 |
---|---|---|
committer | Andreas Baumann <abaumann@yahoo.com> | 2009-03-24 12:38:26 +0100 |
commit | b305975aaf8052277406ad11291bec3cdce93dff (patch) | |
tree | 5332f9a600c94c1eea1ba4453a26e4ba4ed58766 /src/port | |
parent | bea663376a1113c3cf0519f7959cbdd693c8fbc0 (diff) | |
download | wolfbones-b305975aaf8052277406ad11291bec3cdce93dff.tar.gz wolfbones-b305975aaf8052277406ad11291bec3cdce93dff.tar.bz2 |
started to add stdlib stub for itoa
Diffstat (limited to 'src/port')
-rw-r--r-- | src/port/stdlib.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/port/stdlib.c b/src/port/stdlib.c new file mode 100644 index 0000000..5cfaa8a --- /dev/null +++ b/src/port/stdlib.c @@ -0,0 +1,76 @@ +/* + Copyright (C) 2008 Andreas Baumann <abaumann@yahoo.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "port/stdlib.h" + +#if !defined HAVE_ITOA || defined TEST_HAVE_ITOA + +#include "port/string.h" /* for memset */ +#include "port/unistd.h" /* for getpid */ + +#include <errno.h> /* for errno */ + +char *wolf_port_itoa( int value, char *string, int radix ); + +int wolf_port_lockf( int fd, int cmd, off_t len ) { + struct flock fl; + + memset( (char *)&fl, 0, sizeof( fl ) ); + /* lockf is always relative to the current file position. */ + fl.l_whence = SEEK_CUR; + fl.l_start = 0; + fl.l_len = len; + + errno = 0; + + switch( cmd ) { + case F_TEST: + fl.l_type = F_RDLCK; + if( fcntl( fd, F_GETLK, &fl ) < 0 ) { + return -1; + } + if( fl.l_type == F_UNLCK || + fl.l_pid == getpid( ) ) { + return 0; + } + errno = EACCES; + return -1; + + case F_ULOCK: + fl.l_type = F_UNLCK; + cmd = F_SETLK; + break; + + case F_LOCK: + fl.l_type = F_WRLCK; + cmd = F_SETLKW; + break; + + case F_TLOCK: + fl.l_type = F_WRLCK; + cmd = F_SETLK; + break; + + default: + errno = EINVAL; + return -1; + } + + return fcntl( fd, cmd, &fl ); +} + +#endif /* !defined HAVE_LOCKF || defined TEST_HAVE_LOCKF */ |