PAR-Packer
view release on metacpan or search on metacpan
myldr/boot.c view on Meta::CPAN
{
len = wcslen(w_argv[i]);
if (len == 0
|| w_argv[i][len-1] == L'\\'
|| wcspbrk(w_argv[i], L" \t\n\r\v\""))
{
w_argv[i] = shell_quote_wide(w_argv[i]);
}
}
par_setenv("PAR_SPAWNED", "1");
rc = _wspawnvp(P_WAIT, w_my_perl, (const wchar_t* const*)w_argv);
free(w_my_perl);
LocalFree(w_argv);
par_cleanup(stmpdir);
exit(rc);
}
#endif
myldr/env.c view on Meta::CPAN
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)getenv.c 8.1 (Berkeley) 6/4/93";
static const char sccsid[] = "@(#)setenv.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include <stdlib.h>
#include <string.h>
/*
* __findenv --
* Returns pointer to value associated with name, if any, else NULL.
* Sets offset to be the offset of the name/value combination in the
* environmental array, for use by setenv(3) and unsetenv(3).
* Explicitly removes '=' in argument name.
*
* This routine *should* be a static; don't use it.
*/
static char *
__findenv(register const char *name, int *offset)
{
extern char **environ;
register int len;
register const char *np;
myldr/env.c view on Meta::CPAN
static char *
par_getenv(const char *name)
{
int i;
return __findenv(name, &i);
}
/*
* setenv --
* Set the value of the environmental variable "name" to be
* "value". If rewrite is set, replace any current value.
*/
static int
par_setenv(const char *name, register const char *value)
{
#ifdef WIN32
char* p = (char*)malloc((size_t)(strlen(name) + strlen(value) + 2));
if (!p)
return (-1);
sprintf(p, "%s=%s", name, value);
_putenv(p);
return (0);
#else
extern char **environ;
myldr/env.c view on Meta::CPAN
if (!(environ[offset] = /* name + `=' + value */
malloc((size_t)((int)(c - name) + l_value + 2))))
return (-1);
for (c = environ[offset]; (*c = *name++) && *c != '='; ++c);
for (*c++ = '='; (*c++ = *value++););
return (0);
#endif
}
/*
* unsetenv(name) --
* Delete environmental variable "name".
*/
static void
par_unsetenv(const char *name)
{
#ifdef WIN32
par_setenv(name, "");
#else
extern char **environ;
register char **p;
int offset;
while (__findenv(name, &offset)) /* if set multiple times */
for (p = &environ[offset];; ++p)
if (!(*p = *(p + 1)))
break;
#endif
myldr/mktmpdir.c view on Meta::CPAN
(statbuf.st_mode & 0777) == 0700;
}
#endif
void par_setup_libpath( const char * stmpdir )
{
const char *ldlibpthname = stringify(LDLIBPTHNAME);
const char *val;
if ( (val = par_getenv(ldlibpthname)) == NULL || strlen(val) == 0 ) {
par_setenv(ldlibpthname, stmpdir);
}
else {
/* prepend stmpdir to (value of) environment variable */
char *new_val = malloc(
strlen(stmpdir) + strlen(path_sep) + strlen(val) + 1);
sprintf(
new_val, "%s%s%s",
stmpdir, path_sep, val);
par_setenv(ldlibpthname, new_val);
}
}
static void *par_memrmem(void* haystack, size_t haystacklen, void* needle, size_t needlelen)
{
char *hs = haystack;
char *p;
if (haystacklen < needlelen)
return NULL;
for (p = hs + haystacklen - needlelen; p >= hs; p--)
myldr/mktmpdir.c view on Meta::CPAN
if (use_cache) {
/* "$TEMP/par-$USER/cache-$SHA1" */
sprintf(
stmpdir,
"%s%scache-%s%s",
top_tmpdir, dir_sep, sha1, subdirbuf_suffix
);
}
else {
/* "$TEMP/par-$USER/temp-$PID" */
par_setenv("PAR_CLEAN", "1");
sprintf(
stmpdir,
"%s%stemp-%u%s",
top_tmpdir, dir_sep, getpid(), subdirbuf_suffix
);
/* Ensure we pick an unused directory each time. If the directory
already exists when we try to create it, bump a counter and try
"$TEMP/par-$USER/temp-$PID-$i". This will guard against cases where
a prior invocation crashed leaving garbage in a temp directory that
myldr/mktmpdir.c view on Meta::CPAN
stmpdir,
"%s%stemp-%u-%u%s",
top_tmpdir, dir_sep, getpid(), ++i, subdirbuf_suffix
);
}
}
free(top_tmpdir);
/* set dynamic loading path */
par_setenv("PAR_TEMP", stmpdir);
par_setup_libpath( stmpdir );
return stmpdir;
}
#ifdef WIN32
static void par_rmtmpdir ( char *stmpdir ) {
struct _finddata_t cur_file;
myldr/utils.c view on Meta::CPAN
* expect pointer to a Stat_t as second parameter, rather than a pointer
* to a struct stat. Try to distinguish these cases by checking
* whether Stat_t is defined. */
#ifndef Stat_t
#define Stat_t struct stat
#endif
Stat_t statbuf;
#ifdef WIN32
if ( GetModuleFileName(0, filename, MAXPATHLEN) ) {
par_setenv("PAR_PROGNAME", filename);
return strdup(filename);
}
#endif
/* Special case if prog contains '/' */
if (strstr(prog, dir_sep)) {
par_setenv("PAR_PROGNAME", prog);
return prog;
}
/* Walk through PATH (path), looking for ourself (prog).
This fails if we are invoked in an obscure manner;
Basically, execvp( "/full/path/to/prog", "prog", NULL ) and
"/full/path/to" isn't in $PATH. Of course, I can't think
of a situation this will happen. */
/* Note: use a copy of path as strtok() modifies its first argument */
myldr/utils.c view on Meta::CPAN
while (p < endp && *endp == *dir_sep) {
*endp ='\0';
endp--;
}
if (strlen(p) + strlen(dir_sep) + strlen(prog) + 1 < sizeof(filename)) {
sprintf(filename, "%s%s%s", p, dir_sep, prog);
if (stat(filename, &statbuf) == 0
&& S_ISREG(statbuf.st_mode)
&& access(filename, X_OK) == 0) {
par_setenv("PAR_PROGNAME", filename);
return strdup(filename);
}
}
}
par_setenv("PAR_PROGNAME", prog);
return prog;
}
char *par_basename (const char *name) {
char *base = strrchr(name, *dir_sep);
return strdup(base != NULL ? base + 1 : name);
}
myldr/utils.c view on Meta::CPAN
if (endp > dname)
*endp = '\0';
return strdup(dname);
}
void par_init_env () {
char *buf;
/* ignore PERL5LIB et al. as they make no sense for a self-contained executable */
par_unsetenv("PERL5LIB");
par_unsetenv("PERLLIB");
par_unsetenv("PERL5OPT");
par_unsetenv("PERLIO");
par_unsetenv("PAR_INITIALIZED");
par_unsetenv("PAR_SPAWNED");
par_unsetenv("PAR_TEMP");
par_unsetenv("PAR_CLEAN");
par_unsetenv("PAR_DEBUG");
par_unsetenv("PAR_CACHE");
par_unsetenv("PAR_PROGNAME");
if ( (buf = par_getenv("PAR_GLOBAL_DEBUG")) != NULL ) {
par_setenv("PAR_DEBUG", buf);
}
if ( (buf = par_getenv("PAR_GLOBAL_TMPDIR")) != NULL ) {
par_setenv("PAR_TMPDIR", buf);
}
if ( (buf = par_getenv("PAR_GLOBAL_TEMP")) != NULL ) {
par_setenv("PAR_TEMP", buf);
}
else if ( (buf = par_getenv("PAR_GLOBAL_CLEAN")) != NULL ) {
par_setenv("PAR_CLEAN", buf);
}
par_setenv("PAR_INITIALIZED", "1");
return;
}
int par_env_clean () {
char *val = par_getenv("PAR_CLEAN");
if (val == NULL || *val == '\0' || *val == '0')
return 0;
return 1;
}
( run in 0.878 second using v1.01-cache-2.11-cpan-6aa56a78535 )