ПРОЕКТЫ 


  АРХИВ 


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]

Re: Модуль на C++ - во зможно?



On Mon, Mar 03, 2008 at 03:58:27PM +0300, Sergey Samokhin wrote:

> Скажите пожалуйста, существует ли возможность писать модули к nginx на 
> C++? Например, следующий код не собирается под g++ 4.2.2:
> 
> // ----------------------------------
> #include <ngx_core.h>
> 
> int main()
> {
> ngx_str_t str;
> }
> // ----------------------------------
> 
> ругаясь так:
> 
> // --------------------------------------------
> g++ -o ngx_http_foo_module -I../src/nginx-0.6.26/src/core 
> -I../src/nginx-0.6.26/objs -I../src/nginx-0.6.26/src/os/unix *.c
> In file included from ../src/nginx-0.6.26/src/core/ngx_core.h:57,
> from ngx_http_foo_module.c:2:
> ../src/nginx-0.6.26/src/core/ngx_file.h:66: error: expected 
> unqualified-id before 'delete'
> make: *** [ngx_madbanner] Error 1
> // --------------------------------------------
> 
> Этот же код отлично собирается с помощью gcc.
> 
> Спасибо =)
> 
> nginx 0.6.26
> gcc/g++ 4.2.2

Прилагаемый патч лечит.

Кроме того, все инклуды должны идти после nginx'овских

extern "C" {
  #include <ngx_config.h>
  #include <ngx_core.h>
  #include <ngx_event.h>
  #include <ngx_http.h>
}

иначе на Линуске и Солярисе возможны проблемы с размерностью off_t.


-- 
Игорь Сысоев
http://sysoev.ru
Index: src/http/modules/ngx_http_dav_module.c
===================================================================
--- src/http/modules/ngx_http_dav_module.c      (revision 1228)
+++ src/http/modules/ngx_http_dav_module.c      (working copy)
@@ -248,7 +248,7 @@
     ext.access = dlcf->access;
     ext.time = -1;
     ext.create_path = dlcf->create_full_put_path;
-    ext.delete = 1;
+    ext.delete_file = 1;
     ext.log = r->connection->log;
 
     if (r->headers_in.date) {
Index: src/core/ngx_file.c
===================================================================
--- src/core/ngx_file.c (revision 1228)
+++ src/core/ngx_file.c (working copy)
@@ -554,7 +554,7 @@
 
 failed:
 
-    if (ext->delete) {
+    if (ext->delete_file) {
         if (ngx_delete_file(src->data) == NGX_FILE_ERROR) {
             ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
                           ngx_delete_file_n " \"%s\" failed", src->data);
Index: src/core/ngx_file.h
===================================================================
--- src/core/ngx_file.h (revision 1228)
+++ src/core/ngx_file.h (working copy)
@@ -63,7 +63,7 @@
     ngx_fd_t            fd;
 
     unsigned            create_path:1;
-    unsigned            delete:1;
+    unsigned            delete_file:1;
 
     ngx_log_t          *log;
 } ngx_ext_rename_file_t;


 




Copyright © Lexa Software, 1996-2009.