105 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
| /******************************************************************************
 | |
|  *
 | |
|  *                Copyright (c) 2017-2019 by Löwenware Ltd
 | |
|  *             Please, refer LICENSE file for legal information
 | |
|  *
 | |
|  ******************************************************************************/
 | |
| 
 | |
| /**
 | |
|  * @file string.c
 | |
|  * @author Ilja Kartašov <ik@lowenware.com>
 | |
|  * @brief cStuff string module implementation
 | |
|  *
 | |
|  * @see https://lowenware.com/
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdarg.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #include "string.h"
 | |
| 
 | |
| int
 | |
| cstuff_strcpy(char **out, const char *in)
 | |
| {
 | |
| 	return cstuff_strncpy(out, in, strlen(in));
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| cstuff_strncpy(char **out, const char *in, int len)
 | |
| {
 | |
| 	char *s;
 | |
|  
 | |
| 	if (!(s = malloc( len + 1 )))
 | |
| 		return -1;
 | |
| 
 | |
| 	strncpy(s, in, len);
 | |
| 	s[len]=0;
 | |
| 
 | |
| 	*out = s;
 | |
| 
 | |
| 	return len;
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| cstuff_strset(char **out, const char *in)
 | |
| {
 | |
| 	return cstuff_strnset(out, in, strlen(in));
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| cstuff_strnset(char **out, const char *in, int len)
 | |
| {
 | |
| 	char *s;
 | |
| 
 | |
| 	if (!(s = realloc(*out, len+1)))
 | |
| 		return -1;
 | |
| 
 | |
| 	strncpy(s, in, len);
 | |
| 	s[len] = 0;
 | |
| 
 | |
| 	*out = s;
 | |
| 
 | |
| 	return len;
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| cstuff_sprintf(char **out, const char *format, ...)
 | |
| {
 | |
| 	int result;
 | |
| 	va_list vl;
 | |
| 
 | |
| 	va_start(vl, format);
 | |
| 	result = cstuff_vsprintf(out, format, vl);
 | |
| 	va_end(vl);
 | |
| 
 | |
| 	return result;
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| cstuff_vsprintf(char **out, const char *format, va_list args)
 | |
| {
 | |
| 	int result;
 | |
| 	va_list vc;
 | |
| 	char tmp, *s;
 | |
| 
 | |
| 	va_copy(vc, args);
 | |
| 	result = vsnprintf(&tmp, 1, format, vc);
 | |
| 	va_end(vc);
 | |
| 
 | |
| 	if (!(s = malloc(result + 1)))
 | |
| 		return -1;
 | |
| 
 | |
| 	*out = s;
 | |
| 	result = vsnprintf(s, result+1, format, args); 
 | |
| 
 | |
| 	return result;
 | |
| }
 | |
| 
 |