summaryrefslogblamecommitdiffstats
path: root/libsmartcols/src/symbols.c
blob: 344ddcf53aeff1c88e8d8ee3006a8821a5e55da5 (plain) (tree)






































































































                                                                              
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include "smartcolsP.h"

struct libscols_symbols *scols_new_symbols(void)
{
	return calloc(1, sizeof(struct libscols_symbols));
}

int scols_symbols_set_branch(struct libscols_symbols *sb, const char *str)
{
	char *p = NULL;

	assert(sb);

	if (!sb)
		return -EINVAL;
	if (str) {
		p = strdup(str);
		if (!p)
			return -ENOMEM;
	}
	free(sb->branch);
	sb->branch = p;
	return 0;
}

int scols_symbols_set_vertical(struct libscols_symbols *sb, const char *str)
{
	char *p = NULL;

	assert(sb);

	if (!sb)
		return -EINVAL;
	if (str) {
		p = strdup(str);
		if (!p)
			return -ENOMEM;
	}
	free(sb->vert);
	sb->vert = p;
	return 0;
}

int scols_symbols_set_right(struct libscols_symbols *sb, const char *str)
{
	char *p = NULL;

	assert(sb);

	if (!sb)
		return -EINVAL;
	if (str) {
		p = strdup(str);
		if (!p)
			return -ENOMEM;
	}
	free(sb->right);
	sb->right = p;
	return 0;
}


struct libscols_symbols *scols_copy_symbols(const struct libscols_symbols *sb)
{
	struct libscols_symbols *ret;
	int rc;

	assert(sb);
	if (!sb)
		return NULL;

	ret = scols_new_symbols();
	if (!ret)
		return NULL;

	rc = scols_symbols_set_branch(ret, sb->branch);
	if (!rc)
		rc = scols_symbols_set_vertical(ret, sb->vert);
	if (!rc)
		rc = scols_symbols_set_right(ret, sb->right);
	if (!rc)
		return ret;

	scols_free_symbols(ret);
	return NULL;

}

void scols_free_symbols(struct libscols_symbols *sb)
{
	if (!sb)
		return;

	free(sb->branch);
	free(sb->vert);
	free(sb->right);
	free(sb);
}