背景
C言語で文字列を扱う場合、char*型を使うが、mrubyにC言語でメソッドを追加するような
場面では、当然mruby内で扱える型mrb_valueを返す必要がある。
要するにこのchar*からmruby内で扱える文字列型に変換する方法が、自分のGoogle力ではなかなか探しだせなかった。
メソッドで受け取った引数を加工して返す系のコードはごっそり見つかったけど、メソッド内のCの文字列を単純に返すというものがなかなか見つからなかった。
mrubyでC APIで取得した文字列を返すには
mrb_str_newを使えば出来た。
文字列の先頭アドレスと長さを指定する必要ある。
以下、謎のサンプルコード。
#ifdef __APPLE__
mrb_value get_procpathname(mrb_state* mrb, mrb_value self)
{
int ret;
pid_t pid;
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
pid = getpid();
ret = proc_pidpath(pid, pathbuf, sizeof(pathbuf));
return mrb_str_new(mrb,pathbuf,strlen(pathbuf));
}
#endif