OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib-1.10.0/] [newlib/] [libc/] [sys/] [sysvi386/] [exec.c] - Diff between revs 1010 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 1010 Rev 1765
#include <sys/unistd.h>
#include <sys/unistd.h>
#include <errno.h>
#include <errno.h>
 
 
extern char **environ;
extern char **environ;
 
 
int
int
execv (const char *path, char * const *args) {
execv (const char *path, char * const *args) {
        extern int execve (const char *, char * const *, char * const*);
        extern int execve (const char *, char * const *, char * const*);
        return execve (path, args, environ);
        return execve (path, args, environ);
}
}
 
 
int
int
execl(const char *path, const char *arg1, ...) {
execl(const char *path, const char *arg1, ...) {
        return execv (path, &arg1);
        return execv (path, &arg1);
}
}
 
 
/*
/*
 * Copy string, until c or <nul> is encountered.
 * Copy string, until c or <nul> is encountered.
 * NUL-terminate the destination string (s1).
 * NUL-terminate the destination string (s1).
 */
 */
 
 
static char *
static char *
strccpy (char *s1, char *s2, char c) {
strccpy (char *s1, char *s2, char c) {
        char *dest = s1;
        char *dest = s1;
        while (*s2 && *s2 != c) {
        while (*s2 && *s2 != c) {
                *s1++ = *s2++;
                *s1++ = *s2++;
        }
        }
        *s1 = 0;
        *s1 = 0;
        return dest;
        return dest;
}
}
 
 
int
int
execvp(const char *file, char * const *args) {
execvp(const char *file, char * const *args) {
        extern char *getenv (const char *);
        extern char *getenv (const char *);
        char *path = getenv ("PATH");
        char *path = getenv ("PATH");
        char buf[MAXNAMLEN];
        char buf[MAXNAMLEN];
 
 
        if (file[0] == '/') {    /* absolute pathname -- easy out */
        if (file[0] == '/') {    /* absolute pathname -- easy out */
                return execv (file, args);
                return execv (file, args);
        }
        }
 
 
        buf[0] = 0;       /* lots of initialization here 8-) */
        buf[0] = 0;       /* lots of initialization here 8-) */
        while (*path) {
        while (*path) {
                strccpy (buf, path, ':');
                strccpy (buf, path, ':');
                strcat (buf, "/");
                strcat (buf, "/");
                strcat (buf, file);
                strcat (buf, file);
                execv (buf, args);
                execv (buf, args);
                if (errno != ENOENT)
                if (errno != ENOENT)
                        return -1;
                        return -1;
                while (*path && *path != ':')
                while (*path && *path != ':')
                        path++;
                        path++;
        }
        }
        return -1;
        return -1;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.