anchor.diff:  
   
   
  -    case Version of
  -        {2,8} -> [
  +    case lists:member(Version, [{2,8}, {2,9}]) of
  +        true -> [
               {"c_int", "enif_has_pending_exception", "env: *mut ErlNifEnv, reason: *mut ERL_NIF_TERM"},
               {"ERL_NIF_TERM", "enif_raise_exception", "env: *mut ErlNifEnv, reason: ERL_NIF_TERM"}
           ];
  +        false -> []
  +    end ++
  +
  +
  +
  +    case Version of
  +        {2,9} -> [
  +            {"c_int", "enif_getenv", "key: *const c_uchar, value: *mut c_uchar, value_size: *mut size_t"}
  +        ];
           _ -> []
       end ++
  +
  +
   
       case HasDirtySchedulers of
           true -> [{"c_int", "enif_is_on_dirty_scheduler", "env: *mut ErlNifEnv"}  ];
  
positive.code: 
  version_string2tuple("2.7") -> {2,7};
  version_string2tuple("2.8") -> {2,8};
  version_string2tuple(_) -> unsupported.
  
  check_version(unsupported) ->
  
negative.code: %% the Windows callback struct keeps proper integrity.  Such functions
  %% must begin with "dummy."
  %%
  api_list(Version, Wordsize, HasDirtySchedulers)
    when Version =:= {2,7};
         Version =:= {2,8};
         Version =:= {2,9} -> [
  
      {"*mut c_void", "enif_priv_data", "arg1: *mut ErlNifEnv"},
      {"*mut c_void", "enif_alloc", "size: size_t"},
  