Переглянути джерело

Improve portability by avoiding usage of VLAs.

Fixes #2
Philip Rideout 10 роки тому
батько
коміт
70b1d26ea0
2 змінених файлів з 8 додано та 4 видалено
  1. 7 3
      par_shapes.h
  2. 1 1
      test/CMakeLists.txt

+ 7 - 3
par_shapes.h

@@ -1104,7 +1104,8 @@ static void par_shapes__connect(par_shapes_mesh* scene,
 par_shapes_mesh* par_shapes_create_lsystem(char const* text, int slices,
     int maxdepth)
 {
-    char program[strlen(text) + 1];
+    char* program;
+    program = PAR_MALLOC(char, strlen(text) + 1);
 
     // The first pass counts the number of rules and commands.
     strcpy(program, text);
@@ -1126,8 +1127,8 @@ par_shapes_mesh* par_shapes_create_lsystem(char const* text, int slices,
     }
 
     // Allocate space.
-    par_shapes__rule rules[nrules];
-    par_shapes__command commands[ncommands];
+    par_shapes__rule* rules = PAR_MALLOC(par_shapes__rule, nrules);
+    par_shapes__command* commands = PAR_MALLOC(par_shapes__command, ncommands);
 
     // Initialize the entry rule.
     par_shapes__rule* current_rule = &rules[0];
@@ -1280,6 +1281,9 @@ par_shapes_mesh* par_shapes_create_lsystem(char const* text, int slices,
         }
     }
     free(stack);
+    free(program);
+    free(rules);
+    free(commands);
     return scene;
 }
 

+ 1 - 1
test/CMakeLists.txt

@@ -4,7 +4,7 @@ find_package(PkgConfig REQUIRED)
 pkg_search_module(CURL REQUIRED libcurl)
 
 set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-std=c11 -Wall")
-set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wall")
+set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wvla -Wall")
 
 include_directories(.. ${CURL_INCLUDE_DIRS})