%{ #include #include %} function inode_uid:string(_ino:long) %{ struct inode *inode = (struct inode *)(long) kread(&(THIS->_ino)); snprintf(THIS->__retvalue, MAXSTRINGLEN, "uid=%d gid=%d", inode->i_uid, inode->i_gid); CATCH_DEREF_FAULT(); %} function file_modes:string(_m:long) %{ char buf[MAXSTRINGLEN]; int cc=0; int _mod = (long) kread(&(THIS->_m)); if (_mod & MAY_EXEC) { sprintf(buf+cc, "EXEC|"); cc = strlen(buf); } if (_mod & MAY_WRITE) { sprintf(buf+cc, "WRITE|"); cc = strlen(buf); } if (_mod & MAY_READ) { sprintf(buf+cc, "READ|"); cc = strlen(buf); } if (_mod & MAY_APPEND) { sprintf(buf+cc, "APPEND|"); cc = strlen(buf); } if (_mod & MAY_ACCESS) { sprintf(buf+cc, "ACCESS|"); cc = strlen(buf); } if (_mod & MAY_OPEN) { sprintf(buf+cc, "OPEN|"); cc = strlen(buf); } if (cc) snprintf(THIS->__retvalue, MAXSTRINGLEN, "mode 0%o (%s)", _mod, buf); else snprintf(THIS->__retvalue, MAXSTRINGLEN, "mode 0%o", _mod); CATCH_DEREF_FAULT(); %}