Added string_set()
This commit is contained in:
parent
1768cc2b5b
commit
61bb91cb59
|
@ -30,6 +30,9 @@ String * string_new_append(String const * string, ...);
|
||||||
String * string_new_length(String const * string, size_t length);
|
String * string_new_length(String const * string, size_t length);
|
||||||
void string_delete(String * string);
|
void string_delete(String * string);
|
||||||
|
|
||||||
|
/* accessors */
|
||||||
|
int string_set(String ** string, String const * string2);
|
||||||
|
|
||||||
/* returns */
|
/* returns */
|
||||||
size_t string_length(String const * string);
|
size_t string_length(String const * string);
|
||||||
|
|
||||||
|
|
59
src/string.c
59
src/string.c
|
@ -28,12 +28,10 @@
|
||||||
/* string_new */
|
/* string_new */
|
||||||
String * string_new(String const * string)
|
String * string_new(String const * string)
|
||||||
{
|
{
|
||||||
String * ret;
|
String * ret = NULL;
|
||||||
size_t length = string_length(string);
|
|
||||||
|
|
||||||
if((ret = object_new(length + 1)) == NULL)
|
if(string_set(&ret, string) != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
strcpy(ret, string);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,17 +81,45 @@ void string_delete(String * string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* accessors */
|
||||||
|
/* string_set */
|
||||||
|
int string_set(String ** string, String const * string2)
|
||||||
|
{
|
||||||
|
size_t len = string_length(string2) + 1;
|
||||||
|
|
||||||
|
if(object_resize((Object**)string, len) != 0)
|
||||||
|
return 1;
|
||||||
|
strcpy(*string, string2);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* returns */
|
||||||
|
/* string_length */
|
||||||
|
size_t string_length(String const * string)
|
||||||
|
{
|
||||||
|
size_t length;
|
||||||
|
|
||||||
|
for(length = 0; *string != '\0'; string++)
|
||||||
|
length++;
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* useful */
|
/* useful */
|
||||||
/* string_append */
|
/* string_append */
|
||||||
int string_append(String ** string, String const * append)
|
int string_append(String ** string, String const * append)
|
||||||
{
|
{
|
||||||
char * p;
|
size_t slength = string_length(*string);
|
||||||
size_t length = string_length(*string);
|
size_t alength;
|
||||||
|
|
||||||
if((p = realloc(*string, length + string_length(append) + 1)) == NULL)
|
if(append == NULL)
|
||||||
|
return error_set_code(1, "%s", strerror(EINVAL));
|
||||||
|
if((alength = string_length(append)) == 0)
|
||||||
|
return 0;
|
||||||
|
if(object_resize((Object**)string, slength + alength + 1) != 0)
|
||||||
return 1;
|
return 1;
|
||||||
*string = p;
|
strcpy(*string + slength, append);
|
||||||
strcpy(p + length, append);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,18 +249,3 @@ ssize_t string_index(String const * string, String const * key)
|
||||||
return -1;
|
return -1;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* string_length */
|
|
||||||
size_t string_length(String const * string)
|
|
||||||
{
|
|
||||||
String const * s = string;
|
|
||||||
size_t length;
|
|
||||||
|
|
||||||
for(length = 0; *s != '\0'; s++)
|
|
||||||
length++;
|
|
||||||
#ifdef DEBUG
|
|
||||||
fprintf(stderr, "DEBUG: %s(%s) => %zu\n", __func__, string, length);
|
|
||||||
#endif
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user