--- libcommon/_utmpx.h.orig 2006-01-22 20:06:14.000000000 +0100 +++ libcommon/_utmpx.h 2010-01-21 21:50:34.000000000 +0100 @@ -26,7 +26,12 @@ defined (__DragonFly__) || defined (__APPLE__) #include #include -#include + +#include +#if defined(__FreeBSD__) && __FreeBSD_version >= 900007 +# include "/usr/include/utmpx.h" +#else +# include #ifndef __dietlibc__ struct utmpx { @@ -83,6 +88,7 @@ extern struct utmpx *getutxline(const struct utmpx *); extern struct utmpx *pututxline(const struct utmpx *); extern void setutxent(void); +#endif /*!__FreeBSD__ && __FreeBSD_version >= 900007*/ extern int utmpxname(const char *); extern void updwtmpx(const char *, const struct utmpx *); #endif /* __FreeBSD__ || __dietlibc__ || __NetBSD__ || __UCLIBC__ || --- libcommon/utmpx.c.orig 2006-01-22 20:06:14.000000000 +0100 +++ libcommon/utmpx.c 2010-01-21 21:58:07.000000000 +0100 @@ -28,14 +28,16 @@ defined (__DragonFly__) || defined (__APPLE__) #include #include -#include #include #include "utmpx.h" static FILE *utfp; static struct utmpx utx; -static const char *utmpfile = _PATH_UTMP; +static const char *utmpfile = NULL; + +#include +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 900007) static FILE * init(void) @@ -198,13 +200,6 @@ fclose(fp); } -int -utmpxname(const char *name) -{ - utmpfile = strdup(name); - return 0; -} - extern struct utmpx * pututxline(const struct utmpx *up) { @@ -235,6 +230,15 @@ return rp; } +#endif /*!__FreeBSD__ && __FreeBSD_version >= 900007*/ + +int +utmpxname(const char *name) +{ + utmpfile = strdup(name); + return 0; +} + extern void updwtmpx(const char *name, const struct utmpx *up) { --- who/who.c.orig 2010-01-21 22:02:24.000000000 +0100 +++ who/who.c 2010-01-21 22:07:45.000000000 +0100 @@ -129,8 +129,11 @@ if (u->ut_type == LOGIN_PROCESS) cp = "LOGIN"; - else if (u->ut_type == BOOT_TIME || u->ut_type == RUN_LVL || - u->ut_user[0] == '\0') +#if defined(__FreeBSD__) && __FreeBSD_version >= 900007 + else if (u->ut_type == BOOT_TIME || u->ut_user[0] == '\0') +#else + else if (u->ut_type == BOOT_TIME || u->ut_type == RUN_LVL || u->ut_user[0] == '\0') +#endif cp = " ."; else cp = u->ut_user; @@ -147,11 +150,16 @@ } else c = ' '; printf("%c ", c); + +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 900007) if (u->ut_type == RUN_LVL) { snprintf(buf, sizeof buf, "run-level %c", (int)(u->ut_pid & 0377)); cp = buf; - } else if (u->ut_type == BOOT_TIME) + } else + +#endif + if (u->ut_type == BOOT_TIME) cp = "system boot"; else if (u->ut_line[0] == '\0') cp = " ."; @@ -189,7 +197,11 @@ cp = " . "; printf(" %s", cp); } - if (u->ut_type != RUN_LVL && u->ut_type != BOOT_TIME + if ( +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 900007) + u->ut_type != RUN_LVL && +#endif + u->ut_type != BOOT_TIME #ifdef ACCOUNTING && u->ut_type != ACCOUNTING #endif /* ACCOUNTING */ @@ -203,7 +215,7 @@ #endif /* __hpux */ printf(" id=%4.4s term=%-3d exit=%d", u->ut_id, -#if !defined (_AIX) || !defined (__APPLE__) +#if (!defined (_AIX) || !defined (__APPLE__)) && !defined(__FreeBSD__) u->ut_exit.e_termination, u->ut_exit.e_exit #else /* _AIX, __APPLE__ */ @@ -213,9 +225,12 @@ ); else if (u->ut_type == INIT_PROCESS && !sflag) printf(" id=%4.4s", u->ut_id); + +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 900007) else if (u->ut_type == RUN_LVL) printf(" %c %-4ld %c", (int)(u->ut_pid & 0377), 0L, (int)((u->ut_pid & 0177777) / 0400)); +#endif if (Rflag && u->ut_host[0]) printf("\t(%.*s)", (int)sizeof u->ut_host, u->ut_host); putchar('\n'); @@ -227,10 +242,13 @@ enum okay val = STOP; switch (u->ut_type) { + +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 900007) case RUN_LVL: if (flags & FL_r) val = OKAY; break; +#endif case BOOT_TIME: if (flags & FL_b) val = OKAY;