Changeset 3f1d9b5
- Timestamp:
- Jul 20, 2020, 1:20:06 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 28d73c1, 7d94bfe3
- Parents:
- 03ed863
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/io/http/parseargs.cfa
r03ed863 r3f1d9b5 3 3 // #include <stdio.h> 4 4 // #include <stdlib.h> 5 #include <errno.h> 5 6 #include <string.h> 7 #include <unistd.h> 6 8 extern "C" { 7 9 #include <getopt.h> 10 #include <sys/ioctl.h> 8 11 9 12 struct FILE; … … 11 14 extern FILE * stdout; 12 15 16 extern int fileno(FILE *stream); 17 13 18 extern int fprintf ( FILE * stream, const char * format, ... ); 14 19 15 20 extern long long int strtoll (const char* str, char** endptr, int base); 16 21 extern unsigned long long int strtoull(const char* str, char** endptr, int base); 22 } 23 24 #include <common.hfa> 25 #include <limits.hfa> 26 27 void printopt(FILE * out, int width, int max, char sn, const char * ln, const char * help) { 28 int hwidth = max - (11 + width); 29 if(hwidth <= 0) hwidth = max; 30 31 fprintf(out, " -%c, --%-*s %.*s\n", sn, width, ln, hwidth, help); 32 for() { 33 help += min(strlen(help), hwidth); 34 if('\0' == *help) break; 35 fprintf(out, "%*s%.*s\n", width + 11, "", hwidth, help); 36 } 17 37 } 18 38 … … 27 47 struct option optarr[opt_count + 2]; 28 48 int width = 0; 49 int max_width = 1_000_000; 29 50 { 30 51 int idx = 0; … … 95 116 } 96 117 97 USAGE: 118 USAGE:; 119 int outfd = fileno(out); 120 if(isatty(outfd)) { 121 struct winsize size; 122 int ret = ioctl(outfd, TIOCGWINSZ, &size); 123 if(ret < 0) abort( "ioctl error: (%d) %s\n", (int)errno, strerror(errno) ); 124 max_width = size.ws_col; 125 } 126 98 127 fprintf(out, "Usage:\n %s %s\n", argv[0], usage); 99 128 100 129 for(i; opt_count) { 101 fprintf(out, " -%c, --%-*s %s\n", options[i].short_name, width, options[i].long_name, options[i].help);130 printopt(out, width, max_width, options[i].short_name, options[i].long_name, options[i].help); 102 131 } 103 132 fprintf(out, " -%c, --%-*s %s\n", 'h', width, "help", "print this help message"); … … 138 167 unsigned long long int r = strtoull(arg, &end, 10); 139 168 if(*end != '\0') return false; 140 #warning not checking max 169 if(r > (unsigned)MAX) return false; 141 170 142 171 value = r; … … 148 177 unsigned long long int r = strtoull(arg, &end, 10); 149 178 if(*end != '\0') return false; 150 #warning not checking max 179 if(r > (size_t)MAX) return false; 151 180 152 181 value = r;
Note: See TracChangeset
for help on using the changeset viewer.