/*
 * Set the field buffer to the string that results from processing
 * the given format (fmt) using sprintf.
 */
int
set_field_printf(FIELD *field, int buffer, char *fmt, ...)
{
	int len;
	va_list args;
	
	if (field == NULL)
		return E_BAD_ARGUMENT;

	if (buffer >= field->nbuf)
		return E_BAD_ARGUMENT;

	va_start(args, fmt);
	  /* check for buffer already existing, free the storage */
	if (field->buffers[buffer].allocated != 0)
		free(field->buffers[buffer].string);

	len = vasprintf(&field->buffers[buffer].string, fmt, args);
	va_end(args);
	if (len < 0)
		return E_SYSTEM_ERROR;
	
	field->buffers[buffer].length = len;
	field->buffers[buffer].allocated = len + 1;
	if (((field->opts & O_STATIC) == O_STATIC) && (len > field->cols)
	    && ((field->rows + field->nrows) == 1))
		len = field->cols;

	field->buffers[buffer].string[len] = '\0';
	return field_buffer_init(field, buffer, (unsigned int) len);
}
int
set_field_buffer(FIELD *field, int buffer, const char *value)
{
	unsigned int len;
	int status;
	
	if (field == NULL)
		return E_BAD_ARGUMENT;

	if (buffer >= field->nbuf) /* make sure buffer is valid */
		return E_BAD_ARGUMENT;

	len = (unsigned int) strlen(value);
	if (((field->opts & O_STATIC) == O_STATIC) && (len > field->cols)
	    && ((field->rows + field->nrows) == 1))
		len = field->cols;

#ifdef DEBUG
	if (_formi_create_dbg_file() != E_OK)
		return E_SYSTEM_ERROR;

	fprintf(dbg,
		"set_field_buffer: entry: len = %d, value = %s, buffer=%d\n",
		len, value, buffer);
	fprintf(dbg, "set_field_buffer: entry: string = ");
	if (field->buffers[buffer].string != NULL)
		fprintf(dbg, "%s, len = %d\n", field->buffers[buffer].string,
			field->buffers[buffer].length);
	else
		fprintf(dbg, "(null), len = 0\n");
	fprintf(dbg, "set_field_buffer: entry: lines.len = %d\n",
		field->alines[0].length);
#endif
	
	if ((field->buffers[buffer].string =
	     (char *) realloc(field->buffers[buffer].string,
			      (size_t) len + 1)) == NULL)
		return E_SYSTEM_ERROR;

	strlcpy(field->buffers[buffer].string, value, (size_t) len + 1);
	field->buffers[buffer].length = len;
	field->buffers[buffer].allocated = len + 1;
	status = field_buffer_init(field, buffer, len);

#ifdef DEBUG
	fprintf(dbg, "set_field_buffer: exit: len = %d, value = %s\n",
		len, value);
	fprintf(dbg, "set_field_buffer: exit: string = %s, len = %d\n",
		field->buffers[buffer].string, field->buffers[buffer].length);
	fprintf(dbg, "set_field_buffer: exit: lines.len = %d\n",
		field->alines[0].length);
#endif

	return status;
}
Esempio n. 3
0
int
set_field_buffer(FIELD *field, int buffer, const char *value)
{
	unsigned int len;
	int status;
	
	if (field == NULL)
		return E_BAD_ARGUMENT;

	if (buffer >= field->nbuf) /* make sure buffer is valid */
		return E_BAD_ARGUMENT;

	len = (unsigned int) strlen(value);
	if (((field->opts & O_STATIC) == O_STATIC) && (len > field->cols)
	    && ((field->rows + field->nrows) == 1))
		len = field->cols;

	_formi_dbg_printf( "%s: len = %d, value = %s, buffer=%d\n", __func__,
	    len, value, buffer);
	if (field->buffers[buffer].string != NULL)
		_formi_dbg_printf("%s: string=%s, len = %d\n", __func__,
		    field->buffers[buffer].string,
		    field->buffers[buffer].length);
	else
		_formi_dbg_printf("%s: string=(null), len = 0\n", __func__);
	_formi_dbg_printf("%s: lines.len = %d\n", __func__,
	    field->alines[0].length);
	
	if ((field->buffers[buffer].string = realloc(
	    field->buffers[buffer].string, (size_t) len + 1)) == NULL)
		return E_SYSTEM_ERROR;

	snprintf(field->buffers[buffer].string, len + 1, "%s", value);
	field->buffers[buffer].length = len;
	field->buffers[buffer].allocated = len + 1;
	status = field_buffer_init(field, buffer, len);

	_formi_dbg_printf("%s: len = %d, value = %s\n", __func__, len, value);
	_formi_dbg_printf("%s: string = %s, len = %d\n", __func__,
	    field->buffers[buffer].string, field->buffers[buffer].length);
	_formi_dbg_printf("%s: lines.len = %d\n", __func__,
		field->alines[0].length);

	return status;
}