File: execve.c

package info (click to toggle)
god 0.7.18-3
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 908 kB
  • sloc: ruby: 5,516; ansic: 241; makefile: 129; sh: 27
file content (29 lines) | stat: -rw-r--r-- 711 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "ruby.h"

static VALUE mKernel;
void Init_execve();
VALUE method_execve(VALUE self, VALUE cmd, VALUE env);

void Init_execve() {
  mKernel = rb_const_get(rb_cObject, rb_intern("Kernel"));
  rb_define_method(mKernel, "execve", method_execve, 2);
}

VALUE method_execve(VALUE self, VALUE r_cmd, VALUE r_env) {
  char *shell = (char *)dln_find_exe("sh", 0);
  char *arg[] = { "sh", "-c", StringValuePtr(r_cmd), (char *)0 };
  
  struct RArray *env_array;
  env_array = RARRAY(r_env);
  char *env[env_array->len + 1];
  
  int i;
  for(i = 0; i < env_array->len; i++) {
    env[i] = StringValuePtr(env_array->ptr[i]);
  }
  
  env[env_array->len] = (char *)0;
  
  execve(shell, arg, env);
  return Qnil;
}