Alien-LibJQ
view release on metacpan or search on metacpan
jq/src/setenv.c view on Meta::CPAN
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "setenv.h"
/*-------------------------------------------------------------------------
*
* setenv.c
* setenv() emulation for machines without it
*
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
* src/port/setenv.c
*
*-------------------------------------------------------------------------
*/
int
setenv(const char *name, const char *value, int overwrite) {
char *envstr;
/* Error conditions, per POSIX */
if (name == NULL || name[0] == '\0' || strchr(name, '=') != NULL || value == NULL) {
errno = EINVAL;
return -1;
}
/* No work if variable exists and we're not to replace it */
if (overwrite == 0 && getenv(name) != NULL)
return 0;
/*
* Add or replace the value using putenv(). This will leak memory if the
* same variable is repeatedly redefined, but there's little we can do
* about that when sitting atop putenv().
*/
envstr = (char *) malloc(strlen(name) + strlen(value) + 2);
if (!envstr) /* not much we can do if no memory */
return -1;
sprintf(envstr, "%s=%s", name, value);
return putenv(envstr);
}
( run in 0.946 second using v1.01-cache-2.11-cpan-0bd6704ced7 )