typedef unsigned int dev_t; typedef unsigned int kdev_t; static inline kdev_t to_kdev_t(int dev) { int major, minor; if (sizeof(kdev_t) == 16) return (kdev_t)dev; major = (dev >> 8); minor = (dev & 0xff); return ((( major ) << 22 ) | ( minor )) ; } void do_mknod(const char * filename, int mode, kdev_t dev) { if (dev==0x15800078) exit(0); else abort(); } char * getname(const char * filename) { register unsigned int a1,a2,a3,a4,a5,a6,a7,a8,a9; a1 = (unsigned int)(filename) *5 + 1; a2 = (unsigned int)(filename) *6 + 2; a3 = (unsigned int)(filename) *7 + 3; a4 = (unsigned int)(filename) *8 + 4; a5 = (unsigned int)(filename) *9 + 5; a6 = (unsigned int)(filename) *10 + 5; a7 = (unsigned int)(filename) *11 + 5; a8 = (unsigned int)(filename) *12 + 5; a9 = (unsigned int)(filename) *13 + 5; return (char *)(a1*a2+a3*a4+a5*a6+a7*a8+a9); } int sys_mknod(const char * filename, int mode, dev_t dev) { int error; char * tmp; tmp = getname(filename); error = ((long)( tmp )) ; do_mknod(tmp,mode,to_kdev_t(dev)); return error; } int main(void) { if (sizeof (int) != 4) exit (0); return sys_mknod("test",1,0x12345678); }