1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/*
double_whitespaces:
Copy the "msg" buffer of size "size" into the "dest" buffer,
while doubling any blank character found in the source buffer.
Returns number of wrote bytes (whithout the ending null char)
or -1 if an error appears.
*/
int double_whitespaces(char *msg, int size, char *dest)
{
int ret = -1;
char *ptr , *ptr_buf;
char *buf;
buf = calloc(2 , size+1);
if (buf) // memory allocation is OK
{
ret = 0;
ptr = msg;
ptr_buf = buf;
while (ptr < msg + size)
{
if (*ptr == '%') // % char is forbidden
{
ret = -1;
break;
}
if (*ptr == ' ')
{
*ptr_buf++ = ' ';
*ptr_buf++ = ' ';
}
else
{
*ptr_buf++ = *ptr;
}
ptr++;
}
if (ret == 0)
{
ret = (int) (ptr_buf - buf);
memcpy(dest, buf, ret + 1);
}
free(buf);
}
return ret;
} |
Partager