On Tue, Aug 25, 2015 at 01:09:27PM +0100, Rainer Weikusat wrote:
> "tilt!" <t...@linuxfoo.de> writes:
> 
> > Hi Edward,
> >
> > On 08/25/2015 12:51 PM, Edward Bartolo wrote:
> >> [...]
> >
> > Please accept merge request #1 "cleanup of backend binaries".
> 
> Two random remarks:
> 
> ,----
> | size_t essid_safe_strlen(uint8_t * bytes)
> | {
> |     size_t result;
> | 
> |     if(!bytes)
> |             return 0;
> | 
> |     result = 0;
> | 
> |     while(*bytes != 0) {
> |             bytes++;
> |             result++;
> |     }
> | 
> |     return result; 
> | }
> `----
> 
> A C string of length 0 is just a "\000". A NULL pointer is not a string.
> Reimplementing strlen is - apart from that - a rather bizarre idea. A
> usual implementation would look somewhat like this:
> 
> size_t strlen(char *s)
> {
>       char *r;
> 
>         r = s;
>         while (*r) ++r;
>         return r - s;
> }
> 
> ie, it's not necessary to maintain a separate byte counter.
> 
> ,----
> | uint8_t essid_allowed_chars[] = 
> "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-";
> | 
> | [...]
> | 
> | int essid_allowed_char(uint8_t c) {
> |     size_t i;
> |     size_t k;
> | 
> |     int rv;
> | 
> |     rv = 0;
> | 
> |     k = essid_safe_strlen(essid_allowed_chars);
> | 
> |     for (i=0; i<k; i++)
> |             if(c==essid_allowed_chars[i]) {
> |                     rv = 1;
> | 
> |                     break;
> |             }
> | 
> |     return rv;
> | }
> `----
> 
> A more sensible simple way to implement this would be
> 
> char *essid_allowed_chars = 
> "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-";
> 
> int essid_allowed_char(int c)
> {
>       return strchr(essid_allowed_chars, c) != NULL;
> }
> 
> Considering that this enforces some kind of 'bastard URL-encoding'
> (using + as prefix instead of %) for all other bytes, it's also going
> make people who believe that UTF-8 would be a well supported way to
> represent non-ASCII characters very unhappy.

The Korean encoding before UTF-8 used two-byte characters.  Sone of 
those characters contained zero bytes as parts of a two-byte nonzero 
encoding.

I had to use environment-dependent string copying to get that one right.

-- hendrik

> _______________________________________________
> Dng mailing list
> Dng@lists.dyne.org
> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to