incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: svn commit: r659253 - in /stdcxx/branches/4.2.x: examples/manual/ src/ tests/algorithms/ tests/containers/ tests/localization/ tests/numerics/ tests/regress/ tests/src/ tests/strings/ util/
Date Fri, 23 May 2008 20:04:38 GMT
elemings@apache.org wrote:
> Author: elemings
> Date: Thu May 22 13:54:39 2008
> New Revision: 659253
> 
> URL: http://svn.apache.org/viewvc?rev=659253&view=rev
> Log:
> 2008-05-22  Eric Lemings <eric.lemings@roguewave.com>
> 
> 	STDCXX-550
[...]
> 	* util/cmdopt.cpp: Explicitly cast return value of sysconf()
> 	function to `float' type used by `TICKS_PER_SEC' global.
> 	  (eval_options): Cast return value of strtol() function to
> 	`unsigned' type.  Second parameter of get_long_val() function
> 	expects `unsigned' type (go figure).  Cast return value of
> 	sizeof operator.  exit() function expects `int' status code.
> 	Parameter type of rw_sleep() function is `int'.
[...]
> Modified: stdcxx/branches/4.2.x/util/cmdopt.cpp
> URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/util/cmdopt.cpp?rev=659253&r1=659252&r2=659253&view=diff
> ==============================================================================
> --- stdcxx/branches/4.2.x/util/cmdopt.cpp (original)
> +++ stdcxx/branches/4.2.x/util/cmdopt.cpp Thu May 22 13:54:39 2008
> @@ -59,7 +59,7 @@
>  const char suffix_sep = '.';
>  const size_t exe_suffix_len = 0;
>  #if defined (_SC_CLK_TCK)
> -const float TICKS_PER_SEC = sysconf (_SC_CLK_TCK);
> +const float TICKS_PER_SEC = float (sysconf (_SC_CLK_TCK));

(As an aside, I wonder why this is defined here when the only
place it's used is display.cpp. We should move it there.)

>  #elif defined (CLK_TCK)
>  const float TICKS_PER_SEC = CLK_TCK;
>  #elif defined (CLOCKS_PER_SEC)
> @@ -521,7 +521,7 @@
>                      bad_value (optname, optarg);
>  
>                  errno = 0;
> -                defaults->timeout = strtol (optarg, &end, 10);
> +                defaults->timeout = unsigned (strtol (optarg, &end, 10));

I suggest using strtoul() here instead.

>                  if (*end || errno)
>                      bad_value (optname, optarg);
>              }
> @@ -573,7 +573,7 @@
>                       && !memcmp (opt_exit, argv [i], sizeof opt_exit - 1)) {
>                  /* exit immediately with the specified status */
>                  optname = opt_exit;
> -                optarg  = get_long_val (argv, &i, sizeof opt_exit - 1);
> +                optarg  = get_long_val (argv, &i, unsigned (sizeof opt_exit - 1));

I suggest changing the get_long_val() signature to take size_t
as the last argument (it will also help reduce the line length
under 80 characters ;-)


>                  if (optarg && *optarg) {
>                      if (!isdigit (*optarg))
>                          bad_value (optname, optarg);
> @@ -581,7 +581,7 @@
>                      errno = 0;
>                      const long code = strtol (optarg, &end, 10);
>                      if ('\0' == *end && !errno)
> -                        exit (code);
> +                        exit (int (code));

Seems this code (not necessarily the change) could do with some
error checking and reporting...

>                  }
>              }
>              else if (   sizeof opt_help - 1 == arglen
> @@ -595,7 +595,7 @@
>                       && !memcmp (opt_sleep, argv [i], sizeof opt_sleep - 1))
{
>                  /* sleep for the specified number of seconds */ 
>                  optname = opt_sleep;
> -                optarg  = get_long_val (argv, &i, sizeof opt_sleep - 1);
> +                optarg  = get_long_val (argv, &i, unsigned (sizeof opt_sleep - 1));
>                  if (optarg && *optarg) {
>                      if (!isdigit (*optarg))
>                          bad_value (optname, optarg);
> @@ -603,7 +603,7 @@
>                      errno = 0;
>                      const long nsec = strtol (optarg, &end, 10);
>                      if ('\0' == *end && 0 <= nsec && !errno) {
> -                        rw_sleep (nsec);
> +                        rw_sleep (int (nsec));

Same here (e.g., passing in a very large number on the command
line as a result of a scripting error).

Martin

Mime
View raw message