*** traceargs.c.ORIGINAL Mon Jun 12 01:24:29 2000 --- traceargs.c Thu May 12 17:37:20 2005 *************** print_int(struct trace_info *t, char *bu *** 41,46 **** --- 41,55 ---- } static int + print_long_long(struct trace_info *t, char *buf, int *args, int arg) + { + char *p = &buf[strlen(buf)]; + long long l = args[arg] + args[arg + 1] * 0x100000000LL; + sprintf(p, "%lld", l); + return 1; + } + + static int print_hex(struct trace_info *t, char *buf, int *args, int arg) { char *p = &buf[strlen(buf)]; *************** print_mmap(struct trace_info *t, char *b *** 467,472 **** --- 476,482 ---- #define print_tz print_ptr #define print_statfs print_ptr #define print_stat print_ptr + #define print_stat64 print_ptr #define print_prot print_hex #define print_sched_param print_ptr #define print_ts print_ptr *************** print_mmap(struct trace_info *t, char *b *** 474,479 **** --- 484,490 ---- #define print_argv print_ptr #define print_old_stat print_ptr #define print_off print_int + #define print_off64 print_long_long #define print_amode print_oct #define print_si print_int #define print_pipefds print_ptr *** signal.c.ORIGINAL Mon May 16 19:07:13 2005 --- signal.c Thu May 12 20:15:41 2005 *************** int lx_sigtimedwait() { return enosys("s *** 642,662 **** ** to the regular versions of these calls. ** So to avoid printing gratuitous warning messages, we set errno to ENOSYS ** ourselves (warninglessly) instead of going through enosys(). */ ! /* ALAS, this is not so, and things like system() seem to require these calls. ! Just map them to the non-rt versions for now. */ ! int lx_rt_sigpending(lx_sigset_t *lx_mask) { return lx_sigpending(lx_mask); } ! int lx_rt_sigtimedwait() { return enosys("rt_sigtimedwait"); } ! int lx_rt_sigsuspend(int restart, unsigned long lx_oldmask, ! unsigned long lx_set) ! { return lx_sigsuspend(restart, lx_oldmask, lx_set); } ! int lx_rt_sigprocmask(int lx_cmd, lx_sigset_t *lx_new_mask, ! lx_sigset_t *lx_old_mask) ! { return lx_sigprocmask(lx_cmd, lx_new_mask, lx_old_mask); } ! int lx_rt_sigqueueinfo() { return enosys("rt_sigqueueinfo"); } ! int lx_rt_sigaction(int lx_sig, struct lx_sigaction *lx_new_act, ! struct lx_sigaction *lx_old_act) ! { return lx_sigaction(lx_sig, lx_new_act, lx_old_act); } ! int lx_rt_sigreturn() { return enosys("rt_sigreturn"); } #include --- 642,654 ---- ** to the regular versions of these calls. ** So to avoid printing gratuitous warning messages, we set errno to ENOSYS ** ourselves (warninglessly) instead of going through enosys(). */ ! int lx_rt_sigpending() { errno=ENOSYS; return -1; } ! int lx_rt_sigtimedwait() { errno=ENOSYS; return -1; } ! int lx_rt_sigsuspend() { errno=ENOSYS; return -1; } ! int lx_rt_sigprocmask() { errno=ENOSYS; return -1; } ! int lx_rt_sigqueueinfo() { errno=ENOSYS; return -1; } ! int lx_rt_sigaction() { errno=ENOSYS; return -1; } ! int lx_rt_sigreturn() { errno=ENOSYS; return -1; } #include *** include/linux/resource.h.ORIGINAL Tue Apr 20 22:47:58 1999 --- include/linux/resource.h Thu May 12 17:57:22 2005 *************** struct lx_rlimit { *** 53,59 **** #define LX_RLIMIT_RSS 5 #define LX_RLIMIT_NPROC 6 #define LX_RLIMIT_NOFILE 7 ! #define LX_RLIM_NLIMITS 8 #endif --- 53,61 ---- #define LX_RLIMIT_RSS 5 #define LX_RLIMIT_NPROC 6 #define LX_RLIMIT_NOFILE 7 + #define LX_RLIMIT_MEMLOCK 8 + #define LX_RLIMIT_AS 9 ! #define LX_RLIM_NLIMITS 10 #endif *** process.c.ORIGINAL Mon May 16 19:07:13 2005 --- process.c Thu May 12 17:55:52 2005 *************** lx_getrlimit(int resource, struct rlimit *** 347,352 **** --- 347,353 ---- case LX_RLIMIT_STACK: rsrc = RLIMIT_STACK; break; case LX_RLIMIT_CORE: rsrc = RLIMIT_CORE; break; case LX_RLIMIT_NOFILE: rsrc = RLIMIT_NOFILE; break; + case LX_RLIMIT_AS: rsrc = RLIMIT_AS; break; /* Cases that don't. :-( */ case LX_RLIMIT_RSS: *** /dev/null Mon May 16 19:04:05 2005 --- include/linux/file.h Thu May 12 18:30:46 2005 *************** *** 0 **** --- 1,13 ---- + #if !defined(LX_FILE_H) + #define LX_FILE_H + + /* + * Linux flags to flock() + */ + #define LX_LOCK_SH 1 + #define LX_LOCK_EX 2 + #define LX_LOCK_UN 8 + + #define LX_LOCK_NB 4 + + #endif *** fileio.c.ORIGINAL Mon May 16 19:07:13 2005 --- fileio.c Mon May 16 17:42:48 2005 *************** *** 30,35 **** --- 30,36 ---- #include "lxrun.h" #include "linux/fcntl.h" + #include "linux/file.h" #include "devmap.h" #include "trace.h" #include "util.h" *************** static int os2lx_oflags(int os_flags); *** 67,73 **** * open * fcntl * chmod ! * flock (NOT IMPLEMENTED) * __llseek * readdir * fdatasync (PARTLY IMPLEMENTED) --- 68,74 ---- * open * fcntl * chmod ! * flock * __llseek * readdir * fdatasync (PARTLY IMPLEMENTED) *************** lx_chmod(const char *path, unsigned int *** 754,760 **** } ! int lx_flock() { return enosys("flock"); } int lx__llseek(int fd, long off_hi, long off_lo, long *res, int whence) --- 755,792 ---- } ! int ! lx_flock(int fd, int lx_cmd) ! { ! int cmd; ! struct flock f; ! ! cmd = (lx_cmd & LX_LOCK_NB) ? F_SETLK : F_SETLKW; ! memset (&f, 0, sizeof (f)); ! ! switch (lx_cmd & ~LX_LOCK_NB) ! { ! case LX_LOCK_SH: ! f.l_type = F_RDLCK; ! return fcntl(fd, cmd, &f); ! ! case LX_LOCK_EX: ! f.l_type = F_WRLCK; ! return fcntl(fd, cmd, &f); ! ! case LX_LOCK_UN: ! f.l_type = F_UNLCK; ! return fcntl(fd, cmd, &f); ! ! default: ! { ! char str[32]; ! sprintf(str, "Unknown flock(0x%x) fd=%d", lx_cmd, fd); ! return enoany(ENOSYS, str); ! } ! } ! } ! int lx__llseek(int fd, long off_hi, long off_lo, long *res, int whence) *** include/linux/socket.h.ORIGINAL Tue Apr 20 22:49:57 1999 --- include/linux/socket.h Thu May 12 19:00:22 2005 *************** *** 51,56 **** --- 51,57 ---- #define LX_SIOCGIFADDR 0x8915 /* Get interface address +*/ #define LX_SIOCGIFBRDADDR 0x8919 /* Get broadcast address */ #define LX_SIOCGIFNETMASK 0x891b /* Get network PA mask */ + #define LX_SIOCGIFHWADDR 0x8927 /* Get hardware address */ /* For setsockoptions(2) */ #define LX_SOL_SOCKET 1 *** ioctl.c.ORIGINAL Sat Feb 26 19:41:48 2000 --- ioctl.c Thu May 12 19:30:30 2005 *************** lx_ioctl_default(int fd, int lx_cmd, uns *** 440,445 **** --- 440,471 ---- case LX_SIOCGIFBRDADDR: return ioctl(fd, SIOCGIFBRDADDR, lx_arg); + case LX_SIOCGIFHWADDR: + { + FILE *fp; + char *p = ((struct ifreq *)lx_arg)->ifr_addr.sa_data; + unsigned int hwaddr[6]; + + if (! (fp = popen ("/usr/sbin/arp `/bin/hostname`", + "r")) + || fscanf (fp, "%*s %*s at %x:%x:%x:%x:%x:%x", + &hwaddr[0], &hwaddr[1], &hwaddr[2], + &hwaddr[3], &hwaddr[4], &hwaddr[5]) != 6) + { + if (fp) + pclose (fp); + return -1; + } + pclose (fp); + *p++ = (char)hwaddr[0]; + *p++ = (char)hwaddr[1]; + *p++ = (char)hwaddr[2]; + *p++ = (char)hwaddr[3]; + *p++ = (char)hwaddr[4]; + *p++ = (char)hwaddr[5]; + return 0; + } + case LX_TIOCLINUX: return tioclinux(fd, (void *)lx_arg);