]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_cmds.c
rename VM_hash to VM_crc16, and the extension to DP_QC_CRC16. That way, it is specifi...
[xonotic/darkplaces.git] / prvm_cmds.c
index a1767c159c19e2a463af49acd9890efd1465f2dd..a5c944c732d0ba88d9f34a8d9c9986258eff8a01 100644 (file)
@@ -3688,7 +3688,15 @@ void VM_buf_del (void)
        VM_SAFEPARMCOUNT(1, VM_buf_del);
        stringbuffer = (prvm_stringbuffer_t *)Mem_ExpandableArray_RecordAtIndex(&prog->stringbuffersarray, (int)PRVM_G_FLOAT(OFS_PARM0));
        if (stringbuffer)
+       {
+               int i;
+               for (i = 0;i < stringbuffer->num_strings;i++)
+                       if (stringbuffer->strings[i])
+                               Mem_Free(stringbuffer->strings[i]);
+               if (stringbuffer->strings)
+                       Mem_Free(stringbuffer->strings);
                Mem_ExpandableArray_FreeRecord(&prog->stringbuffersarray, stringbuffer);
+       }
        else
        {
                VM_Warning("VM_buf_del: invalid buffer %i used in %s\n", (int)PRVM_G_FLOAT(OFS_PARM0), PRVM_NAME);
@@ -3908,6 +3916,7 @@ void VM_bufstr_set (void)
        }
 
        BufStr_Expand(stringbuffer, strindex);
+       stringbuffer->num_strings = max(stringbuffer->num_strings, strindex + 1);
 
        if(stringbuffer->strings[strindex])
                Mem_Free(stringbuffer->strings[strindex]);
@@ -3956,7 +3965,7 @@ void VM_bufstr_add (void)
        }
        order = (int)PRVM_G_FLOAT(OFS_PARM2);
        if(order)
-               strindex = stringbuffer->num_strings++;
+               strindex = stringbuffer->num_strings;
        else
                for (strindex = 0;strindex < stringbuffer->num_strings;strindex++)
                        if (stringbuffer->strings[strindex] == NULL)
@@ -4444,6 +4453,17 @@ void VM_strncasecmp (void)
        }
 }
 
+// #494 float(float caseinsensitive, string s, ...) crc16
+void VM_crc16(void)
+{
+       float insensitive;
+       static char s[VM_STRINGTEMP_LENGTH];
+       VM_SAFEPARMCOUNTRANGE(2, 8, VM_hash);
+       insensitive = PRVM_G_FLOAT(OFS_PARM0);
+       VM_VarString(1, s, sizeof(s));
+       PRVM_G_FLOAT(OFS_RETURN) = (unsigned short) ((insensitive ? CRC_Block_CaseInsensitive : CRC_Block) ((unsigned char *) s, strlen(s)));
+}
+
 void VM_wasfreed (void)
 {
        VM_SAFEPARMCOUNT(1, VM_wasfreed);