From 47ad059bd78ecf94542293e8eb97aedcf5f808f8 Mon Sep 17 00:00:00 2001 From: Gianluca Borello Date: Mon, 23 Jan 2017 08:57:32 -0800 Subject: Rawshark: Add a memory limit (-m) option. Add an option to rawshark that lets the user set a maximum memory limit. Change-Id: Ie102ee5f6ba5aec90a35bd63297184c7dc37662c Reviewed-on: https://code.wireshark.org/review/19911 Reviewed-by: Gerald Combs --- rawshark.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'rawshark.c') diff --git a/rawshark.c b/rawshark.c index af607044ac..df4a7b360d 100644 --- a/rawshark.c +++ b/rawshark.c @@ -40,6 +40,11 @@ #include #include +#ifndef _WIN32 +#include +#include +#endif + #ifdef HAVE_GETOPT_H #include #endif @@ -191,6 +196,9 @@ print_usage(FILE *output) fprintf(output, " -d |\n"); fprintf(output, " packet encapsulation or protocol\n"); fprintf(output, " -F field to display\n"); +#ifndef _WIN32 + fprintf(output, " -m virtual memory limit, in bytes \n"); +#endif fprintf(output, " -n disable all name resolution (def: all enabled)\n"); fprintf(output, " -N enable specific name resolution(s): \"mnNtd\"\n"); fprintf(output, " -p use the system's packet header format\n"); @@ -416,6 +424,8 @@ main(int argc, char *argv[]) #ifdef _WIN32 WSADATA wsaData; +#else + struct rlimit limit; #endif /* _WIN32 */ char *gpf_path, *pf_path; @@ -438,7 +448,7 @@ main(int argc, char *argv[]) {0, 0, 0, 0 } }; -#define OPTSTRING_INIT "d:F:hlnN:o:pr:R:sS:t:v" +#define OPTSTRING_INIT "d:F:hlm:nN:o:pr:R:sS:t:v" static const char optstring[] = OPTSTRING_INIT; @@ -632,6 +642,18 @@ main(int argc, char *argv[]) and the output buffer is only flushed when it fills up). */ line_buffered = TRUE; break; +#ifndef _WIN32 + case 'm': + limit.rlim_cur = get_positive_int(optarg, "memory limit"); + limit.rlim_max = get_positive_int(optarg, "memory limit"); + + if(setrlimit(RLIMIT_AS, &limit) != 0) + { + cmdarg_err("setrlimit() returned error"); + exit(1); + } + break; +#endif case 'n': /* No name resolution */ disable_name_resolution(); break; -- cgit v1.2.1