/* * Seek to a position in the stream. Returns the 0, or -1 if error */ int sfseek(stream *s, long offset, int whence) { long newpos = offset; if (whence == SEEK_CUR) newpos += stell(s); if (whence == SEEK_END) { long endpos; if (savailable(s, &endpos) < 0) return -1; newpos = endpos - offset; } if (s_can_seek(s) || newpos == stell(s)) { return sseek(s, newpos); } return -1; /* fail */ }
/* <file> bytesavailable <int> */ static int zbytesavailable(i_ctx_t *i_ctx_p) { os_ptr op = osp; stream *s; long avail; check_read_file(s, op); switch (savailable(s, &avail)) { default: return_error(e_ioerror); case EOFC: avail = -1; case 0: ; } make_int(op, avail); return 0; }
static int gx_serialize_CIEICC(const gs_color_space * pcs, stream * s) { const gs_icc_params * p = &pcs->params.icc; gs_cie_icc *picc = p->picc_info; uint n; int code = gx_serialize_cspace_type(pcs, s); long avail, pos, count; byte buf[100]; if (code < 0) return code; code = gx_serialize_cie_common_elements(pcs, s); if (code < 0) return code; code = sputs(s, (byte *)&picc->num_components, sizeof(picc->num_components), &n); if (code < 0) return code; code = sputs(s, (byte *)&picc->Range, sizeof(picc->Range), &n); if (code < 0) return code; if (sseek(picc->instrp, 0) < 0) return_error(gs_error_unregistered); /* Unimplemented. */ if (savailable(picc->instrp, &avail) != 0) return_error(gs_error_unregistered); /* Unimplemented. */ code = sputs(s, (byte *)&avail, sizeof(avail), &n); if (code < 0) return code; for (pos = 0; pos < avail; pos += count) { count = min(sizeof(buf), avail - pos); code = sgets(picc->instrp, buf, count, &n); if (code < 0) return code; code = sputs(s, buf, count, &n); if (code < 0) return code; } return sputs(s, (byte *)&picc->pcs_is_cielab, sizeof(picc->pcs_is_cielab), &n); }