Added string_set()

This commit is contained in:
Pierre Pronchery 2009-08-02 03:03:47 +00:00
parent 1768cc2b5b
commit 61bb91cb59
2 changed files with 38 additions and 24 deletions

View File

@ -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);

View File

@ -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;
}