view src/strgen.c @ 0:21ce01de8109

Initial revision
author mmj
date Thu, 22 Apr 2004 04:02:09 +1000
parents
children 762570b02394
line wrap: on
line source

/* Copyright (C) 2003 Mads Martin Joergensen <mmj at mmj.dk>
 *
 * $Id$
 *
 * This file is redistributable under version 2 of the GNU General
 * Public License as described at http://www.gnu.org/licenses/gpl.txt
 */

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

#include "strgen.h"
#include "wrappers.h"

char *random_str()
{
	size_t len = 16;
	char *dest = malloc(len);

	snprintf(dest, len, "%d", random_int());

	return dest;
}

char *random_plus_addr(const char *addr)
{
	size_t len = strlen(addr) + 16;
	char *dest = malloc(len);
	char *atsign;
	char *tmpstr;

	tmpstr = malloc(len);
	snprintf(tmpstr, len, "%s", addr);

	atsign = index(tmpstr, '@');
	*atsign = '=';

	snprintf(dest, len, "%d-%s", random_int(), tmpstr);

	free(tmpstr);
	
	return dest;
}

char *headerstr(const char *headertoken, const char *str)
{
	size_t len = strlen(headertoken) + strlen(str) + 2;
	char *dest = malloc(len);

	snprintf(dest, len, "%s%s\n", headertoken, str);

	return dest;
}

char *gendirname(const char *listdir, const char *subdir, const char *filename)
{
	size_t len = strlen(listdir) + strlen(subdir) + strlen(filename) + 1;
	char *dest = malloc(len);

	snprintf(dest, len, "%s%s%s", listdir, subdir, filename);

	return dest;
}
	
char *genfilename(const char *dir, const char *file)
{
	size_t len = strlen(dir) + strlen(file) + 1;
	char *dest = malloc(len);

	snprintf(dest, len, "%s%s", dir, file);
	
	return dest;
}

char *genlistname(const char *listaddr)
{
	size_t len;
	char *dest, *atsign;

	atsign = index(listaddr, '@');
	len = atsign - listaddr + 1;
	dest = malloc(len);
	
	snprintf(dest, len, "%s", listaddr);

	return dest;
}

char *genlistfqdn(const char *listaddr)
{
	size_t len;
	char *dest, *atsign;

	atsign = index(listaddr, '@');
	len = strlen(listaddr) - (atsign - listaddr);
	dest = malloc(len);
	snprintf(dest, len, "%s", atsign + 1);

	return dest;
}

char *concatstr(int count, ...)
{
	va_list arg;
        const char *str;
        int i;
        size_t len = 0;
        char *retstr;

        va_start(arg, count);

        for(i = 0; i < count; i++) {
                str = va_arg(arg, const char *);
                if(str)
                        len += strlen(str);
        }

        retstr = malloc(len + 1);
        retstr[0] = retstr[len] = 0;

        va_start(arg, count);

        for(i = 0; i < count; i++) {
                str = va_arg(arg, const char *);
                if(str)
                        strcat(retstr, str);
        }

        va_end(arg);

        return retstr;
}