Add get_current_process_environment_variables

This commit is contained in:
Robert Ransom 2012-02-12 20:34:52 -08:00 committed by Nick Mathewson
parent 98cec14982
commit 0ba93e184a
2 changed files with 23 additions and 0 deletions

View File

@ -3832,6 +3832,27 @@ process_environment_make(struct smartlist_t *env_vars)
return env; return env;
} }
/** Return a newly allocated smartlist containing every variable in
* this process's environment, as a NUL-terminated string of the form
* "NAME=VALUE". Note that on some/many/most/all OSes, the parent
* process can put strings not of that form in our environment;
* callers should try to not get crashed by that.
*
* The returned strings are statically allocated, and must be treated
* as read-only. */
struct smartlist_t *
get_current_process_environment_variables(void)
{
smartlist_t *sl = smartlist_new();
char **environ_tmp; /* Not const char ** ? Really? */
for (environ_tmp = environ; *environ_tmp; ++environ_tmp) {
smartlist_add(sl, (void *)(*environ_tmp));
}
return sl;
}
#ifdef _WIN32 #ifdef _WIN32
/** Read from a handle <b>h</b> into <b>buf</b>, up to <b>count</b> bytes. If /** Read from a handle <b>h</b> into <b>buf</b>, up to <b>count</b> bytes. If
* <b>hProcess</b> is NULL, the function will return immediately if there is * <b>hProcess</b> is NULL, the function will return immediately if there is

View File

@ -394,6 +394,8 @@ typedef struct process_environment_t process_environment_t;
process_environment_t *process_environment_make(struct smartlist_t *env_vars); process_environment_t *process_environment_make(struct smartlist_t *env_vars);
void process_environment_free(process_environment_t *env); void process_environment_free(process_environment_t *env);
struct smartlist_t *get_current_process_environment_variables(void);
/* Values of process_handle_t.status. PROCESS_STATUS_NOTRUNNING must be /* Values of process_handle_t.status. PROCESS_STATUS_NOTRUNNING must be
* 0 because tor_check_port_forwarding depends on this being the initial * 0 because tor_check_port_forwarding depends on this being the initial
* statue of the static instance of process_handle_t */ * statue of the static instance of process_handle_t */