Esempio n. 1
0
int add_character(Text *text, char c)
{
	size_t freespace = GAPSIZE(text);
	if (freespace <= 1)
		if (0 != resize_gap(text, RESIZE_BY))
			return -1;
	text->buf[text->gap_start++] = c;

	return 0;
}
Esempio n. 2
0
int add_string(Text *text, char *buf, size_t len)
{
	size_t freespace = GAPSIZE(text);

	if (freespace < len + 1)
		if (0 != resize_gap(text, RESIZE_BY + len))
			return -1;
	memcpy(text->buf + text->gap_start, buf, len);
	text->gap_start += len;

	return 0;
}
Esempio n. 3
0
File: buffer.c Progetto: tj90241/vx
int attach_file(Buffer *buffer, char *filename)
{
	FILE *fp;
	char buf[20];
	size_t nread;
	int ret;
	long file_size;
	char *old_filename = buffer->filename;
	buffer->filename = calloc(1, strlen(filename) + 1);
	if (!buffer->filename) {
		buffer->filename = old_filename;
		return -1;
	}
	strcpy(buffer->filename, filename);
	if (old_filename) {
		free(old_filename);
	}

	fp = fopen(filename, "r");
	if (!fp)
		return -1;

	fseek(fp, 0L, SEEK_END);
	file_size = ftell(fp);
	fseek(fp, 0L, SEEK_SET);
	resize_gap(buffer->text, file_size);

	while ((nread = fread(buf, 1, sizeof buf, fp)) > 0 && !ferror(fp))
		add_string(buffer->text, buf, nread);

	if (ferror(fp)) {
		fclose(fp);
		return -1;
	}

	ret = fclose(fp);
	if (ret) return -1;

	move_cursor_to_beg(buffer->text);

	return 0;
}