Jose R. Valverde wrote:
u.u_dirp.l = (caddr_t) ((long) (((saddr_t)
(uap->linkname).l) & 0x7F00FFFF);
I've added a missing ) behind .l:
u.u_dirp.l = (caddr_t) ((long) (((saddr_t) (uap->linkname).l)) &
0x7F00FFFF);
And I've got:
"sys2.c":305: warning: struct/union or struct/union pointer required
"sys2.c":305: operands of CAST have incompatible types
saddr_t aux;
aux.l = (caddr_t) uap->linkname;
u.u_dirp.l = (caddr_t) ((long) aux.l & 0x7F00FFFF);
ldl rr2,rr8(#4)
ldl |_stkseg+~L1|(fp),rr2
and r2,#32512
ldl _u+78,rr2
they actually had the original code
register struct a {
char *target;
saddr_t *linkname;
} *uap;
...
u.u_dirp.l = (caddr_t)(((long)uap->linkname.l & 0x7F00FFFF);
Hm - my man page states, that link() needs a char * as 2nd parameter, but
I've tested it:
"sys2.c":305: operands of "&" have incompatible types
"sys2.c":305: illegal combination of pointer and integer
"sys2.c":305: syntax error
I also tried
u.u_dirp.l = (caddr_t)(((long)((uap->linkname).l) & 0x7F00FFFF);
--
Oliver Lehmann
http://www.pofo.de/
http://wishlist.ans-netz.de/