All pastes #16576 Raw Edit

protoboch

public c v1 · immutable
#16576 ·published 2005-06-30 22:39 UTC
rendered paste body
#include <stdio.h>#include <stdarg.h>#include <string.h>#define MAX_ARG_SIZE 999#define MAX_PKG_SIZE 4995       /* MAX_ARG * MAX_PKG_SIZE *//* * Protoboch by boch xD * */char *get_size(int size){	char *buff = (char *) malloc( 4 );	memset(buff, 0, 4);	if(size < 10){		sprintf(buff, "00%i", size);	} else if(size > 9 && size < 100){		sprintf(buff, "0%i", size);	} else if(size > 99 && size < 1000){		sprintf(buff, "%i", size);	} else {		printf("Error: arguments cant be bigger than %i\n", MAX_ARG_SIZE);		exit(10);	}	return buff;}char *pack(int args, ...){	va_list pa;	char *arg = (char *) malloc(MAX_ARG_SIZE);	char *pkg = (char *) malloc(MAX_PKG_SIZE);	memset(pkg, 0, MAX_PKG_SIZE);	memset(arg, 0, MAX_ARG_SIZE);	va_start (pa, args);	while (args--){		arg = va_arg (pa, char *);		sprintf(pkg, "%s%s%s", pkg, get_size(strlen(arg)), arg);	}	va_end (pa);	return pkg;}char *unpack(int arg_n, char * pkg){	int c = 0;	int i;	int p = 0;	int carg_n = 0;	char b[3];	char *result = (char *) malloc(MAX_ARG_SIZE);	memset(b, 0, 3);	memset(result, 0, MAX_ARG_SIZE);	for(i = 0; i < strlen(pkg); i++)		if(p < 3){			sprintf(b, "%s%c", b, pkg[i]);			p++;		}		else {			for(c = 0; c < atoi(b); c++)			if(carg_n == arg_n) sprintf(result, "%s%c", result, pkg[(c+i)]);			p = 0;			i += (c-1);			memset(b, 0, 3);			carg_n++;		}	return result;}