X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=psi.d%2Fglob.psi;h=61ada04bb65c7f0f41d9360c0ed8de1fff958d6c;hp=3f8ee1e37e16f105941f75029ae148a10ae2eea6;hb=3fa287dfd76814b2ec54991c0208a019845a3dc0;hpb=22ca720deabdb92ebedf4c9c82d758671c9d5f3d diff --git a/psi.d/glob.psi b/psi.d/glob.psi index 3f8ee1e..61ada04 100644 --- a/psi.d/glob.psi +++ b/psi.d/glob.psi @@ -1,18 +1,18 @@ -extern void globfree(glob_t *buf); - -extern int glob(char *pat, int flags, void *err, glob_t *buf); -function psi\glob(string $pattern, int $flags, array &$glob = NULL) : int { - let pat = strval($pattern); +function psi\glob(string $pattern, int $flags, array &$glob = NULL, callable $errfn = NULL) : int { + let path = strval($pattern); let flags = intval($flags); - let err = NULL; - let buf = arrval($glob); + let err = callback intval($errfn( + to_string(errmsg), + to_int(errno) + )); + let buf = &arrval($glob); return to_int(glob); set $glob = to_array(*buf, to_int(gl_matchc), to_int(gl_pathc), to_int(gl_offs), to_int(gl_flags), - to_array(**gl_pathv, gl_pathc, gl_offs, to_string(*gl_pathv)) + to_array(gl_pathv, gl_pathc + gl_offs, to_string(gl_pathv)) ); - //free globfree(buf); + free globfree(buf); }