- return((struct key *)bsearch(&tmp, keys,
- sizeof(keys)/sizeof(struct key), sizeof(struct key), c_key));
+ if (!(kp = (struct key *)bsearch(&tmp, keys,
+ sizeof(keys)/sizeof(struct key), sizeof(struct key), c_key)))
+ return(0);
+ if (!(kp->flags & F_OFFOK) && ip->off)
+ err("illegal option -- %s\n%s", name, usage);
+ if (kp->flags & F_NEEDARG && !(ip->arg = *++*argvp))
+ err("option requires an argument -- %s\n%s", name, usage);
+ kp->f(ip);
+ return(1);