]> git.sur5r.net Git - openldap/blobdiff - include/lutil.h
add (partial) support for draft-ietf-ldapext-ldapv3-dupent-08.txt (expired)
[openldap] / include / lutil.h
index c1a15b229f69e8026840100f4519d88c49659ad0..a0dd1166c887078121f2a0d641d0c6513b47c18a 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2005 The OpenLDAP Foundation.
+ * Copyright 1998-2010 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -158,6 +158,7 @@ typedef struct lutil_tm {
        int tm_mon;     /* month 0-11 */
        int tm_year;    /* year - 1900 */
        int tm_usec;    /* microseconds */
+       int tm_usub;    /* submicro */
 } lutil_tm;
 
 typedef struct lutil_timet {
@@ -166,10 +167,12 @@ typedef struct lutil_timet {
        unsigned int tt_usec;   /* microseconds */
 } lutil_timet;
 
+/* Parse a timestamp string into a structure */
 LDAP_LUTIL_F( int )
 lutil_parsetime LDAP_P((
        char *atm, struct lutil_tm * ));
 
+/* Convert structured time to time in seconds since 1900 */
 LDAP_LUTIL_F( int )
 lutil_tm2time LDAP_P((
        struct lutil_tm *, struct lutil_timet * ));
@@ -188,6 +191,11 @@ lutil_strcopy LDAP_P(( char *dst, const char *src ));
 LDAP_LUTIL_F( char* )
 lutil_strncopy LDAP_P(( char *dst, const char *src, size_t n ));
 
+LDAP_LUTIL_F( char* )
+lutil_memcopy LDAP_P(( char *dst, const char *src, size_t n ));
+
+#define lutil_strbvcopy(a, bv) lutil_memcopy((a),(bv)->bv_val,(bv)->bv_len)
+
 struct tm;
 
 /* use this macro to statically allocate buffer for lutil_gentime */
@@ -212,11 +220,12 @@ lutil_pair( ber_socket_t sd[2] );
 LDAP_LUTIL_F( size_t )
 lutil_uuidstr( char *buf, size_t len );
 
-/* csn.c */
-/* use this macro to allocate buffer for lutil_csnstr */
-#define LDAP_LUTIL_CSNSTR_BUFSIZE      64
-LDAP_LUTIL_F( size_t )
-lutil_csnstr( char *buf, size_t len, unsigned int replica, unsigned int mod );
+LDAP_LUTIL_F( int )
+lutil_uuidstr_from_normalized(
+       char            *uuid,
+       size_t          uuidlen,
+       char            *buf,
+       size_t          buflen );
 
 /*
  * Sometimes not all declarations in a header file are needed.
@@ -274,23 +283,72 @@ lutil_LogStoppedEvent( char *svc );
 #endif
 
 LDAP_LUTIL_F (int)
-lutil_atoi( int *v, const char *s );
+lutil_atoix( int *v, const char *s, int x );
 
 LDAP_LUTIL_F (int)
-lutil_atou( unsigned *v, const char *s );
+lutil_atoux( unsigned *v, const char *s, int x );
 
 LDAP_LUTIL_F (int)
-lutil_atol( long *v, const char *s );
+lutil_atolx( long *v, const char *s, int x );
 
 LDAP_LUTIL_F (int)
-lutil_atoul( unsigned long *v, const char *s );
+lutil_atoulx( unsigned long *v, const char *s, int x );
+
+#define lutil_atoi(v, s)       lutil_atoix((v), (s), 10)
+#define lutil_atou(v, s)       lutil_atoux((v), (s), 10)
+#define lutil_atol(v, s)       lutil_atolx((v), (s), 10)
+#define lutil_atoul(v, s)      lutil_atoulx((v), (s), 10)
 
+#ifdef HAVE_LONG_LONG
+#if defined(HAVE_STRTOLL) || defined(HAVE_STRTOQ)
+LDAP_LUTIL_F (int)
+lutil_atollx( long long *v, const char *s, int x );
+#define lutil_atoll(v, s)      lutil_atollx((v), (s), 10)
+#endif /* HAVE_STRTOLL || HAVE_STRTOQ */
+
+#if defined(HAVE_STRTOULL) || defined(HAVE_STRTOUQ)
+LDAP_LUTIL_F (int)
+lutil_atoullx( unsigned long long *v, const char *s, int x );
+#define lutil_atoull(v, s)     lutil_atoullx((v), (s), 10)
+#endif /* HAVE_STRTOULL || HAVE_STRTOUQ */
+#endif /* HAVE_LONG_LONG */
+
+LDAP_LUTIL_F (int)
+lutil_str2bin( struct berval *in, struct berval *out, void *ctx );
+
+/* Parse and unparse time intervals */
 LDAP_LUTIL_F (int)
 lutil_parse_time( const char *in, unsigned long *tp );
 
 LDAP_LUTIL_F (int)
 lutil_unparse_time( char *buf, size_t buflen, unsigned long t );
 
+#ifdef timerdiv
+#define lutil_timerdiv timerdiv
+#else /* ! timerdiv */
+/* works inplace (x == t) */
+#define lutil_timerdiv(t,d,x) \
+       do { \
+               time_t s = (t)->tv_sec; \
+               assert( d > 0 ); \
+               (x)->tv_sec = s / d; \
+               (x)->tv_usec = ( (t)->tv_usec + 1000000 * ( s % d ) ) / d; \
+       } while ( 0 )
+#endif /* ! timerdiv */
+
+#ifdef timermul
+#define lutil_timermul timermul
+#else /* ! timermul */
+/* works inplace (x == t) */
+#define lutil_timermul(t,m,x) \
+       do { \
+               time_t u = (t)->tv_usec * m; \
+               assert( m > 0 ); \
+               (x)->tv_sec = (t)->tv_sec * m + u / 1000000; \
+               (x)->tv_usec = u % 1000000; \
+       } while ( 0 );
+#endif /* ! timermul */
+
 LDAP_END_DECL
 
 #endif /* _LUTIL_H */