From 3da111bd10e1c4da8923a1aa2bcbab55b13a5153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 26 Mar 2018 15:01:21 +0100 Subject: [PATCH] errors --- C/errors.c | 10 +++++++++- C/yap-args.c | 2 +- os/assets.c | 9 +++++---- os/iopreds.c | 8 ++++---- os/streams.c | 2 +- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/C/errors.c b/C/errors.c index 4e425f652..ff38d4c78 100755 --- a/C/errors.c +++ b/C/errors.c @@ -333,6 +333,14 @@ void Yap_pushErrorContext(yap_error_descriptor_t *new_error) { LOCAL_ActiveError = new_error; } +static void +reset_error_description(void) { + sigjmp_buf *bf = LOCAL_ActiveError->top_error; + memset(LOCAL_ActiveError, 0, sizeof(*LOCAL_ActiveError)); + LOCAL_ActiveError->top_error = bf; + +} + yap_error_descriptor_t *Yap_popErrorContext(bool pass) { if (pass && LOCAL_ActiveError->top_error->errorNo == YAP_NO_ERROR && LOCAL_ActiveError->errorNo != YAP_NO_ERROR) @@ -361,6 +369,7 @@ void Yap_ThrowError__(const char *file, const char *function, int lineno, } else { Yap_Error__(file, function, lineno, type, where); } + if (LOCAL_RestartEnv) siglongjmp(*LOCAL_RestartEnv, 5); } @@ -474,7 +483,6 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno, } va_end(ap); if (P == (yamop *)(FAILCODE)) { - memset(LOCAL_ActiveError, 0, sizeof(*LOCAL_ActiveError)); LOCAL_PrologMode &= ~InErrorMode; return P; } diff --git a/C/yap-args.c b/C/yap-args.c index 6dd760562..e8abf0ca2 100755 --- a/C/yap-args.c +++ b/C/yap-args.c @@ -315,7 +315,7 @@ static void Yap_set_locations(YAP_init_args *iap) { /// BOOTPLDIR: where we can find Prolog bootstrap files Yap_BOOTSTRAP = sel(true, iap->BOOTSTRAP != NULL, iap->BOOTSTRAP, true, #if __ANDROID__ - "/assets/Yap/pl/boot,yap", + "/assets/Yap/pl/boot.yap", #else join(getenv("DESTDIR"), YAP_BOOTSTRAP), #endif diff --git a/os/assets.c b/os/assets.c index 0ab9adede..1af044b79 100644 --- a/os/assets.c +++ b/os/assets.c @@ -60,15 +60,15 @@ Java_pt_up_yap_yapdroid_YAPDroid_loadAssetManager(JNIEnv *env, jclass clazz, job static void * -open_asset(VFS_t *me, int sno, const char *fname, const char *io_mode) { +open_asset(VFS_t *me, const char *fname, const char *io_mode, int sno) { int mode; const void *buf; AAsset *am = NULL; - __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "open %s <%s>", fname, io_mode); - if (strchr(io_mode, 'B')) + __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "open %s-%s <%s>", fname, me->prefix,io_mode); + if (strchr(io_mode, 'B')) { mode = AASSET_MODE_BUFFER; - else { + } else {[lib] mode = AASSET_MODE_UNKNOWN; } GLOBAL_Stream[sno].name = Yap_LookupAtom(fname); @@ -78,6 +78,7 @@ open_asset(VFS_t *me, int sno, const char *fname, const char *io_mode) { // strcpy(dir, fname); // char *d = basename(dir); am = AAssetManager_open(Yap_assetManager(), fname, mode); + __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "open %s <%s>", fname, io_mode ); // while (dp) { // char *f = AAssetDir_getNextFileName(dp); // __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "open %s <%s>", f, d); diff --git a/os/iopreds.c b/os/iopreds.c index c5e69f6f1..798e0bc15 100644 --- a/os/iopreds.c +++ b/os/iopreds.c @@ -337,7 +337,7 @@ void Yap_DefaultStreamOps(StreamDesc *st) { st->stream_wputc = put_wchar; st->stream_wgetc = get_wchar; - if (st->vfs) { + if (st->vfs && !st->file) { st->stream_putc = st->vfs->put_char; st->stream_wputc = st->vfs->put_char; st->stream_getc = st->vfs->get_char; @@ -1143,7 +1143,7 @@ bool Yap_initStream(int sno, FILE *fd, const char *name, const char *io_mode, Te st->status = Binary_Stream_f|flags; } - st->vfs = vfs; + //st->vfs = vfs; st->buf.on = false; st->charcount = 0; st->linecount = 1; @@ -1598,7 +1598,7 @@ int Yap_OpenStream(const char *fname, const char* io_mode, Term user_name, encod // read, write, append user_name = st->user_name; } else { - fd = fopen(fname, io_mode); + st->file = fopen(fname, io_mode); if (fd == NULL) { if (!strchr(io_mode, 'b') && binary_file(fname)) { UNLOCK(st->streamlock); @@ -1615,7 +1615,7 @@ int Yap_OpenStream(const char *fname, const char* io_mode, Term user_name, encod return -1; } } - Yap_initStream(sno, fd, fname, io_mode, user_name, LOCAL_encoding, flags, vfsp); + Yap_initStream(sno, st->file, fname, io_mode, user_name, LOCAL_encoding, flags, vfsp); __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "exists %s <%d>", fname, sno); return sno; diff --git a/os/streams.c b/os/streams.c index d3ff1f91d..f5b62dd6b 100644 --- a/os/streams.c +++ b/os/streams.c @@ -984,7 +984,7 @@ static void CloseStream(int sno) { //fflush(NULL); VFS_t *me; - if ((me = GLOBAL_Stream[sno].vfs) != NULL) { + if ((me = GLOBAL_Stream[sno].vfs) != NULL && GLOBAL_Stream[sno].file == NULL) { if (me->close) { me->close(sno); }