[PATCH #45] Fixed uninitialized buffer in case of 0 dim and improved

efficiency in other cases.
This commit is contained in:
Jim Monte 2019-05-01 16:46:50 +02:00 committed by Holger Vogt
parent 6b6281d888
commit 282b53d51e
2 changed files with 25 additions and 14 deletions

View File

@ -38,24 +38,35 @@ dimstring(int *data, int length, char *retstring)
/*
* Create a string of the form "[12][1][10]".
* Create a string of the form "[12][1][10]" in retstring.
*
* Parameters
* dim_data: Array of sizes of dimensions, [12, 1, 10] for the example
* n_dim: Number of elements in the array, 3 in the example
* retstring: Address of buffer where the string is returned.
* Remarks
* It is assumed that the buffer in retstring is large enough, which for
* MAXDIMS, would require MAXDIMS * 12 + 1 bytes in the worst case assuming
* 32-bit ints. A looser but more general bound only assuming 8-bit bytes
* would be MAXDIMS * 3 * sizeof(int) + 1.
*/
void
indexstring(int *data, int length, char *retstring)
indexstring(const int *dim_data, int n_dim, char *retstring)
{
/* Handle case of no dimensions */
if (dim_data == (int *) NULL || n_dim < 1) {
*retstring = '\0';
return;
}
/* Append each dimension */
int i;
char buf[BSIZE_SP];
for (i = 0; i < n_dim; i++) {
retstring += sprintf(retstring, "[%d]", dim_data[i]);
}
} /* end of function indexstring */
if (!data || length < 1)
retstring = "";
buf[0] = '\0';
for (i = 0; i < length; i++)
sprintf(buf + strlen(buf), "[%d]", data[i]);
strcpy(retstring, buf);
}
/*

View File

@ -7,7 +7,7 @@
#define ngspice_DIMENS_H
void dimstring(int *data, int length, char *retstring);
void indexstring(int *data, int length, char *retstring);
void indexstring(const int *dim_data, int n_dim, char *retstring);
int incindex(int *counts, int numcounts, int *dims, int numdims);
int emptydims(int *data, int length);
int atodims(char *p, int *data, int *outlength);