flush
[m6w6/ext-psi] / src / context.c
index 1a20af9decd4b57e97757670ea9b881af33b4c62..709c6b4a6d3c8a73ac6cf032ab19ccb45c17a9fa 100644 (file)
@@ -150,24 +150,24 @@ static struct psi_predef_const {
 
 PSI_MACROS
 
-size_t psi_fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
-{
-       size_t rv = fread(ptr, size, nmemb, stream);
+int psi_glob(const char *pattern, int flags,
+               int (*errfunc) (const char *epath, int eerrno),
+               glob_t *pglob) {
+       size_t offs = flags & GLOB_DOOFFS ? pglob->gl_offs : 0;
+       int rv = glob(pattern, flags, errfunc, pglob);
+       if (pglob->gl_pathv) {
+               while (offs--) {
+                       pglob->gl_pathv[offs] = NULL;
+               }
+       }
        return rv;
 }
 
-FILE *psi_fopen(const char *path, const char *mode)
-{
-       FILE *f = fopen(path, mode);
-       return f;
-}
-
 static struct psi_func_redir {
        const char *name;
        void (*func)(void);
 } psi_func_redirs[] = {
-               {"fopen", (void (*)(void)) psi_fopen},
-               {"fread", (void (*)(void)) psi_fread},
+       {"glob", (void (*)(void)) psi_glob},
        PSI_REDIRS
        {0}
 };
@@ -734,6 +734,11 @@ static inline int validate_impl_let_stmts(PSI_Data *data, impl *impl) {
                                return 0;
                        }
                }
+               if (let->val && let->val->num) {
+                       if (!validate_num_exp(data, impl->decl->args, impl->decl->func, let->val->num)) {
+                               return 0;
+                       }
+               }
        }
        return 1;
 }