- string->len = len;
- string->str [len] = 0;
- return string;
-}
-
-GString *
-g_string_prepend (GString *string, const gchar *val)
-{
- int vallen;
- g_return_val_if_fail (string != NULL, string);
- g_return_val_if_fail (val != NULL, string);
-
- vallen = strlen (val);
-
- if ((string->len + vallen + 1) < string->allocated_len){
- memmove (string->str+vallen, string->str, string->len+1);
- memcpy (string->str, val, vallen);
- } else {
- /*
- * Add some extra space, so we do not reallocate too often
- * maybe we should centralize this decision somewhere else.
- */
- char *new;
- int nl = MAX (string->len + vallen + 1, string->allocated_len);
- nl = nl < 8192 ? (nl * 3) : nl + 1024;
-
- new = malloc (nl);
- /* Failure */
- if (new == NULL) {
- g_error ("No more memory");
- return string;
- }
- strcpy (new, val);
- /* To cope with embedded nulls */
- memcpy (new + vallen, string->str, string->len);
- string->len = string->len + vallen;
- g_free (string->str);
- string->str = new;
- string->allocated_len = nl;