$OpenBSD: patch-calendar_libical_src_libical_icaltz-util_c,v 1.7 2009/03/04 20:09:43 jasper Exp $
--- calendar/libical/src/libical/icaltz-util.c.orig	Wed Feb 25 03:15:16 2009
+++ calendar/libical/src/libical/icaltz-util.c	Wed Feb 25 17:59:18 2009
@@ -23,6 +23,14 @@
 #include <string.h>
 #if defined(sun) && defined(__SVR4)
 #include <sys/byteorder.h>
+#elif defined(__OpenBSD__)
+#include <sys/types.h>
+#define __BYTE_ORDER	_BYTE_ORDER
+#define __LITTLE_ENDIAN	_LITTLE_ENDIAN
+#define __BIG_ENDIAN	_BIG_ENDIAN
+#define bswap_16	swap16
+#define bswap_32	swap32
+#define bswap_64	swap64
 #elif defined(_WIN32)
 #define BIG_ENDIAN 'B'
 #define LITTLE_ENDIAN 'l'
@@ -98,6 +106,8 @@ decode (const void *ptr)
     else if (BYTE_ORDER == LITTLE_ENDIAN && sizeof (int) == 4)
 #ifdef __linux__
         return bswap_32 (*(const int *) ptr);
+#elif __OpenBSD__
+	return swap32 (*(const uint32_t *) ptr);
 #else
          return bswap32 (*(const uint32_t *) ptr);
 #endif
@@ -381,7 +391,10 @@ icaltzutil_fetch_timezone (const char *location)
 		icalprop = icalproperty_new_tzname (types [zidx].zname);
 		icalcomponent_add_property (std_comp, icalprop);
 
-		trans = transitions [stdidx] + types [zidx].gmtoff;
+		if (num_trans)
+			trans = transitions [stdidx] + types [zidx].gmtoff;
+		else
+			trans = types [zidx].gmtoff;
 		icaltime = icaltime_from_timet (trans, 0);
 		dtstart = icaltime;
 		dtstart.year = 1970;
@@ -424,7 +437,10 @@ icaltzutil_fetch_timezone (const char *location)
 		icalprop = icalproperty_new_tzname (types [zidx].zname);
 		icalcomponent_add_property (dst_comp, icalprop);
 
-		trans = transitions [dstidx] + types [zidx].gmtoff;
+		if (num_trans)
+			trans = transitions [dstidx] + types [zidx].gmtoff;
+		else
+			trans = types [zidx].gmtoff;
 		icaltime = icaltime_from_timet (trans, 0);
 		dtstart = icaltime;
 		dtstart.year = 1970;
