]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#8603 Add ldif_open_mem()
authorBrett Sheffield <brett@gladserv.com>
Mon, 20 Feb 2017 13:37:56 +0000 (13:37 +0000)
committerOndřej Kuzník <ondra@mistotebe.net>
Tue, 23 Jun 2020 09:31:08 +0000 (10:31 +0100)
ldif_open_mem() is the fmemopen(3) equivalent of ldif_open() which opens
an ldif steam from memory, rather than from a file.

configure.in
include/ldif.h
libraries/libldap/ldif.c

index 1e681bca311262d7c74837076cd37d5595229169..118fffae8512fc97cac460159979cb324802d5fa 100644 (file)
@@ -863,6 +863,7 @@ dnl ----------------------------------------------------------------
 dnl Checks for libraries
 
 AC_CHECK_FUNCS( sigaction sigset )
+AC_CHECK_FUNCS( fmemopen )
 
 dnl HP-UX requires -lV3
 dnl this is not needed on newer versions of HP-UX
index 8140c914de00f9b1247e4e2f9103713023f95900..5cb410069b1b2ead63c60ffa5cf661c80668c865 100644 (file)
@@ -99,6 +99,10 @@ typedef struct LDIFFP {
 LDAP_LDIF_F( LDIFFP * )
 ldif_open LDAP_P(( LDAP_CONST char *file, LDAP_CONST char *mode ));
 
+/* ldif_open equivalent that opens ldif stream in memory rather than from file */
+LDAP_LDIF_F( LDIFFP * )
+ldif_open_mem LDAP_P(( char *ldif, size_t size, LDAP_CONST char *mode ));
+
 LDAP_LDIF_F( void )
 ldif_close LDAP_P(( LDIFFP * ));
 
index 1c29619cf37f2022f1ca50b6096ee7d2db67eeca..860a975329382235d5a4b3b02ade26cc9c74e1b4 100644 (file)
@@ -740,6 +740,28 @@ ldif_open(
        return lfp;
 }
 
+LDIFFP *
+ldif_open_mem(
+       char *ldif,
+       size_t size,
+       LDAP_CONST char *mode
+)
+{
+#ifdef HAVE_FMEMOPEN
+       FILE *fp = fmemopen( ldif, size, mode );
+       LDIFFP *lfp = NULL;
+
+       if ( fp ) {
+               lfp = ber_memalloc( sizeof( LDIFFP ));
+               lfp->fp = fp;
+               lfp->prev = NULL;
+       }
+       return lfp;
+#else /* !HAVE_FMEMOPEN */
+       return NULL;
+#endif /* !HAVE_FMEMOPEN */
+}
+
 void
 ldif_close(
        LDIFFP *lfp