Por que devolver um erro negativo? (por exemplo, retornar -EIO)

Outro exemplo simples:

if (wpa_s->mlme.ssid_len == 0)
    return -EINVAL;

Por que o unário menos? Isso é (normalmente) feito para funções que retornam> 0 em sucesso e <(=) 0 em falha, ou existe algum outro motivo?