#include <stdlib.h>
#include <string.h>

#include "env_impl.h"
#include "libc.h"

char** __env_map;

int __putenv(char* s, int a) {
  int i = 0, j = 0;
  char* z = strchr(s, '=');
  char** newenv = 0;
  char** newmap = 0;
  static char** oldenv;

  if (!z)
    return unsetenv(s);
  if (z == s)
    return -1;
  for (; __environ[i] && memcmp(s, __environ[i], z - s + 1); i++)
    ;
  if (a) {
    if (!__env_map) {
      __env_map = calloc(2, sizeof(char*));
      if (__env_map)
        __env_map[0] = s;
    } else {
      for (; __env_map[j] && __env_map[j] != __environ[i]; j++)
        ;
      if (!__env_map[j]) {
        newmap = realloc(__env_map, sizeof(char*) * (j + 2));
        if (newmap) {
          __env_map = newmap;
          __env_map[j] = s;
          __env_map[j + 1] = NULL;
        }
      } else {
        free(__env_map[j]);
        __env_map[j] = s;
      }
    }
  }
  if (!__environ[i]) {
    newenv = malloc(sizeof(char*) * (i + 2));
    if (!newenv) {
      if (a && __env_map)
        __env_map[j] = 0;
      return -1;
    }
    memcpy(newenv, __environ, sizeof(char*) * i);
    newenv[i] = s;
    newenv[i + 1] = 0;
    __environ = newenv;
    free(oldenv);
    oldenv = __environ;
  }

  __environ[i] = s;
  return 0;
}

int putenv(char* s) { return __putenv(s, 0); }
