From: Christian Kastner Date: Thu, 1 Jul 2010 01:02:47 +0200 Subject: [PATCH] Portable handling for va_list The current code wrongly assumes va_list is always implemented as an array. va_list however is an opaque type, and may also be implemented as a struct, for example. This patch implements handling of va_list in a platform-independent way, fixing a FTBFS on alpha and armel. Forwarded: no Last-Update: 2010-07-01 --- src/include/fann_cpp.h | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/include/fann_cpp.h b/src/include/fann_cpp.h index eb647af..bf6e75b 100644 --- a/src/include/fann_cpp.h +++ b/src/include/fann_cpp.h @@ -916,9 +916,12 @@ public: bool create_standard(unsigned int num_layers, ...) { va_list layers; + unsigned int arr[num_layers]; + va_start(layers, num_layers); - bool status = create_standard_array(num_layers, - reinterpret_cast(layers)); + for (unsigned int ii = 0; ii < num_layers; ii++) + arr[ii] = va_arg(layers, unsigned int); + bool status = create_standard_array(num_layers, arr); va_end(layers); return status; } @@ -966,9 +969,12 @@ public: bool create_sparse(float connection_rate, unsigned int num_layers, ...) { va_list layers; + unsigned int arr[num_layers]; + va_start(layers, num_layers); - bool status = create_sparse_array(connection_rate, num_layers, - reinterpret_cast(layers)); + for (unsigned int ii = 0; ii < num_layers; ii++) + arr[ii] = va_arg(layers, unsigned int); + bool status = create_sparse_array(connection_rate, num_layers, arr); va_end(layers); return status; } @@ -1013,9 +1019,12 @@ public: bool create_shortcut(unsigned int num_layers, ...) { va_list layers; + unsigned int arr[num_layers]; + va_start(layers, num_layers); - bool status = create_shortcut_array(num_layers, - reinterpret_cast(layers)); + for (unsigned int ii = 0; ii < num_layers; ii++) + arr[ii] = va_arg(layers, unsigned int); + bool status = create_shortcut_array(num_layers, arr); va_end(layers); return status; } --