FreeBSD Bugzilla – Attachment 148739 Details for
Bug 194116
[Port update] devel/ding-libs 0.1.3_1 -> 0.4.0
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
updated tentative fmemopen() fix for < 9.2 / incorporated libintl fix
dingpatch (text/plain), 13.60 KB, created by
aweits
on 2014-10-28 16:14:39 UTC
(
hide
)
Description:
updated tentative fmemopen() fix for < 9.2 / incorporated libintl fix
Filename:
MIME Type:
Creator:
aweits
Created:
2014-10-28 16:14:39 UTC
Size:
13.60 KB
patch
obsolete
>diff --git a/devel/ding-libs/files/extra-patch-Makefile.am b/devel/ding-libs/files/extra-patch-Makefile.am >new file mode 100644 >index 0000000..4990479 >--- /dev/null >+++ b/devel/ding-libs/files/extra-patch-Makefile.am >@@ -0,0 +1,20 @@ >+--- Makefile.am.orig 2014-05-09 20:57:53 UTC >++++ Makefile.am >+@@ -42,7 +42,7 @@ >+ >+ DOXYGEN = @DOXYGEN@ >+ >+-pkgconfigdir = $(libdir)/pkgconfig >++pkgconfigdir = $(prefix)/libdata/pkgconfig >+ >+ dist_pkgconfig_DATA = >+ dist_doc_DATA = >+@@ -233,6 +233,8 @@ >+ dist_include_HEADERS += ini/ini_config.h ini/ini_configobj.h ini/ini_valueobj.h ini/ini_comment.h >+ >+ libini_config_la_SOURCES = \ >++ ini/flags.c \ >++ ini/fmemopen.c \ >+ ini/ini_config.c \ >+ ini/ini_config.h \ >+ ini/ini_get_value.c \ >diff --git a/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c b/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c >new file mode 100644 >index 0000000..24d94ee >--- /dev/null >+++ b/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c >@@ -0,0 +1,12 @@ >+--- ini/ini_fileobj.c.orig 2014-10-28 15:23:27 UTC >++++ ini/ini_fileobj.c >+@@ -32,6 +32,9 @@ >+ #include "ini_config_priv.h" >+ #include "path_utils.h" >+ >++extern int __sflags(const char *, int *); >++FILE *fmemopen(void * __restrict, size_t, const char * __restrict); >++ >+ #define ICONV_BUFFER 5000 >+ >+ #define BOM4_SIZE 4 >diff --git a/devel/ding-libs/files/extra-patch-ini__libini_config.sym b/devel/ding-libs/files/extra-patch-ini__libini_config.sym >new file mode 100644 >index 0000000..fcdf6342 >--- /dev/null >+++ b/devel/ding-libs/files/extra-patch-ini__libini_config.sym >@@ -0,0 +1,11 @@ >+--- ini/libini_config.sym.orig 2014-10-23 22:57:13 UTC >++++ ini/libini_config.sym >+@@ -1,6 +1,8 @@ >+ INI_CONFIG_1.1.0 { >+ global: >+ /* ini_config.h */ >++ __sflags; >++ fmemopen; >+ config_from_file; >+ config_from_fd; >+ config_from_file_with_metadata; >diff --git a/devel/ding-libs/files/flags.c b/devel/ding-libs/files/flags.c >new file mode 100644 >index 0000000..087c44a >--- /dev/null >+++ b/devel/ding-libs/files/flags.c >@@ -0,0 +1,113 @@ >+/*- >+ * Copyright (c) 1990, 1993 >+ * The Regents of the University of California. All rights reserved. >+ * >+ * This code is derived from software contributed to Berkeley by >+ * Chris Torek. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * 3. Neither the name of the University nor the names of its contributors >+ * may be used to endorse or promote products derived from this software >+ * without specific prior written permission. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND >+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE >+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS >+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) >+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT >+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY >+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF >+ * SUCH DAMAGE. >+ */ >+ >+#if defined(LIBC_SCCS) && !defined(lint) >+static char sccsid[] = "@(#)flags.c 8.1 (Berkeley) 6/4/93"; >+#endif /* LIBC_SCCS and not lint */ >+#include <sys/cdefs.h> >+__FBSDID("$FreeBSD: head/lib/libc/stdio/flags.c 255303 2013-09-06 13:47:16Z jilles $"); >+ >+#include <sys/types.h> >+#include <sys/file.h> >+#include <stdio.h> >+#include <errno.h> >+ >+// #include "local.h" >+ >+/* >+ * Return the (stdio) flags for a given mode. Store the flags >+ * to be passed to an _open() syscall through *optr. >+ * Return 0 on error. >+ */ >+int >+__sflags(const char *mode, int *optr) >+{ >+ int ret, m, o, known; >+ >+ switch (*mode++) { >+ >+ case 'r': /* open for reading */ >+ ret = __SRD; >+ m = O_RDONLY; >+ o = 0; >+ break; >+ >+ case 'w': /* open for writing */ >+ ret = __SWR; >+ m = O_WRONLY; >+ o = O_CREAT | O_TRUNC; >+ break; >+ >+ case 'a': /* open for appending */ >+ ret = __SWR; >+ m = O_WRONLY; >+ o = O_CREAT | O_APPEND; >+ break; >+ >+ default: /* illegal mode */ >+ errno = EINVAL; >+ return (0); >+ } >+ >+ do { >+ known = 1; >+ switch (*mode++) { >+ case 'b': >+ /* 'b' (binary) is ignored */ >+ break; >+ case '+': >+ /* [rwa][b]\+ means read and write */ >+ ret = __SRW; >+ m = O_RDWR; >+ break; >+ case 'x': >+ /* 'x' means exclusive (fail if the file exists) */ >+ o |= O_EXCL; >+ break; >+ case 'e': >+ /* set close-on-exec */ >+ o |= O_CLOEXEC; >+ break; >+ default: >+ known = 0; >+ break; >+ } >+ } while (known); >+ >+ if ((o & O_EXCL) != 0 && m == O_RDONLY) { >+ errno = EINVAL; >+ return (0); >+ } >+ >+ *optr = m | o; >+ return (ret); >+} >diff --git a/devel/ding-libs/files/fmemopen.c b/devel/ding-libs/files/fmemopen.c >new file mode 100644 >index 0000000..559b36a >--- /dev/null >+++ b/devel/ding-libs/files/fmemopen.c >@@ -0,0 +1,259 @@ >+/*- >+ * Copyright (C) 2013 Pietro Cerutti <gahr@FreeBSD.org> >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND >+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE >+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS >+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) >+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT >+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY >+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF >+ * SUCH DAMAGE. >+ */ >+ >+#include <sys/cdefs.h> >+__FBSDID("$FreeBSD: head/lib/libc/stdio/fmemopen.c 266971 2014-06-02 13:48:57Z gahr $"); >+ >+#include <fcntl.h> >+#include <stdbool.h> >+#include <stdio.h> >+#include <stdlib.h> >+#include <string.h> >+#include <errno.h> >+// #include "local.h" >+ >+struct fmemopen_cookie >+{ >+ char *buf; /* pointer to the memory region */ >+ bool own; /* did we allocate the buffer ourselves? */ >+ char bin; /* is this a binary buffer? */ >+ size_t size; /* buffer length in bytes */ >+ size_t len; /* data length in bytes */ >+ size_t off; /* current offset into the buffer */ >+}; >+ >+static int fmemopen_read(void *cookie, char *buf, int nbytes); >+static int fmemopen_write(void *cookie, const char *buf, int nbytes); >+static fpos_t fmemopen_seek(void *cookie, fpos_t offset, int whence); >+static int fmemopen_close(void *cookie); >+ >+FILE * >+fmemopen(void * __restrict buf, size_t size, const char * __restrict mode) >+{ >+ struct fmemopen_cookie *ck; >+ FILE *f; >+ int flags, rc; >+ >+ /* >+ * POSIX says we shall return EINVAL if size is 0. >+ */ >+ if (size == 0) { >+ errno = EINVAL; >+ return (NULL); >+ } >+ >+ /* >+ * Retrieve the flags as used by open(2) from the mode argument, and >+ * validate them. >+ */ >+ rc = __sflags(mode, &flags); >+ if (rc == 0) { >+ errno = EINVAL; >+ return (NULL); >+ } >+ >+ /* >+ * There's no point in requiring an automatically allocated buffer >+ * in write-only mode. >+ */ >+ if (!(flags & O_RDWR) && buf == NULL) { >+ errno = EINVAL; >+ return (NULL); >+ } >+ >+ ck = malloc(sizeof(struct fmemopen_cookie)); >+ if (ck == NULL) { >+ return (NULL); >+ } >+ >+ ck->off = 0; >+ ck->size = size; >+ >+ /* Check whether we have to allocate the buffer ourselves. */ >+ ck->own = ((ck->buf = buf) == NULL); >+ if (ck->own) { >+ ck->buf = malloc(size); >+ if (ck->buf == NULL) { >+ free(ck); >+ return (NULL); >+ } >+ } >+ >+ /* >+ * POSIX distinguishes between w+ and r+, in that w+ is supposed to >+ * truncate the buffer. >+ */ >+ if (ck->own || mode[0] == 'w') { >+ ck->buf[0] = '\0'; >+ } >+ >+ /* Check for binary mode. */ >+ ck->bin = strchr(mode, 'b') != NULL; >+ >+ /* >+ * The size of the current buffer contents is set depending on the >+ * mode: >+ * >+ * for append (text-mode), the position of the first NULL byte, or the >+ * size of the buffer if none is found >+ * >+ * for append (binary-mode), the size of the buffer >+ * >+ * for read, the size of the buffer >+ * >+ * for write, 0 >+ */ >+ switch (mode[0]) { >+ case 'a': >+ ck->off = ck->len = strnlen(ck->buf, ck->size); >+ break; >+ case 'r': >+ ck->len = size; >+ break; >+ case 'w': >+ ck->len = 0; >+ break; >+ } >+ >+ f = funopen(ck, >+ flags & O_WRONLY ? NULL : fmemopen_read, >+ flags & O_RDONLY ? NULL : fmemopen_write, >+ fmemopen_seek, fmemopen_close); >+ >+ if (f == NULL) { >+ if (ck->own) >+ free(ck->buf); >+ free(ck); >+ return (NULL); >+ } >+ >+ /* >+ * Turn off buffering, so a write past the end of the buffer >+ * correctly returns a short object count. >+ */ >+ setvbuf(f, NULL, _IONBF, 0); >+ >+ return (f); >+} >+ >+static int >+fmemopen_read(void *cookie, char *buf, int nbytes) >+{ >+ struct fmemopen_cookie *ck = cookie; >+ >+ if (nbytes > ck->len - ck->off) >+ nbytes = ck->len - ck->off; >+ >+ if (nbytes == 0) >+ return (0); >+ >+ memcpy(buf, ck->buf + ck->off, nbytes); >+ >+ ck->off += nbytes; >+ >+ return (nbytes); >+} >+ >+static int >+fmemopen_write(void *cookie, const char *buf, int nbytes) >+{ >+ struct fmemopen_cookie *ck = cookie; >+ >+ if (nbytes > ck->size - ck->off) >+ nbytes = ck->size - ck->off; >+ >+ if (nbytes == 0) >+ return (0); >+ >+ memcpy(ck->buf + ck->off, buf, nbytes); >+ >+ ck->off += nbytes; >+ >+ if (ck->off > ck->len) >+ ck->len = ck->off; >+ >+ /* >+ * We append a NULL byte if all these conditions are met: >+ * - the buffer is not binary >+ * - the buffer is not full >+ * - the data just written doesn't already end with a NULL byte >+ */ >+ if (!ck->bin && ck->off < ck->size && ck->buf[ck->off - 1] != '\0') >+ ck->buf[ck->off] = '\0'; >+ >+ return (nbytes); >+} >+ >+static fpos_t >+fmemopen_seek(void *cookie, fpos_t offset, int whence) >+{ >+ struct fmemopen_cookie *ck = cookie; >+ >+ >+ switch (whence) { >+ case SEEK_SET: >+ if (offset > ck->size) { >+ errno = EINVAL; >+ return (-1); >+ } >+ ck->off = offset; >+ break; >+ >+ case SEEK_CUR: >+ if (ck->off + offset > ck->size) { >+ errno = EINVAL; >+ return (-1); >+ } >+ ck->off += offset; >+ break; >+ >+ case SEEK_END: >+ if (offset > 0 || -offset > ck->len) { >+ errno = EINVAL; >+ return (-1); >+ } >+ ck->off = ck->len + offset; >+ break; >+ >+ default: >+ errno = EINVAL; >+ return (-1); >+ } >+ >+ return (ck->off); >+} >+ >+static int >+fmemopen_close(void *cookie) >+{ >+ struct fmemopen_cookie *ck = cookie; >+ >+ if (ck->own) >+ free(ck->buf); >+ >+ free(ck); >+ >+ return (0); >+} >diff --git a/devel/ding-libs/files/patch-ini__ini_parse_ut.c b/devel/ding-libs/files/patch-ini__ini_parse_ut.c >new file mode 100644 >index 0000000..afb5bf7 >--- /dev/null >+++ b/devel/ding-libs/files/patch-ini__ini_parse_ut.c >@@ -0,0 +1,10 @@ >+--- ini/ini_parse_ut.c.orig 2014-05-09 20:57:53 UTC >++++ ini/ini_parse_ut.c >+@@ -26,6 +26,7 @@ >+ #include <stdlib.h> >+ #include <limits.h> >+ #include <sys/stat.h> >++#include <sys/wait.h> >+ #include "ini_defines.h" >+ #include "ini_configobj.h" >+ #include "ini_config_priv.h" >diff --git a/devel/ding-libs/Makefile b/devel/ding-libs/Makefile >index cda2d1a..d69ce76 100644 >--- a/devel/ding-libs/Makefile >+++ b/devel/ding-libs/Makefile >@@ -3,6 +3,7 @@ > > PORTNAME= ding-libs > DISTVERSION= 0.4.0 >+PORTREVISION= 0 > CATEGORIES= devel > MASTER_SITES= https://fedorahosted.org/released/${PORTNAME}/ > >@@ -12,9 +13,14 @@ COMMENT= Collection of useful libraries for developers > LICENSE= GPLv3 > > GNU_CONFIGURE= yes >-CPPFLAGS+= -I${LOCALBASE}/include -L${LOCALBASE}/lib > >-USES= gettext libtool pkgconfig >+CPPFLAGS+= -I${LOCALBASE}/include >+LIBS+= -L/usr/local/lib -liconv -lintl >+ >+USE_AUTOTOOLS= libtoolize aclocal autoconf autoheader automake >+AUTOMAKE_ARGS= -a -c -f >+ >+USES= iconv gettext libtool pkgconfig > USE_LDCONFIG= yes > INSTALL_TARGET= install-strip > >@@ -30,11 +36,22 @@ CONFIGURE_ARGS= --docdir=${DOCSDIR} > CONFIGURE_ARGS= --docdir=/dev/null > .endif > >+#fmemopen was commit r246120 >+.if ${OSVERSION} < 901502 >+EXTRA_PATCHES= ${FILESDIR}/extra-patch-Makefile.am \ >+ ${FILESDIR}/extra-patch-ini__libini_config.sym \ >+ ${FILESDIR}/extra-patch-ini__ini_fileobj.c >+.endif >+ > post-patch: >- @${REINPLACE_CMD} -e 's|libdir)/pkgconfig|prefix)/libdata/pkgconfig|' ${WRKSRC}/Makefile.in >+ @${REINPLACE_CMD} -e 's|libdir)/pkgconfig|prefix)/libdata/pkgconfig|' ${WRKSRC}/Makefile.am > @${REINPLACE_CMD} -e 's|malloc.h|stdlib.h|g' ${WRKSRC}/collection/collection_tools.c \ > ${WRKSRC}/refarray/ref_array.c >- @${REINPLACE_CMD} -e 's|if git log -1 &>/dev/null; then|if true; then|g' \ >- ${WRKSRC}/configure >+ @${REINPLACE_CMD} -e 's|git log -1 &>/dev/null|true|g' \ >+ ${WRKSRC}/configure.ac >+.if ${OSVERSION} < 901502 >+ @${CP} ${FILESDIR}/fmemopen.c ${WRKSRC}/ini/fmemopen.c >+ @${CP} ${FILESDIR}/flags.c ${WRKSRC}/ini/flags.c >+.endif > > .include <bsd.port.mk>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
aweits:
maintainer-approval+
Actions:
View
|
Diff
Attachments on
bug 194116
:
147935
|
147998
|
148587
|
148611
| 148739