Why u_char* not char*

Maxim Dounin mdounin at mdounin.ru
Wed Jul 15 05:41:14 MSD 2009


On Tue, Jul 14, 2009 at 11:56:27PM +0300, Marcus Clyne wrote:

> Hi,
> Why are strings in Nginx stored as u_char*'s and not char*'s pointers?   
> What's the advantage?

I'm not sure why Igor choose it, but there are at least several 
reasons to use 'unsigned char' (aka u_char) instead of 'char' 
(which may be either signed or unsigned):

- Constructs like

    u_char   map[] = { 0, 0, 0, 1, 1, ... };
    u_char  *p;


    if (map[*p]) { ... }

  work as expected for all possible character values without any 
  extra typecasting.

- Comparision works in predictable way.  And you will get (mostly) 
  reasonable sorting on any arbitraty data even without collation 

- Overflow behaviour undefined for signed types, and bitwise 
  operators are undefined for negative values.

So basically if you deal with abitrary byte streams in some 
arbitrary way as nginx do - 'unsigned char' is better choice.

Maxim Dounin

p.s. It's really good idea to start new thread for unrelated 

More information about the nginx mailing list