Commit 036898cc authored by Ariadne Conill's avatar Ariadne Conill

main/musl: update fopencookie patch to v9

dalias actually likes this version, so hopefully it should be in musl soon
parent 9949cdba
From 1f6d9870ebc905990d230a3887d2e91a9edfde93 Mon Sep 17 00:00:00 2001
From f501fa8271c7464c9c75762d2c9f43e494e416d8 Mon Sep 17 00:00:00 2001
From: William Pitcock <nenolod@dereferenced.org>
Date: Sun, 24 Sep 2017 16:37:48 -0500
Subject: [PATCH] stdio: implement fopencookie(3)
......@@ -9,6 +9,13 @@ stdio implementation, using four hook functions which operate on a
Changelog:
v9:
- make read function more robust, should have been in v8 but i forgot to commit
v8:
- fix possible ungetc() underflow
- style cleanups
v7:
- include GNU typedefs for cookie i/o functions
......@@ -38,8 +45,8 @@ v1:
- initial proof of concept
---
include/stdio.h | 14 +++++
src/stdio/fopencookie.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 155 insertions(+)
src/stdio/fopencookie.c | 138 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 152 insertions(+)
create mode 100644 src/stdio/fopencookie.c
diff --git a/include/stdio.h b/include/stdio.h
......@@ -69,10 +76,10 @@ index 884d2e6a..2932c76f 100644
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
diff --git a/src/stdio/fopencookie.c b/src/stdio/fopencookie.c
new file mode 100644
index 00000000..bcf42c10
index 00000000..2f46dd53
--- /dev/null
+++ b/src/stdio/fopencookie.c
@@ -0,0 +1,141 @@
@@ -0,0 +1,138 @@
+#define _GNU_SOURCE
+#include "stdio_impl.h"
+#include <stdlib.h>
......@@ -97,31 +104,31 @@ index 00000000..bcf42c10
+ struct fcookie *fc = f->cookie;
+ ssize_t ret = -1;
+ size_t remain = len, readlen = 0;
+ size_t len2 = len - !!f->buf_size;
+
+ if (!fc->iofuncs.read) goto bail;
+
+ ret = fc->iofuncs.read(fc->cookie, (char *) buf, len > 1 ? (len - 1) : 1);
+ if (ret <= 0) goto bail;
+ if (len2) {
+ ret = fc->iofuncs.read(fc->cookie, (char *) buf, len2);
+ if (ret <= 0) goto bail;
+
+ readlen += ret;
+ remain -= ret;
+ readlen += ret;
+ remain -= ret;
+ }
+
+ if (!f->buf_size || remain > !!f->buf_size) return readlen;
+
+ f->rpos = f->buf;
+ ret = fc->iofuncs.read(fc->cookie, (char *) f->rpos, f->buf_size);
+ if (ret <= 0) goto bail;
+ f->rend = f->rpos + ret;
+
+ if (remain > 0) {
+ if (remain > f->buf_size) remain = f->buf_size;
+ memcpy(buf + readlen, f->rpos, remain);
+ readlen += remain;
+ f->rpos += remain;
+ }
+ buf[readlen++] = *f->rpos++;
+
+ return readlen;
+
+bail:
+ f->flags |= F_EOF ^ ((F_ERR^F_EOF) & ret);
+ f->flags |= ret == 0 ? F_EOF : F_ERR;
+ f->rpos = f->rend = f->buf;
+ return readlen;
+}
......@@ -149,7 +156,7 @@ index 00000000..bcf42c10
+{
+ struct fcookie *fc = f->cookie;
+ int res;
+ if (whence > 2) {
+ if (whence > 2U) {
+ errno = EINVAL;
+ return -1;
+ }
......@@ -184,7 +191,7 @@ index 00000000..bcf42c10
+ if (!(f=malloc(sizeof *f))) return 0;
+
+ /* Zero-fill only the struct, not the buffer */
+ memset(f, 0, sizeof(FILE));
+ memset(&f->f, 0, sizeof f->f);
+
+ /* Impose mode restrictions */
+ if (!strchr(mode, '+')) f->f.flags = (*mode == 'r') ? F_NOWR : F_NORD;
......@@ -198,13 +205,10 @@ index 00000000..bcf42c10
+
+ f->f.fd = -1;
+ f->f.cookie = &f->fc;
+ f->f.buf = f->buf;
+ f->f.buf = f->buf + UNGET;
+ f->f.buf_size = BUFSIZ;
+ f->f.lbf = EOF;
+
+ /* enable opportunistic stdio locking */
+ f->f.lock = 0;
+
+ /* Initialize op ptrs. No problem if some are unneeded. */
+ f->f.read = cookieread;
+ f->f.write = cookiewrite;
......
......@@ -2,7 +2,7 @@
# Maintainer: Timo Teräs <timo.teras@iki.fi>
pkgname=musl
pkgver=1.1.18
pkgrel=1
pkgrel=2
pkgdesc="the musl c library (libc) implementation"
url="http://www.musl-libc.org/"
arch="all"
......@@ -145,7 +145,7 @@ compat() {
sha512sums="4d55c92efe41dfdd9fff6aca5dda76a632a3be60d10e5a7f66a4731d8f7040fb0a20b998965ba4d069b4f8a3527fcd7388e646cb66afc649c4d0cc6c3d358c9c musl-1.1.18.tar.gz
7e4c703e57a3564cd3ee1d5334b806cbe654355179ba55d4d25361dfc555eb4a7d081d80d64fdaff8476949afd04558d278b124d1fb108080beaa5ba2f8ce2b9 1000-implement-strftime-GNU-extension-padding-specifiers-.patch
2c8e1dde1834238097b2ee8a7bfb53471a0d9cff4a5e38b55f048b567deff1cdd47c170d0578a67b1a039f95a6c5fbb8cff369c75b6a3e4d7ed171e8e86ebb8c 2000-pthread-internals-increase-DEFAULT_GUARD_SIZE-to-2-p.patch
30e7fdbdb5fd18d6b2d49b0277ca62d253a52087938b0f4ff75fba278ee3adcaae219043db130f8acd24713a8e2345aceda28d2f6a7d49de2d3ae8fba0eba924 3002-stdio-implement-fopencookie-3.patch
bdc6fe197779088507d6f8bb72560239f908a635b39eb677bfcf91da28b92ee52b67696e627dad08ccb8a7dcaf7a72b574276098fb3fddd4a6b646a0f0799785 3002-stdio-implement-fopencookie-3.patch
8d3a2d5315fc56fee7da9abb8b89bb38c6046c33d154c10d168fb35bfde6b0cf9f13042a3bceee34daf091bc409d699223735dcf19f382eeee1f6be34154f26f ldconfig
062bb49fa54839010acd4af113e20f7263dde1c8a2ca359b5fb2661ef9ed9d84a0f7c3bc10c25dcfa10bb3c5a4874588dff636ac43d5dbb3d748d75400756d0b __stack_chk_fail_local.c
0d80f37b34a35e3d14b012257c50862dfeb9d2c81139ea2dfa101d981d093b009b9fa450ba27a708ac59377a48626971dfc58e20a3799084a65777a0c32cbc7d getconf.c
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment