void safe_setrlimit (int what, long value) { struct rlimit r; if (getrlimit (what, &r) < 0) w_die ("getrlimit ($s) failed: $E\n", limit_name (what)); if (value < 0 || (unsigned long) value > r.rlim_max) r.rlim_cur = r.rlim_max; else r.rlim_cur = value; if (setrlimit (what, &r) < 0) w_die ("setrlimit ($s=$l) failed: $E\n", limit_name (what), value); }
int main(int ac, char **av) { int fds[2]; long limit; int errors = 0; int verbose = (ac >= 2 && !strcmp(av[1], "-v")); if (ac == 2 && !strcmp(av[1], "help")) { printf("usage: %s [-v]\n", *av); return EXIT_SUCCESS; } printf("Testing: %s\n", "lim"); if ((limit = limit_arg()) == -1) ++errors, printf("Test1: limit_arg() failed\n"); else if (verbose) printf("arg = %ld\n", limit); if ((limit = limit_child()) == -1) ++errors, printf("Test2: limit_child() failed\n"); else if (verbose) printf("child = %ld\n", limit); if ((limit = limit_tick()) == -1) ++errors, printf("Test3: limit_tick() failed\n"); else if (verbose) printf("tick = %ld\n", limit); if ((limit = limit_group()) == -1) ++errors, printf("Test4: limit_group() failed\n"); else if (verbose) printf("group = %ld\n", limit); if ((limit = limit_open()) == -1) ++errors, printf("Test5: limit_open() failed\n"); else if (verbose) printf("open = %ld\n", limit); if ((limit = limit_stream()) == -1) ++errors, printf("Test6: limit_stream() failed\n"); else if (verbose) printf("stream = %ld\n", limit); if ((limit = limit_tzname()) == -1) ++errors, printf("Test7: limit_tzname() failed\n"); else if (verbose) printf("tzname = %ld\n", limit); if ((limit = limit_job()) == -1) ++errors, printf("Test8: limit_job() failed\n"); else if (verbose) printf("job = %ld\n", limit); if ((limit = limit_save_ids()) == -1) ++errors, printf("Test9: limit_save_ids() failed\n"); else if (verbose) printf("save_ids = %ld\n", limit); if ((limit = limit_version()) == -1) ++errors, printf("Test10: limit_version() failed\n"); else if (verbose) printf("version = %ld\n", limit); if ((limit = limit_canon()) == -1) ++errors, printf("Test11: limit_canon() failed\n"); else if (verbose) printf("canon = %ld\n", limit); if ((limit = limit_input()) == -1) ++errors, printf("Test12: limit_input() failed\n"); else if (verbose) printf("input = %ld\n", limit); if ((limit = limit_vdisable()) == -1) ++errors, printf("Test13: limit_vdisable() failed\n"); else if (verbose) printf("vdisable = %ld\n", limit); if ((limit = limit_link()) == -1) ++errors, printf("Test14: limit_link() failed\n"); else if (verbose) printf("link = %ld\n", limit); if ((limit = limit_name()) == -1) ++errors, printf("Test15: limit_name() failed\n"); else if (verbose) printf("name = %ld\n", limit); if ((limit = limit_path()) == -1) ++errors, printf("Test16: limit_path() failed\n"); else if (verbose) printf("path = %ld\n", limit); if (pipe(fds) == -1) { ++errors, printf("Test17: failed to test limit_fpipe() - pipe() failed (%s)\n", strerror(errno)); } else { if ((limit = limit_fpipe(fds[0])) == -1) ++errors, printf("Test17: limit_fpipe() failed\n"); else if (verbose) printf("pipe = %ld\n", limit); close(fds[0]); close(fds[1]); } if ((limit = limit_notrunc()) == -1) ++errors, printf("Test18: limit_notrunc() failed\n"); else if (verbose) printf("notrunc = %ld\n", limit); if ((limit = limit_chown()) == -1) ++errors, printf("Test19: limit_chown() failed\n"); else if (verbose) printf("chown = %ld\n", limit); if (errors) printf("%d/19 tests failed\n", errors); else printf("All tests passed\n"); return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }