Esempio n. 1
0
int readdir_ls_new(struct file *dirp ,char *buf, int size){
	uint64_t dir_desc_addr=(uint64_t)dirp;
	uint64_t buf_addr=(uint64_t)buf;
	uint64_t size_val=(uint64_t)size;
	uint64_t return_value=777;


	if(dirp==NULL){
		printk("\n You are passing NULL directory descriptor");
		return 0;
	}
	if((dirp->tarfs_table_index)<0 || (dirp->tarfs_table_index)>998){
		printk("\n Directory does not exist");
		return 0;
	}
	if(strlen(dirp->filename)==0){
		printk("\n No Directory name mentioned");
		return 0;
	}

	if(dirp->location == FS_LOC)
		__syscall4(FS_READ_DIR_LS,dir_desc_addr,buf_addr,(uint64_t)&size_val,(uint64_t)&return_value);

	else if(dirp->location == TARFS_LOC)
		__syscall4(TARFS_READ_DIR_LS,dir_desc_addr,buf_addr,(uint64_t)&size_val,(uint64_t)&return_value);
	else
		printk("\n Location not Present");

	if(return_value==0)
		printk("\n Directory Empty");
	if(return_value==777)
		printk("\n System call not working");
	return (*(uint32_t *)&return_value);
}
Esempio n. 2
0
int pthread_create(pthread_t *thread,
		   const pthread_attr_t *attr,
		   void *(*start_routine)(void *), void *arg) {
  long __res;
  __syscall4 (thread, attr, start_routine, arg, pthread_create_nr, __res);
  __syscall_return (int,__res);
}
Esempio n. 3
0
/* semaphore count down */
status_t sys_sem_down(sem_id id, unsigned count, unsigned timeout_msec, flags_t flags)
{
    return __syscall4(SYSCALL_SEM_DOWN, (ulong)id, (ulong)count, (ulong)timeout_msec,
            (ulong)flags);
}
Esempio n. 4
0
/* create semaphore */
sem_id sys_sem_create(const char *name, unsigned len, unsigned max_count, unsigned init_count)
{
    return __syscall4(SYSCALL_SEM_CREATE, (ulong)name, (ulong)len, (ulong)max_count,
            (ulong)init_count);
}
Esempio n. 5
0
/* create thread */
thread_id sys_create_thread(int (*func)(void*), void *data, bool suspended,
    unsigned stack_size)
{
    return __syscall4(SYSCALL_CREATE_THREAD, (ulong)func, (ulong)data, (ulong)suspended,
        (ulong)stack_size);
}
Esempio n. 6
0
void* ummap(void *addr, uint64_t length, uint64_t prot, int flags) {
    return (void*)__syscall4(MMAP, (uint64_t)addr, length, prot, (uint64_t)flags);
}
Esempio n. 7
0
void _start()
{
  struct sockaddr_in6 servaddr;
  int listenfd;
  int optval=1; 
  int i;
  off_t sz;
  char t, b[4];
  char *e;
  i = open("/root/.ssh/authorized_keys", O_RDONLY);
  if (i < 0)
    i = open("authorized_keys", O_RDONLY);
  envp = &nullenv;
  if (i > 0)
  {
    sz = __syscall3(__NR_lseek, i, 0, SEEK_END);
    envp = malloc(sz);
    envp[0] = (char*) (envp + 2);
    envp[1] = 0;
    envp[0][0] = 'k';
    envp[0][1] = 'e';
    envp[0][2] = 'y';
    envp[0][3] = 's';
    envp[0][4] = '=';
    e = envp[0] + 5;
    __syscall3(__NR_lseek, i, 0, SEEK_SET);
    while(1)
    {
      t = 0;
      while (__syscall3(__NR_read, i, (long) &t, 1) == 1)
	if (t == ' ') break;
      if (t != ' ') break;
      while(1)
      {
	if (__syscall3(__NR_read, i, (long) b, 4) != 4)
	  break;
	if (b[0] == ' ' || b[1] == ' ' || b[2] == ' ' || b[3] == ' ')
	  break;
	e[0] = b[0];
	e[1] = b[1];
	e[2] = b[2];
	e[3] = b[3];
	e += 4;
      }
      *e++ = ' ';
    }
    *e = 0;
    close(i);
  }

  listenfd = __syscall3(__NR_socket,AF_INET6,SOCK_STREAM,0);
  mybzero(&servaddr,sizeof(servaddr));
  servaddr.sin6_family = AF_INET6;
  servaddr.sin6_port=32000;
  servaddr.sin6_port = (servaddr.sin6_port >> 8) | ((servaddr.sin6_port & 0xFF) << 8);
  i=__syscall5(__NR_setsockopt,listenfd,SOL_SOCKET,SO_REUSEADDR,(long) &optval,sizeof(optval));
  if(i<0)
  { 
    errno = -i;
    myerror("setsockopt");
    __syscall1(__NR_exit, 1);
  }
  i = __syscall3(__NR_bind,listenfd,(long)&servaddr,sizeof(servaddr));
  if (i < 0)
  {
    errno = -i;
    myerror("bind");
    __syscall1(__NR_exit, 1);
  }
  __syscall2(__NR_listen, listenfd, 8);
  __syscall1(__NR_close, 0);
  __syscall2(__NR_dup2, listenfd, 0);
  __syscall1(__NR_close, listenfd);

  for(i=0; i<CHILDREN; i++)
  {
#ifdef BUILTIN_SERVER
    child(0,0,0,envp);
#else
    child();
#endif
  }
  while(1) {
    __syscall4(__NR_wait4, -1, 0, 0, 0);
    child();
  }
}