slabtop: add gettext support
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
		
							
								
								
									
										90
									
								
								slabtop.c
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								slabtop.c
									
									
									
									
									
								
							| @@ -24,8 +24,9 @@ | ||||
| #include <sys/time.h> | ||||
| #include <sys/types.h> | ||||
| #include <unistd.h> | ||||
| #include <err.h> | ||||
|  | ||||
| #include "c.h" | ||||
| #include "nls.h" | ||||
| #include "proc/slab.h" | ||||
| #include "proc/version.h" | ||||
|  | ||||
| @@ -169,25 +170,28 @@ static void sigint_handler(int unused __attribute__ ((__unused__))) | ||||
|  | ||||
| static void __attribute__((__noreturn__)) usage(FILE *out) | ||||
| { | ||||
| 	fprintf(out, "Usage: %s [options]\n\n", program_invocation_short_name); | ||||
| 	fprintf(out, "Options:\n"); | ||||
| 	fprintf(out, "  -d, --delay <secs>  delay updates\n"); | ||||
| 	fprintf(out, "  -o, --once          only display once, then exit\n"); | ||||
| 	fprintf(out, "  -s, --sort <char>   specify sort criteria by character (see below)\n"); | ||||
| 	fprintf(out, "  -V, --version       display version information and exit\n"); | ||||
| 	fprintf(out, "  -h, --help          display this help and exit\n\n"); | ||||
| 	fputs(USAGE_HEADER, out); | ||||
| 	fprintf(out, " %s [options]\n", program_invocation_short_name); | ||||
| 	fputs(USAGE_OPTIONS, out); | ||||
| 	fprintf(out, _(" -d, --delay <secs>  delay updates\n")); | ||||
| 	fprintf(out, _(" -o, --once          only display once, then exit\n")); | ||||
| 	fprintf(out, _(" -s, --sort <char>   specify sort criteria by character (see below)\n")); | ||||
| 	fputs(USAGE_SEPARATOR, out); | ||||
| 	fputs(USAGE_HELP, out); | ||||
| 	fputs(USAGE_VERSION, out); | ||||
|  | ||||
| 	fprintf(out, "The following are valid sort criteria:\n"); | ||||
| 	fprintf(out, "  a: sort by number of active objects\n"); | ||||
| 	fprintf(out, "  b: sort by objects per slab\n"); | ||||
| 	fprintf(out, "  c: sort by cache size\n"); | ||||
| 	fprintf(out, "  l: sort by number of slabs\n"); | ||||
| 	fprintf(out, "  v: sort by number of active slabs\n"); | ||||
| 	fprintf(out, "  n: sort by name\n"); | ||||
| 	fprintf(out, "  o: sort by number of objects (the default)\n"); | ||||
| 	fprintf(out, "  p: sort by pages per slab\n"); | ||||
| 	fprintf(out, "  s: sort by object size\n"); | ||||
| 	fprintf(out, "  u: sort by cache utilization\n\n"); | ||||
| 	fprintf(out, _("\nThe following are valid sort criteria:\n")); | ||||
| 	fprintf(out, _(" a: sort by number of active objects\n")); | ||||
| 	fprintf(out, _(" b: sort by objects per slab\n")); | ||||
| 	fprintf(out, _(" c: sort by cache size\n")); | ||||
| 	fprintf(out, _(" l: sort by number of slabs\n")); | ||||
| 	fprintf(out, _(" v: sort by number of active slabs\n")); | ||||
| 	fprintf(out, _(" n: sort by name\n")); | ||||
| 	fprintf(out, _(" o: sort by number of objects (the default)\n")); | ||||
| 	fprintf(out, _(" p: sort by pages per slab\n")); | ||||
| 	fprintf(out, _(" s: sort by object size\n")); | ||||
| 	fprintf(out, _(" u: sort by cache utilization\n")); | ||||
| 	fprintf(out, USAGE_MAN_TAIL("slabtop(1)")); | ||||
|  | ||||
| 	exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); | ||||
| } | ||||
| @@ -290,12 +294,12 @@ int main(int argc, char *argv[]) | ||||
| 			errno = 0; | ||||
| 			delay = strtol(optarg, &end, 10); | ||||
| 			if (errno || optarg == end || (end && *end)) | ||||
| 				errx(EXIT_FAILURE, "illegal delay `%s'", | ||||
| 				errx(EXIT_FAILURE, _("illegal delay `%s'"), | ||||
| 					optarg); | ||||
| 			if (delay < 0) | ||||
| 				errx(EXIT_FAILURE, | ||||
| 					"delay can not have a " | ||||
| 					"negative value"); | ||||
| 					_("delay can not have a " | ||||
| 					"negative value")); | ||||
| 			break; | ||||
| 		case 's': | ||||
| 			sort_func = (int (*)(const struct slab_info*, | ||||
| @@ -306,7 +310,7 @@ int main(int argc, char *argv[]) | ||||
| 			delay = 0; | ||||
| 			break; | ||||
| 		case 'V': | ||||
| 			display_version(); | ||||
| 			printf(PROCPS_NG_VERSION); | ||||
| 			return EXIT_SUCCESS; | ||||
| 		case 'h': | ||||
| 			usage(stdout); | ||||
| @@ -316,7 +320,7 @@ int main(int argc, char *argv[]) | ||||
| 	} | ||||
|  | ||||
| 	if (tcgetattr(STDIN_FILENO, &saved_tty) == -1) | ||||
| 		warn("tcgetattr"); | ||||
| 		warn(_("tcgetattr")); | ||||
|  | ||||
| 	old_rows = rows; | ||||
| 	term_size(0); | ||||
| @@ -345,24 +349,34 @@ int main(int argc, char *argv[]) | ||||
| 		} | ||||
|  | ||||
| 		move(0, 0); | ||||
| 		print_line(	" Active / Total Objects (%% used)    : %d / %d (%.1f%%)\n" | ||||
| 			" Active / Total Slabs (%% used)      : %d / %d (%.1f%%)\n" | ||||
| 			" Active / Total Caches (%% used)     : %d / %d (%.1f%%)\n" | ||||
| 			" Active / Total Size (%% used)       : %.2fK / %.2fK (%.1f%%)\n" | ||||
| 			" Minimum / Average / Maximum Object : %.2fK / %.2fK / %.2fK\n\n", | ||||
| 			stats.nr_active_objs, stats.nr_objs, 100.0 * stats.nr_active_objs / stats.nr_objs, | ||||
| 			stats.nr_active_slabs, stats.nr_slabs, 100.0 * stats.nr_active_slabs / stats.nr_slabs, | ||||
| 			stats.nr_active_caches, stats.nr_caches, 100.0 * stats.nr_active_caches / stats.nr_caches, | ||||
| 			stats.active_size / 1024.0, stats.total_size / 1024.0, 100.0 * stats.active_size / stats.total_size, | ||||
| 			stats.min_obj_size / 1024.0, stats.avg_obj_size / 1024.0, stats.max_obj_size / 1024.0 | ||||
| 		); | ||||
| 		printw(" %-35s: %d / %d (%.1f%%)\n" | ||||
| 		       " %-35s: %d / %d (%.1f%%)\n" | ||||
| 		       " %-35s: %d / %d (%.1f%%)\n" | ||||
| 		       " %-35s: %.2fK / %.2fK (%.1f%%)\n" | ||||
| 		       " %-35s: %.2fK / %.2fK / %.2fK\n\n", | ||||
| 		       _("Active / Total Objects (% used)"), | ||||
| 		       stats.nr_active_objs, stats.nr_objs, | ||||
| 		       100.0 * stats.nr_active_objs / stats.nr_objs, | ||||
| 		       _("Active / Total Slabs (% used)"), | ||||
| 		       stats.nr_active_caches, stats.nr_caches, | ||||
| 		       100.0 * stats.nr_active_caches / stats.nr_caches, | ||||
| 		       _("Active / Total Caches (% used)"), | ||||
| 		       stats.nr_active_slabs, stats.nr_slabs, | ||||
| 		       100.0 * stats.nr_active_slabs / stats.nr_slabs, | ||||
| 		       _("Active / Total Size (% used)"), | ||||
| 		       stats.active_size / 1024.0, stats.total_size / 1024.0, | ||||
| 		       100.0 * stats.active_size / stats.total_size, | ||||
| 		       _("Minimum / Average / Maximum Object"), | ||||
| 		       stats.min_obj_size / 1024.0, stats.avg_obj_size / 1024.0, | ||||
| 		       stats.max_obj_size / 1024.0); | ||||
|  | ||||
| 		slab_list = slabsort(slab_list); | ||||
|  | ||||
| 		attron(A_REVERSE); | ||||
| 		print_line(	"%6s %6s %4s %8s %6s %8s %10s %-23s\n", | ||||
| 			"OBJS", "ACTIVE", "USE", "OBJ SIZE", "SLABS", | ||||
| 			"OBJ/SLAB", "CACHE SIZE", "NAME"); | ||||
| 		print_line("%6s %6s %4s %8s %6s %8s %10s %-23s\n", | ||||
| 			   _("OBJS"), _("ACTIVE"), _("USE"), _("OBJ SIZE"), | ||||
| 			   _("SLABS"), _("OBJ/SLAB"), _("CACHE SIZE"), | ||||
| 			   _("NAME")); | ||||
| 		attroff(A_REVERSE); | ||||
|  | ||||
| 		curr = slab_list; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user