This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][BZ #15346] Allow leading and trailing spaces in getdate


Could be simplified, see below.

On Mon, Apr 08, 2013 at 06:22:33PM +0530, Siddhesh Poyarekar wrote:
> Hi,
> 
> +  size_t string_len = strlen (string);
> +  int i = 0;
> +  bool free_instr = false;
> +
> +  /* Skip leading spaces.  */
> +  while (string[i] && isspace (string[i]))
> +    i++;
> +
/* Skip trailing spaces.  */
while (string_len > 0 && isspace (string[string_len]))
  string_len--;


> +  char *instr;
> +  if (__libc_use_alloca (string_len))
> +    {
> +      instr = alloca (string_len - i + 1);
> +      memcpy (instr, string + i, string_len - i + 1);

instr[string_len - i] = '\0'

> +    }
> +  else
> +    {
> +      instr = __strdup (string + i);
> +      if (instr == NULL)
> +	{
> +	  fclose (fp);
> +	  return 6;
> +	}
> +      free_instr = true;
> +    }
> +
> +
>    line = NULL;
>    len = 0;
>    do
> @@ -153,12 +190,15 @@ __getdate_r (const char *string, struct tm *tp)
>        tp->tm_isdst = -1;
>        tp->tm_gmtoff = 0;
>        tp->tm_zone = NULL;
> -      result = strptime (string, line, tp);
> +      result = strptime (instr, line, tp);
>        if (result && *result == '\0')
>  	break;
>      }
>    while (!feof_unlocked (fp));
>  
> +  if (free_instr)
> +    free (instr);
> +
>    /* Free the buffer.  */
>    free (line);
>  
> diff --git a/time/tst-getdate.c b/time/tst-getdate.c
> index 7604e83..dc8ecf4 100644
> --- a/time/tst-getdate.c
> +++ b/time/tst-getdate.c
> @@ -31,6 +31,10 @@ static const struct
>  } tests [] =
>  {
>    {"21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
> +  {"21:01:10    1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
> +  {"   21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
> +  {"21:01:10 1999-1-31   ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
> +  {"    21:01:10 1999-1-31   ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
>    {"21:01:10 1999-2-28", "Universal", 0, {10, 1, 21, 28, 1, 99, 0, 0, 0}},
>    {"16:30:46 2000-2-29", "Universal", 0, {46, 30,16, 29, 1, 100, 0, 0, 0}},
>    {"01-08-2000 05:06:07", "Europe/Berlin", 0, {7, 6, 5, 1, 7, 100, 0, 0, 0}}

-- 

appears to be a Slow/Narrow SCSI-0 Interface problem


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]