|  | @@ -62,10 +62,22 @@ void add_value(JsonEncoder* this, char* str){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void add_string(JsonEncoder* this, char* key, char* val){
 | 
	
		
			
				|  |  |      //Creation chaine
 | 
	
		
			
				|  |  | -    int length = strlen(key) + strlen(val) + 4 + 2 + 1; //clef + val + 4 guillemet + ": " + \0
 | 
	
		
			
				|  |  | +    int index = 0, length = strlen(key) + strlen(val) + 4 + 2 + 1; //clef + val + 4 guillemet + ": " + \0
 | 
	
		
			
				|  |  |      char* str = malloc(length * sizeof(char)); 
 | 
	
		
			
				|  |  |      memset(str, 0, length);
 | 
	
		
			
				|  |  | -    sprintf(str, "\"%s\": \"%s\"", key, val);
 | 
	
		
			
				|  |  | +    //Copie
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(key); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = key[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    str[index++] = ':';
 | 
	
		
			
				|  |  | +    str[index++] = ' ';
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(val); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = val[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  |      //Ajout
 | 
	
		
			
				|  |  |      add_value(this, str);
 | 
	
		
			
				|  |  |      free(str);
 | 
	
	
		
			
				|  | @@ -76,21 +88,44 @@ void add_number(JsonEncoder* this, char* key, double val, int ndigit){
 | 
	
		
			
				|  |  |      char nombre[20];
 | 
	
		
			
				|  |  |      ftoa(val, nombre, ndigit);
 | 
	
		
			
				|  |  |      //Creation chaine
 | 
	
		
			
				|  |  | -    int length = strlen(key) + strlen(nombre) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  | +    int index = 0, length = strlen(key) + strlen(nombre) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  |      char* str = malloc(length * sizeof(char));
 | 
	
		
			
				|  |  |      memset(str, 0, length);
 | 
	
		
			
				|  |  | -    sprintf(str, "\"%s\": %s", key, nombre);
 | 
	
		
			
				|  |  | +    //Copie
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(key); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = key[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    str[index++] = ':';
 | 
	
		
			
				|  |  | +    str[index++] = ' ';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(nombre); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = nombre[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      //Ajout
 | 
	
		
			
				|  |  |      add_value(this, str);
 | 
	
		
			
				|  |  |      free(str);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void add_integer(JsonEncoder* this, char* key, int val){
 | 
	
		
			
				|  |  | +    //Double en string
 | 
	
		
			
				|  |  | +    char nombre[20];
 | 
	
		
			
				|  |  | +    snprintf(nombre, 20, "%d", val);
 | 
	
		
			
				|  |  |      //Creation chaine
 | 
	
		
			
				|  |  | -    int length = strlen(key) + ceil(val/10.0) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  | -    char* str = malloc(length * sizeof(char)); 
 | 
	
		
			
				|  |  | +    int index = 0, length = strlen(key) + strlen(nombre) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  | +    char* str = malloc(length * sizeof(char));
 | 
	
		
			
				|  |  |      memset(str, 0, length);
 | 
	
		
			
				|  |  | -    sprintf(str, "\"%s\": %d", key, val);
 | 
	
		
			
				|  |  | +    //Copie
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(key); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = key[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    str[index++] = ':';
 | 
	
		
			
				|  |  | +    str[index++] = ' ';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(nombre); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = nombre[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      //Ajout
 | 
	
		
			
				|  |  |      add_value(this, str);
 | 
	
		
			
				|  |  |      free(str);
 | 
	
	
		
			
				|  | @@ -105,10 +140,20 @@ void add_boolean(JsonEncoder* this, char* key, boolean val){
 | 
	
		
			
				|  |  |          strcpy(bool, "false");
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      //Creation chaine
 | 
	
		
			
				|  |  | -    int length = strlen(key) + strlen(bool) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  | +    int index = 0, length = strlen(key) + strlen(bool) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  |      char* str = malloc(length * sizeof(char));
 | 
	
		
			
				|  |  |      memset(str, 0, length);
 | 
	
		
			
				|  |  | -    sprintf(str, "\"%s\": %s", key, bool);
 | 
	
		
			
				|  |  | +    //Copie
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(key); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = key[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    str[index++] = ':';
 | 
	
		
			
				|  |  | +    str[index++] = ' ';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(bool); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = bool[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      //Ajout
 | 
	
		
			
				|  |  |      add_value(this, str);
 | 
	
		
			
				|  |  |      free(str);
 | 
	
	
		
			
				|  | @@ -123,10 +168,20 @@ void add_array(JsonEncoder* this, char* key, JsonArray* val){
 | 
	
		
			
				|  |  |      char* json;
 | 
	
		
			
				|  |  |      json = json_encode_array(val);
 | 
	
		
			
				|  |  |      //Creation chaine
 | 
	
		
			
				|  |  | -    int length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  | +    int index = 0, length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  |      char* str = malloc(length * sizeof(char));
 | 
	
		
			
				|  |  |      memset(str, 0, length);
 | 
	
		
			
				|  |  | -    sprintf(str, "\"%s\": %s", key, json);
 | 
	
		
			
				|  |  | +    //Copie
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(key); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = key[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    str[index++] = ':';
 | 
	
		
			
				|  |  | +    str[index++] = ' ';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(json); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = json[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      //Ajout
 | 
	
		
			
				|  |  |      add_value(this, str);
 | 
	
		
			
				|  |  |      free(str);
 | 
	
	
		
			
				|  | @@ -138,10 +193,20 @@ void add_object(JsonEncoder* this, char* key, JsonEncoder* val){
 | 
	
		
			
				|  |  |      char* json;
 | 
	
		
			
				|  |  |      json = json_encode(val);
 | 
	
		
			
				|  |  |      //Creation chaine
 | 
	
		
			
				|  |  | -    int length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  | +    int index = 0, length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
 | 
	
		
			
				|  |  |      char* str = malloc(length * sizeof(char));
 | 
	
		
			
				|  |  |      memset(str, 0, length);
 | 
	
		
			
				|  |  | -    sprintf(str, "\"%s\": %s", key, json);
 | 
	
		
			
				|  |  | +    //Copie
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(key); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = key[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    str[index++] = '"';
 | 
	
		
			
				|  |  | +    str[index++] = ':';
 | 
	
		
			
				|  |  | +    str[index++] = ' ';
 | 
	
		
			
				|  |  | +    for(int i = 0; i < strlen(json); i++, index++){
 | 
	
		
			
				|  |  | +        str[index] = json[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      //Ajout
 | 
	
		
			
				|  |  |      add_value(this, str);
 | 
	
		
			
				|  |  |      free(str);
 | 
	
	
		
			
				|  | @@ -150,6 +215,7 @@ void add_object(JsonEncoder* this, char* key, JsonEncoder* val){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  char* json_encode(JsonEncoder* this){
 | 
	
		
			
				|  |  |      boolean first = true;
 | 
	
		
			
				|  |  | +    int length, index = 0;
 | 
	
		
			
				|  |  |      //Allocation chaine
 | 
	
		
			
				|  |  |      char* str;
 | 
	
		
			
				|  |  |      str = malloc((this->length + 2) * sizeof(char)); // La chaine + {}
 | 
	
	
		
			
				|  | @@ -157,17 +223,30 @@ char* json_encode(JsonEncoder* this){
 | 
	
		
			
				|  |  |      //Creation de la chaine
 | 
	
		
			
				|  |  |      JsonNode* node;
 | 
	
		
			
				|  |  |      node = this->head;
 | 
	
		
			
				|  |  | -    str[0] = '{';
 | 
	
		
			
				|  |  | +    str[index++] = '{';
 | 
	
		
			
				|  |  |      while(node != NULL){
 | 
	
		
			
				|  |  | +        if(!first){
 | 
	
		
			
				|  |  | +            str[index++] = ',';
 | 
	
		
			
				|  |  | +            str[index++] = ' ';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        length = strlen(node->str);
 | 
	
		
			
				|  |  | +        for(int i = 0; i < length; i++, index++){
 | 
	
		
			
				|  |  | +            str[index] = node->str[i];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if(first){
 | 
	
		
			
				|  |  | -            sprintf(str, "%s%s", str, node->str);
 | 
	
		
			
				|  |  |              first = false;
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            sprintf(str, "%s, %s", str, node->str);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        /*if(first){
 | 
	
		
			
				|  |  | +            snprintf(str, this->length + 2, "%s%s", str, node->str);
 | 
	
		
			
				|  |  | +            printf("Json %s\n", str);
 | 
	
		
			
				|  |  | +            first = false;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            snprintf(str, this->length + 2, "%s, %s", str, node->str);
 | 
	
		
			
				|  |  | +            printf("Json %s\n", str);
 | 
	
		
			
				|  |  | +        }*/
 | 
	
		
			
				|  |  |          node = node->next;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    sprintf(str, "%s}", str);
 | 
	
		
			
				|  |  | +    str[index++] = '}';
 | 
	
		
			
				|  |  |      //Retour
 | 
	
		
			
				|  |  |      return str;
 | 
	
		
			
				|  |  |  }
 |