--- myprintf.c.orig	2004-11-29 08:00:18.000000000 -0500
+++ myprintf.c	2004-11-29 09:04:14.000000000 -0500
@@ -4,10 +4,10 @@
 #include <stdlib.h>	// malloc
 
 
-void leggtil_streng(char *, const char *);
-void leggtil_char(char *, char);
-int leggtil_int(char *, int, int);
-int leggtil_hex(char *, int, int);
+void leggtil_streng(char **, const char *);
+void leggtil_char(char **, char);
+int leggtil_int(char **, int, int);
+int leggtil_hex(char **, int, int);
 
 
 
@@ -25,6 +25,8 @@
 	printf("malloc feilet!\n");
 	exit(1);
     }
+    ut_tekst[0] = 0;
+
     plassering = ut_tekst;
 
     va_start(ap, streng);
@@ -39,9 +41,9 @@
 	    // øker man pekeren med 1
 	    // for å finne tegnet.
 
-	if ( plassering != ut_tekst ) {
-	    printf("ut_streng flyttet\n");
-	}
+//	if ( plassering != ut_tekst ) {
+//	    printf("ut_streng flyttet\n");
+//	}
 	   if( *streng == '%' ) {
 	       streng++;
 	       switch(*streng) {
@@ -52,7 +54,7 @@
 #ifdef DEBUG
 			printf("%s", tekst);
 #endif
-			leggtil_streng(ut_tekst, tekst);
+			leggtil_streng(&ut_tekst, tekst);
 			break;
 		    // føye til et tall
 		    case 'd':
@@ -62,23 +64,23 @@
 #endif
 
 			if ( tall < 0 ) {
-			    leggtil_char(ut_tekst, '-');
+			    leggtil_char(&ut_tekst, '-');
 			    tall = tall * (-1);
 			}
-			leggtil_int(ut_tekst, tall, 1);
+			leggtil_int(&ut_tekst, tall, 1);
 			break;
 
 		    // føye til et tall i hex
 		    case 'x':
 			tall = va_arg(ap, int); // hente inn tallet
 			if ( tall < 0 ) {
-			    leggtil_char(ut_tekst, '-');
+			    leggtil_char(&ut_tekst, '-');
 			    tall = tall * (-1);
 			}
 #ifdef DEBUG
 			printf("%x", tall);
 #endif
-			leggtil_hex(ut_tekst, tall, 1);
+			leggtil_hex(&ut_tekst, tall, 1);
 			break;
 
 		    // føye til et vanlig tegn
@@ -87,7 +89,7 @@
 #ifdef DEBUG
 			printf("%c", tegn);
 #endif
-			leggtil_char(ut_tekst, tegn); // legge til tegnet
+			leggtil_char(&ut_tekst, tegn); // legge til tegnet
 			break;
 	       }//switch
 	   }//if
@@ -97,7 +99,7 @@
 #ifdef DEBUG
 	       printf("%c", *streng);
 #endif
-	       leggtil_char(ut_tekst, *streng);
+	       leggtil_char(&ut_tekst, *streng);
 	   }
 	   streng++;
     }
@@ -116,36 +118,36 @@
    append char
 */
 
-void leggtil_char(char *ut_streng, char leggtil) {
+void leggtil_char(char **ut_streng, char leggtil) {
 
-    int lengde = strlen(ut_streng);
-    if ( (realloc(ut_streng, (lengde * sizeof(char)) + sizeof(char) * 2)) == NULL) {
+    int lengde = strlen(*ut_streng);
+    if ( (*ut_streng = realloc(*ut_streng, (lengde * sizeof(char)) + sizeof(char) * 2)) == NULL) {
 	printf("realloc failed\n");
 	exit(1);
     }
 
-    if ( ut_streng == NULL ) {
+    if ( *ut_streng == NULL ) {
 	printf("leggtil_char(): realloc feilet!\n");
 	exit(1);
     }
 
-    ut_streng[strlen(ut_streng)] = leggtil;
-    ut_streng[strlen(ut_streng) + 1] = '\0';
+    (*ut_streng)[lengde] = leggtil;
+    (*ut_streng)[lengde + 1] = '\0';
 }
 
 
 /*
    append string
 */
-void leggtil_streng(char *ut_tekst, const char *legg_til) {
+void leggtil_streng(char **ut_tekst, const char *legg_til) {
 
-    realloc(ut_tekst, strlen(ut_tekst) + strlen(legg_til) + 1);
-    if ( ut_tekst == NULL ) {
+    *ut_tekst = realloc(*ut_tekst, strlen(*ut_tekst) + strlen(legg_til) + 1);
+    if ( *ut_tekst == NULL ) {
 	printf("leggtil_streng realloc feilet!\n");
 	exit(2);
     }
 
-    strcat(ut_tekst, legg_til);
+    strcat(*ut_tekst, legg_til);
     
 }
 
@@ -154,7 +156,7 @@
    recursive
 */
 
-int leggtil_int(char *a, int verdi, int sum) {
+int leggtil_int(char **a, int verdi, int sum) {
 
     int tmp = verdi;
     int antall = 0;
@@ -181,7 +183,7 @@
    recursive
 */
 
-int leggtil_hex(char *a, int verdi, int sum) {
+int leggtil_hex(char **a, int verdi, int sum) {
     int tmp = verdi;
     int antall = 0;
     char leggtil;
