ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] ngx_str_set



Предлагаю немного пропатчить ngx_str_set

простой пример, когда оригинальная версия работать не будет.

if (...) ngx_str_set(...);

или
if (...) ngx_str_set(...);
else ...;


тестовый пример, сравнивающий 2 подхода:

#include <stdio.h>

#ifdef CORRECT
#define test(a,b) do { printf("%s\n",a);printf("%s\n",b); } while (0)
#endif
#ifndef CORRECT
#define test(a,b) printf("%s\n",a);printf("%s\n",b)
#endif

int main () {
    test("visible 1.1","visible 1.2");
    if (0) test("invisible 2.1","invisible 2.2");
    return 0;
}

/**************************/

$ gcc -o test test.c && ./test
visible 1.1
visible 1.2
invisible 2.2

$ gcc -DCORRECT -o test test.c && ./test
visible 1.1
visible 1.2

при этом если у нас if/else, то с оригинальным вариантом все еще хуже:

/**************************/

#include <stdio.h>

#ifdef CORRECT
#define test(a,b) do { printf("%s\n",a);printf("%s\n",b); } while (0)
#endif
#ifndef CORRECT
#define test(a,b) printf("%s\n",a);printf("%s\n",b)
#endif

int main () {
    test("visible 1.1","visible 1.2");
    if (0) test("invisible 2.1","invisible 2.2");
    else test("visible 3.1","visible 3.2");
    return 0;
}

/**************************/

$ gcc -o test test.c && ./test
test.c: In function 'main':
test.c:13: error: expected expression before 'else'

$ gcc -DCORRECT -o test test.c && ./test
visible 1.1
visible 1.2
visible 3.1
visible 3.2


-- 
Mons Anderson aka Vladimir Perepelitsa
<mons@xxxxxxxx> / #99779956 / quanth@xxxxxxxxxxxxxxxx
--- nginx-0.8.37/src/core/ngx_string.h  2010-05-14 13:56:37.000000000 +0400
+++ nginx-0.8.37.mod/src/core/ngx_string.h      2010-05-20 14:57:12.000000000 
+0400
@@ -37,11 +37,11 @@
 
 
 #define ngx_string(str)     { sizeof(str) - 1, (u_char *) str }
 #define ngx_null_string     { 0, NULL }
 #define ngx_str_set(str, text)                                               -    (str)->len = sizeof(text) - 1; (str)->data = (u_char *) text
+    do { (str)->len = sizeof(text) - 1; (str)->data = (u_char *) text } while 
(0)
 #define ngx_str_null(str)   (str)->len = 0; (str)->data = NULL
 
 
 #define ngx_tolower(c)      (u_char) ((c >= 'A' && c <= 'Z') ? (c | 0x20) : c)
 #define ngx_toupper(c)      (u_char) ((c >= 'a' && c <= 'z') ? (c & ~0x20) : c)
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.