static int resetProlog(int clear_stacks) { GET_LD IOSTREAM *in = Suser_input; if ( Sferror(in) ) { Sclearerr(in); LD->prompt.next = TRUE; } Scurin = in; Scurout = Suser_output; PL_clear_exception(); resetTracer(); if ( clear_stacks ) { if ( !LD->gvar.nb_vars ) /* we would loose nb_setval/2 vars */ emptyStacks(); gc_status.blocked = 0; LD->shift_status.blocked = 0; LD->in_arithmetic = 0; LD->in_print_message = 0; } #ifdef O_LIMIT_DEPTH depth_limit = (uintptr_t)DEPTH_NO_LIMIT; #endif updateAlerted(LD); return TRUE; }
static __LA_INT64_T ar_skip(struct archive *a, void *cdata, __LA_INT64_T request) { archive_wrapper *ar = cdata; if ( Sseek64(ar->data, request, SIO_SEEK_CUR) == 0 ) return request; Sclearerr(ar->data); return 0; /* cannot skip; library will read */ }
static __LA_INT64_T ar_seek(struct archive *a, void *cdata, __LA_INT64_T request, int whence) { archive_wrapper *ar = cdata; int s_whence; switch (whence) { case SEEK_SET: s_whence=SIO_SEEK_SET; break; case SEEK_CUR: s_whence=SIO_SEEK_CUR; break; case SEEK_END: s_whence=SIO_SEEK_END; break; default: assert(0); return -1; } if ( Sseek64(ar->data, request, s_whence) == 0 ) { return Stell64(ar->data); } Sclearerr(ar->data); /* JW: why is this? */ return ARCHIVE_FATAL; }