diff -Nru /n/sources/plan9/sys/src/libc/port/getbe.c /sys/src/libc/port/getbe.c --- /n/sources/plan9/sys/src/libc/port/getbe.c Thu Jan 1 00:00:00 1970 +++ /sys/src/libc/port/getbe.c Mon Dec 5 00:00:00 2011 @@ -0,0 +1,54 @@ +#include +#include + +static uvlong border = 0x0001020304050607ull; +static uvlong lorder = 0x0706050403020100ull; + +uvlong +getle(uchar *t, int w) +{ + uint i; + uvlong r; + + r = 0; + for(i = w; i != 0; ) + r = r<<8 | t[--i]; + return r; +} + +void +putle(uchar *t, uvlong r, int w) +{ + uchar *o, *f; + uint i; + + f = (uchar*)&r; + o = (uchar*)&lorder; + for(i = 0; i < w; i++) + t[o[i]] = f[i]; +} + +uvlong +getbe(uchar *t, int w) +{ + uint i; + uvlong r; + + r = 0; + for(i = 0; i < w; i++) + r = r<<8 | t[i]; + return r; +} + +void +putbe(uchar *t, uvlong r, int w) +{ + uchar *o, *f; + uint i; + + f = (uchar*)&r; + o = (uchar*)&border + (sizeof border-w); + for(i = 0; i < w; i++) + t[i] = f[o[i]]; +} + diff -Nru /n/sources/plan9/sys/src/libc/port/mkfile /sys/src/libc/port/mkfile --- /n/sources/plan9/sys/src/libc/port/mkfile Sat Nov 1 20:37:24 2003 +++ /sys/src/libc/port/mkfile Sat Jan 5 00:00:00 2013 @@ -27,6 +27,7 @@ fmod.c\ frand.c\ frexp.c\ + getbe.c\ getcallerpc.c\ getfields.c\ getuser.c\ --- /n/sources/plan9/sys/include/libc.h Fri Jun 29 18:22:31 2012 +++ /sys/include/libc.h Sat Jan 5 00:00:00 2013 @@ -332,6 +332,14 @@ extern void cycles(uvlong*); /* 64-bit value of the cycle counter if there is one, 0 if there isn't */ /* + * endian conversion + */ +extern uvlong getbe(uchar*, int); +extern void putbe(uchar*, uvlong, int); +extern uvlong getle(uchar*, int); +extern void putle(uchar*, uvlong, int); + +/* * one-of-a-kind */ enum --- /n/sources/plan9/sys/src/9/port/lib.h Mon Oct 4 22:16:43 2010 +++ /sys/src/9/port/lib.h Sat Jan 5 00:00:00 2013 @@ -134,6 +134,10 @@ extern int dec64(uchar*, int, char*, int); extern int encodefmt(Fmt*); extern void qsort(void*, long, long, int (*)(void*, void*)); +extern uvlong getle(uchar*, int); +extern void putle(uchar*, uvlong, int); +extern uvlong getbe(uchar*, int); +extern void putbe(uchar*, uvlong, int); /* * Syscall data structures