]> git.mxchange.org Git - simgear.git/blobdiff - simgear/nasal/vector.c
Alas. Fix #pragma magic for GCC <= 4.5.
[simgear.git] / simgear / nasal / vector.c
index df20c1385584e3ddbef2f8080f74eeba0740ab12..1a7546aeb2cbc4dfd9eae7fddfcf12c10b995e26 100644 (file)
@@ -69,16 +69,21 @@ int naVec_append(naRef vec, naRef o)
     return 0;
 }
 
-void naVec_setsize(naRef vec, int sz)
+void naVec_setsize(naContext c, naRef vec, int sz)
 {
-    int i;
-    struct VecRec* v = PTR(vec).vec->rec;
-    struct VecRec* nv = naAlloc(sizeof(struct VecRec) + sizeof(naRef) * sz);
-    nv->size = sz;
-    nv->alloced = sz;
-    for(i=0; i<sz; i++)
-        nv->array[i] = (v && i < v->size) ? v->array[i] : naNil();
-    naGC_swapfree((void*)&(PTR(vec).vec->rec), nv);
+    if (sz < 0)
+        naRuntimeError(c, "size cannot be negative");
+    else
+    {
+        int i;
+        struct VecRec* v = PTR(vec).vec->rec;
+        struct VecRec* nv = naAlloc(sizeof(struct VecRec) + sizeof(naRef) * sz);
+        nv->size = sz;
+        nv->alloced = sz;
+        for(i=0; i<sz; i++)
+            nv->array[i] = (v && i < v->size) ? v->array[i] : naNil();
+        naGC_swapfree((void*)&(PTR(vec).vec->rec), nv);
+    }
 }
 
 naRef naVec_removelast(naRef vec)