From d1e2cc3ea807ffb572d8bb0d6a0b5262ad283434 Mon Sep 17 00:00:00 2001
From: florian <f.spreckelsen@inidscale.com>
Date: Thu, 19 Aug 2021 15:45:54 +0200
Subject: [PATCH] DRAFT: Comment broken function and add TODOs

---
 include/ccaosdb.h     |  2 +-
 src/ccaosdb.cpp       | 34 +++++++++++++++++++---------------
 test/test_ccaosdb.cpp | 17 +++++++++--------
 3 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/include/ccaosdb.h b/include/ccaosdb.h
index 6a3429c..70a1284 100644
--- a/include/ccaosdb.h
+++ b/include/ccaosdb.h
@@ -409,7 +409,7 @@ int caosdb_entity_property_get_double_list_value(
 int caosdb_entity_property_get_boolean_list_value(
   caosdb_entity_property *property, bool *out);
 int caosdb_entity_property_get_string_list_value(
-  caosdb_entity_property *property, char *out[]);
+  caosdb_entity_property *property, char ***out);
 int caosdb_entity_property_get_value_list_length(
   caosdb_entity_property *property, int *out);
 
diff --git a/src/ccaosdb.cpp b/src/ccaosdb.cpp
index 025ae34..1443141 100644
--- a/src/ccaosdb.cpp
+++ b/src/ccaosdb.cpp
@@ -845,21 +845,25 @@ ERROR_RETURN_CODE(GENERIC_ERROR,
                   })
 CAOSDB_PROPERTY_GET(string_value, GetValue().AsString)
 
-ERROR_RETURN_CODE(GENERIC_ERROR,
-                  int caosdb_entity_property_get_string_list_value(
-                    caosdb_entity_property *property, char *out[]),
-                  {
-                    auto *wrapped_property = WRAPPED_PROPERTY_CAST(property);
-                    auto value_list = wrapped_property->GetValue().AsList();
-		    char *tmp;
-		    int i = 0;
-                    for (const auto elt : value_list) {
-		      tmp = (char *)(sizeof(char) * elt.AsString().length());
-		      strcpy(tmp, elt.AsString().c_str());
-		      out[i++] = tmp;
-                    }
-                    return 0;
-                  })
+// TODO(fspreck) Fix this somehow. It segfaults. Bleh.
+// ERROR_RETURN_CODE(GENERIC_ERROR,
+//                   int caosdb_entity_property_get_string_list_value(
+//                     caosdb_entity_property *property, char ***out),
+//                   {
+//                     auto *wrapped_property = WRAPPED_PROPERTY_CAST(property);
+//                     auto value_list = wrapped_property->GetValue().AsList();
+//                     delete[] * out;
+//                     std::vector<char *> out_list;
+//                     char *tmp;
+//                     out_list.reserve(value_list.size());
+//                     for (size_t i = 0; i < value_list.size(); i++) {
+//                       tmp = new char[value_list[i].AsString().size() + 1];
+//                       strcpy(tmp, value_list[i].AsString().c_str());
+//                       out_list.push_back(tmp);
+//                     }
+//                     *out = &out_list[0];
+//                     return 0;
+//                   })
 
 ERROR_RETURN_CODE(GENERIC_ERROR,
                   int caosdb_entity_property_get_value_list_length(
diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp
index e33b8f4..6408aba 100644
--- a/test/test_ccaosdb.cpp
+++ b/test/test_ccaosdb.cpp
@@ -291,14 +291,15 @@ TEST_F(test_ccaosdb, test_list_property) {
   EXPECT_EQ(return_code, 0);
   EXPECT_EQ(*length, 3);
 
-  // TODO(fspreck) get and compare values in list
-  char *out_list[*length]; // NOLINT
-  return_code =
-    caosdb_entity_property_get_string_list_value(&property, out_list); // NOLINT
-  EXPECT_EQ(return_code, 0);
-  for (int i = 0; i < *length; i++) {
-    EXPECT_EQ(strcmp(value_list[i], out_list[i]), 0); // NOLINT
-  }
+  // TODO(fspreck) get and compare values in list. Segfaults as it is right now.
+  // char **out_list = nullptr; // NOLINT
+  // std::cout << "Getting list values" << std::endl;
+  // return_code =
+  //   caosdb_entity_property_get_string_list_value(&property, &out_list);
+  // EXPECT_EQ(return_code, 0);
+  // for (int i = 0; i < *length; i++) {
+  //   EXPECT_EQ(strcmp(value_list[i], out_list[i]), 0); // NOLINT
+  // }
 
   return_code = caosdb_entity_delete_property(&property);
   EXPECT_EQ(return_code, 0);
-- 
GitLab