Re: [CODE] More fun!

From: Mike Breuer (mbreuer@new.rr.com)
Date: 06/04/01


From: "Mike Breuer" <mbreuer@NEW.RR.COM>
> From: "Alex" <ahdecker@HOME.NET>
> > my assumption is that, since it's negative, asciiflag_conv is choking on
the
> > '-' sign and returning 0 so that only 4 is set, which was not read from
the
> > file. Of course this is a total guess.. :P

-- snip (not very helpful response) --

Sorry, I guess I'm a bit tired.  You are correct.  asciiflag_conv calls
isdigit, which only checks to see if the character passed is in the range of 0
to 9.  Here's a quick fix:

long asciiflag_conv(char *flag)
{
  long flags = 0;
  int is_number = 1;
  register char *p;

+ p = flag;
+ if (*p == '-') p++;
-  for (p = flag; *p; p++) {
+  for (;*p; p++) {
    if (islower(*p))
      flags |= 1 << (*p - 'a');
    else if (isupper(*p))
      flags |= 1 << (26 + (*p - 'A'));

    if (!isdigit(*p))
      is_number = 0;
  }

  if (is_number)
    flags = atol(flag);

  return (flags);
}

I think that should do it but as I said, I am a bit tired.

Mike

--
   +---------------------------------------------------------------+
   | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
   | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
   +---------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/05/01 PST