Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37566881
en ru br
Репозитории ALT

Группа :: Система/Библиотеки
Пакет: libfann

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: portable-handling-for-va_list.patch
Скачать


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.
diff --git a/fann/src/include/fann_cpp.h b/fann/src/include/fann_cpp.h
index c28caac..643e1a3 100644
--- a/fann/src/include/fann_cpp.h
+++ b/fann/src/include/fann_cpp.h
@@ -955,9 +955,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<const unsigned int *>(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;
         }
@@ -1005,9 +1008,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<const unsigned int *>(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;
         }
@@ -1052,9 +1058,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<const unsigned int *>(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;
         }
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin