/[inetutils]/inetutils/ping/ping.c
ViewVC logotype

Diff of /inetutils/ping/ping.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.22 by ams, Mon Jun 20 08:21:48 2005 UTC revision 1.23 by gray, Fri Jul 29 17:13:48 2005 UTC
# Line 99  static void show_usage (void); Line 99  static void show_usage (void);
99  static void decode_type (const char *optarg);  static void decode_type (const char *optarg);
100  static int send_echo (PING *ping);  static int send_echo (PING *ping);
101    
102    static size_t
103    ping_cvt_number (const char *optarg, size_t maxval, int allow_zero)
104    {
105      char *p;
106      size_t n;
107      
108      n = strtoul (optarg, &p, 0);
109      if (*p)
110        {
111          fprintf (stderr, "Invalid value (`%s' near `%s')\n", optarg, p);
112          exit (1);
113        }
114      if (n == 0 && !allow_zero)
115        {
116          fprintf (stderr, "Option value too small: %s\n", optarg);
117          exit (1);
118        }
119      if (maxval && n > maxval)
120        {
121          fprintf (stderr, "Option value too big: %s\n", optarg);
122          exit (1);
123        }
124      return n;
125    }
126    
127  int  int
128  main (int argc, char **argv)  main (int argc, char **argv)
129  {  {
# Line 110  main (int argc, char **argv) Line 135  main (int argc, char **argv)
135    u_char *patptr = NULL;    u_char *patptr = NULL;
136    bool is_root = false;    bool is_root = false;
137    
138    int count = 0;    size_t count = 0;
139    int socket_type = 0;    int socket_type = 0;
140    int interval = 0;    size_t interval = 0;
141    
142    if (getuid () == 0)    if (getuid () == 0)
143      is_root = true;      is_root = true;
# Line 144  main (int argc, char **argv) Line 169  main (int argc, char **argv)
169            break;            break;
170                        
171          case 'c':          case 'c':
172            count = atoi (optarg);            count = ping_cvt_number (optarg, 0, 0);
           if (count <= 0)  
             error (1, 0, "invalid count: %i", count);  
173            break;            break;
174                        
175          case 'd':          case 'd':
# Line 159  main (int argc, char **argv) Line 182  main (int argc, char **argv)
182                        
183          case 'i':          case 'i':
184            options |= OPT_INTERVAL;            options |= OPT_INTERVAL;
185            if (interval <= 0)            interval = ping_cvt_number (optarg, 0, 0);
             error (1, 0, "invalid interval: %i", interval);  
186            break;            break;
187                        
188          case 'p':          case 'p':
# Line 169  main (int argc, char **argv) Line 191  main (int argc, char **argv)
191            break;            break;
192                        
193          case 's':          case 's':
194            data_length = atoi (optarg);            data_length = ping_cvt_number (optarg, PING_MAX_DATALEN, 1);
           if (data_length < 1 || data_length > PING_MAX_DATALEN)  
             error (1, 0, "invalid data length: %i", data_length);  
195            break;            break;
196                        
197          case 'n':          case 'n':

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26