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 1.651 second using v1.01-cache-2.11-cpan-6aa56a78535 )