Skip to content

Commit

Permalink
mxqd: use mx_setenv_forever
Browse files Browse the repository at this point in the history
  • Loading branch information
mariux committed Dec 17, 2014
1 parent d9cd2d9 commit 6161e7e
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 20 deletions.
39 changes: 39 additions & 0 deletions mx_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -403,3 +403,42 @@ int mx_dup2_close_both(int oldfd, int newfd)

return newfd;
}

int mx_setenv_forever(const char *name, const char *value)
{
assert(name);
assert(*name);

int res;

do {
res = setenv(name, value, 1);
if (!res)
return 0;
assert(errno != EINVAL);
} while (errno == ENOMEM);

assert(errno == ENOMEM);
return -errno;
}

int mx_setenvf_forever(const char *name, char *fmt, ...)
{
assert(name);
assert(*name);
assert(fmt);

va_list ap;
char *value = NULL;
int res;

va_start(ap, fmt);
mx_vasprintf_forever(&value, fmt, ap);
va_end(ap);

res = mx_setenv_forever(name, value);

free(value);

return res;
}
3 changes: 3 additions & 0 deletions mx_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,7 @@ char *mx_dirname_forever(char *path);
int mx_dup2_close_new(int oldfd, int newfd);
int mx_dup2_close_both(int oldfd, int newfd);

int mx_setenv_forever(const char *name, const char *value);
int mx_setenvf_forever(const char *name, char *fmt, ...) __attribute__ ((format(printf, 2, 3)));

#endif
34 changes: 14 additions & 20 deletions mxqd.c
Original file line number Diff line number Diff line change
Expand Up @@ -545,26 +545,20 @@ static int init_child_process(struct mxq_group_list *group, struct mxq_job *j)

assert(res == 0);

res += mxq_setenv("USER", g->user_name);
res += mxq_setenv("USERNAME", g->user_name);
res += mxq_setenv("LOGNAME", g->user_name);
res += mxq_setenv("PATH", MXQ_INITIAL_PATH);
res += mxq_setenv("PWD", j->job_workdir);
res += mxq_setenv("HOME", passwd->pw_dir);
res += mxq_setenv("HOSTNAME", mxq_hostname());
res += mxq_setenvf("JOB_ID", "%d", j->job_id);
res += mxq_setenvf("MXQ_JOBID", "%d", j->job_id);
res += mxq_setenvf("MXQ_THREADS", "%d", g->job_threads);
res += mxq_setenvf("MXQ_SLOTS", "%d", group->slots_per_job);
res += mxq_setenvf("MXQ_MEMORY", "%d", g->job_memory);
res += mxq_setenvf("MXQ_TIME", "%d", g->job_time);
res += mxq_setenvf("MXQ_HOSTID", "%s::%s", s->hostname, s->server_id);

if (res < 14) {
MXQ_LOG_ERROR("job=%s(%d):%lu:%lu setenv(): failed. %m\n",
g->user_name, g->user_uid, g->group_id, j->job_id);
return 0;
}
mx_setenv_forever("USER", g->user_name);
mx_setenv_forever("USERNAME", g->user_name);
mx_setenv_forever("LOGNAME", g->user_name);
mx_setenv_forever("PATH", MXQ_INITIAL_PATH);
mx_setenv_forever("PWD", j->job_workdir);
mx_setenv_forever("HOME", passwd->pw_dir);
mx_setenv_forever("HOSTNAME", mxq_hostname());
mx_setenvf_forever("JOB_ID", "%lu", j->job_id);
mx_setenvf_forever("MXQ_JOBID", "%lu", j->job_id);
mx_setenvf_forever("MXQ_THREADS", "%d", g->job_threads);
mx_setenvf_forever("MXQ_SLOTS", "%lu", group->slots_per_job);
mx_setenvf_forever("MXQ_MEMORY", "%lu", g->job_memory);
mx_setenvf_forever("MXQ_TIME", "%d", g->job_time);
mx_setenvf_forever("MXQ_HOSTID", "%s::%s", s->hostname, s->server_id);

fh = open("/proc/self/loginuid", O_WRONLY|O_TRUNC);
if (fh == -1) {
Expand Down

0 comments on commit 6161e7e

Please sign in to comment.