- getrlimit(lp->limconst, &rlim);
- rlim.rlim_cur = limit;
- if (setrlimit(lp->limconst, &rlim) < 0)
- Perror(bname);
+ (void) getrlimit(lp->limconst, &rlim);
+ if (hard)
+ rlim.rlim_max = limit;
+ else if (limit == RLIM_INFINITY && geteuid() != 0)
+ rlim.rlim_cur = rlim.rlim_max;
+ else
+ rlim.rlim_cur = limit;
+ if (setrlimit(lp->limconst, &rlim) < 0) {
+ printf("%s: %s: Can't %s%s limit\n", bname, lp->limname,
+ limit == RLIM_INFINITY ? "remove" : "set",
+ hard ? " hard" : "");
+ return (-1);
+ }
+ return (0);