Esempio n. 1
0
static int vfs_semihost_open(void* ctx, const char * path, int flags, int mode)
{
    int fd = -1, host_err = 0;
    char *host_path;
    vfs_semihost_ctx_t *semi_ctx = ctx;

    ESP_LOGV(TAG, "%s: %p '%s 0x%x 0x%x'", __func__, semi_ctx, path, flags, mode);
    if (ctx_uses_abspath(semi_ctx)) {
        flags |= ESP_O_SEMIHOST_ABSPATH;
        host_path = malloc(strlen(semi_ctx->host_path)+strlen(path)+1);
        if(host_path == NULL) {
            errno = ENOMEM;
            return -1;
        }
        strcpy(host_path, semi_ctx->host_path);
        strcat(host_path, path);
    } else {
        host_path = (char *)path;
    }
    fd = generic_syscall(SYS_OPEN, (int)host_path, strlen(host_path), flags, mode, &host_err);
    if (ctx_uses_abspath(semi_ctx)) {
        free(host_path);
    }
    if (fd == -1) {
        errno = host_err;
    }
    return fd;
}
Esempio n. 2
0
static off_t vfs_semihost_lseek(void* ctx, int fd, off_t size, int mode)
{
    int ret = -1, host_err = 0;

    ESP_LOGV(TAG, "%s: %d %ld %d", __func__, fd, size, mode);
    ret = generic_syscall(SYS_SEEK, fd, size, mode, 0, &host_err);
    if (ret == -1) {
        errno = host_err;
    }
    return (off_t)ret;
}
Esempio n. 3
0
static int vfs_semihost_close(void* ctx, int fd)
{
    int ret = -1, host_err = 0;

    ESP_LOGV(TAG, "%s: %d", __func__, fd);
    ret = generic_syscall(SYS_CLOSE, fd, 0, 0, 0, &host_err);
    if (ret == -1) {
        errno = host_err;
    }
    return ret;
}
Esempio n. 4
0
static ssize_t vfs_semihost_read(void* ctx, int fd, void* data, size_t size)
{
    int host_err = 0;
    size_t ret = -1;

    ESP_LOGV(TAG, "%s: %d %u bytes", __func__, fd, size);
    ret = generic_syscall(SYS_READ, fd, (int)data, size, 0, &host_err);
    if (ret == -1) {
        errno = host_err;
    }
    return (ssize_t)ret;
}
int my_fork()
{ 
  /* implement fork using generic_syscall function */
  return generic_syscall(2);
  assert(0);
}
int my_getppid()
{
  /* implement getppid using generic_syscall function */
   return generic_syscall(64);
  assert(0);
}
Esempio n. 7
0
int my_getppid(void){
	return generic_syscall(64);      
}
Esempio n. 8
0
int my_getpid(void){
	return generic_syscall(20);      
}
Esempio n. 9
0
int my_fork(void){
	return generic_syscall(2);       
}