| #include <unistd.h> | 
 | #include <sys/types.h> | 
 | #include <errno.h> | 
 | #include <assert.h> | 
 | #include <ros/syscall.h> | 
 |  | 
 | /* potentially a 32 bit seek (off_t is a long) */ | 
 | off_t __libc_lseek (int fd, off_t offset, int whence) | 
 | { | 
 | 	loff_t retoff = 0; | 
 | 	off_t hi = 0; | 
 | 	off_t lo = 0; | 
 | 	off_t ret; | 
 |  | 
 | 	if (fd < 0) { | 
 | 		__set_errno (EBADF); | 
 | 		return -1; | 
 | 	} | 
 | 	switch (whence) { | 
 | 		case SEEK_SET: | 
 | 		case SEEK_CUR: | 
 | 		case SEEK_END: | 
 | 			break; | 
 | 		default: | 
 | 			__set_errno (EINVAL); | 
 | 			return -1; | 
 | 	} | 
 | 	/* get the high and low part, regardless of whether offset was already | 
 | 	 * 64 bits or not (casting to avoid warnings) */ | 
 | 	hi = (loff_t)offset >> 32; | 
 | 	lo = offset & 0xffffffff; | 
 | 	ret = ros_syscall(SYS_llseek, fd, hi, lo, &retoff, whence, 0); | 
 | 	if (ret) { | 
 | 		assert(ret == -1);	/* catch odd bugs */ | 
 | 		return ret; | 
 | 	} | 
 | 	/* Get the lower 32 or 64 bits, depending on the length of long */ | 
 | 	ret = retoff & (unsigned long)(-1); | 
 | 	return ret; | 
 | } | 
 | weak_alias (__libc_lseek, __lseek) | 
 | libc_hidden_def (__lseek) | 
 | weak_alias (__libc_lseek, lseek) |