diff options
author | Luigi Scarso <luigi.scarso@gmail.com> | 2020-04-21 18:43:36 +0000 |
---|---|---|
committer | Luigi Scarso <luigi.scarso@gmail.com> | 2020-04-21 18:43:36 +0000 |
commit | 7c0b908f1a6e1489834fbdb0789766eed8a37b49 (patch) | |
tree | cb55d631b861bfcf95fe853713af6f760227ba0f /Build/source/libs/pplib/pplib-src/src/util/utilmemheapiof.c | |
parent | e783b071ded7eef421d0333416b47142bc5542cb (diff) |
pplib under libs -- WORK IN PROGRSS grep '?' out
git-svn-id: svn://tug.org/texlive/trunk@54824 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/pplib/pplib-src/src/util/utilmemheapiof.c')
-rw-r--r-- | Build/source/libs/pplib/pplib-src/src/util/utilmemheapiof.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/Build/source/libs/pplib/pplib-src/src/util/utilmemheapiof.c b/Build/source/libs/pplib/pplib-src/src/util/utilmemheapiof.c new file mode 100644 index 00000000000..cd9609da877 --- /dev/null +++ b/Build/source/libs/pplib/pplib-src/src/util/utilmemheapiof.c @@ -0,0 +1,142 @@ + +#include "utilmemheapiof.h" + +// this is identical to stock iof suite, keep in sync + +size_t heap8_writer (iof *O, iof_mode mode) +{ + heap8 *heap; + size_t written; + heap = (heap8 *)O->link; + switch (mode) + { + case IOFFLUSH: + heap8_buffer_done(heap, O); + O->buf = _heap8_some(heap, 0, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + break; + case IOFWRITE: + written = (size_t)iof_size(O); + O->buf = heap8_more(heap, O->buf, written, written << 1, &O->space); + O->pos = O->buf + written; + O->end = O->buf + O->space; + return O->space - written; + case IOFCLOSE: + default: + break; + } + return 0; +} + +size_t heap16_writer (iof *O, iof_mode mode) +{ + heap16 *heap; + size_t written; + heap = (heap16 *)O->link; + switch (mode) + { + case IOFFLUSH: + heap16_buffer_done(heap, O); + O->buf = _heap16_some(heap, 0, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + break; + case IOFWRITE: + written = (size_t)iof_size(O); + O->buf = heap16_more(heap, O->buf, written, written << 1, &O->space); + O->pos = O->buf + written; + O->end = O->buf + O->space; + return O->space - written; + case IOFCLOSE: + default: + break; + } + return 0; +} + +size_t heap32_writer (iof *O, iof_mode mode) +{ + heap32 *heap; + size_t written; + heap = (heap32 *)O->link; + switch (mode) + { + case IOFFLUSH: + heap32_buffer_done(heap, O); + O->buf = _heap32_some(heap, 0, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + break; + case IOFWRITE: + written = (size_t)iof_size(O); + O->buf = heap32_more(heap, O->buf, written, written << 1, &O->space); + O->pos = O->buf + written; + O->end = O->buf + O->space; + return O->space - written; + case IOFCLOSE: + default: + break; + } + return 0; +} + +size_t heap64_writer (iof *O, iof_mode mode) +{ + heap64 *heap; + size_t written; + heap = (heap64 *)O->link; + switch (mode) + { + case IOFFLUSH: + heap64_buffer_done(heap, O); + O->buf = _heap64_some(heap, 0, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + break; + case IOFWRITE: + written = (size_t)iof_size(O); + O->buf = heap64_more(heap, O->buf, written, written << 1, &O->space); + O->pos = O->buf + written; + O->end = O->buf + O->space; + return O->space - written; + case IOFCLOSE: + default: + break; + } + return 0; +} + +/* buffer for some */ + +iof * _heap8_buffer_some (heap8 *heap, iof *O, size_t atleast) +{ + O->buf = _heap8_some(heap, atleast, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + return O; +} + +iof * _heap16_buffer_some (heap16 *heap, iof *O, size_t atleast) +{ + O->buf = _heap16_some(heap, atleast, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + return O; +} + +iof * _heap32_buffer_some (heap32 *heap, iof *O, size_t atleast) +{ + O->buf = _heap32_some(heap, atleast, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + return O; +} + +iof * _heap64_buffer_some (heap64 *heap, iof *O, size_t atleast) +{ + O->buf = _heap64_some(heap, atleast, &O->space); + O->pos = O->buf; + O->end = O->buf + O->space; + return O; +} |