$OpenBSD: patch-lib_fs_c,v 1.2 2010/05/19 13:45:15 espie Exp $
--- lib/fs.c.orig	Wed Jun 14 14:34:30 2000
+++ lib/fs.c	Wed May 19 13:05:05 2010
@@ -3,6 +3,73 @@
 #include <rpmlib.h>
 #include <rpmmacro.h>
 
+#ifdef __OpenBSD__
+#ifdef __aix__
+#define COMMENTCHAR '*'
+#else
+#define COMMENTCHAR '#'
+#endif
+
+#if HAVE_STRUCT_MNTTAB 
+static our_mntent * getmntent(FILE *filep) {
+    static struct mnttab entry;
+    static our_mntent item;
+
+    if (!fread(&entry, sizeof(entry), 1, filep)) return NULL;
+    item.our_mntdir = entry.mt_filsys;
+
+    return &item;
+}
+#else 
+#define getmntent internal_getmntent
+static our_mntent *getmntent(FILE *filep) {
+    static our_mntent item = { NULL };
+    char buf[1024], * start;
+    char * chptr;
+
+    if (item.our_mntdir) {
+	free(item.our_mntdir);
+    }
+    
+    while (fgets(buf, sizeof(buf) - 1, filep)) {
+	/* chop off \n */
+	buf[strlen(buf) - 1] = '\0';
+
+	chptr = buf;
+	while (isspace(*chptr)) chptr++;
+
+	if (*chptr == COMMENTCHAR) continue;
+
+#	if __aix__
+	    /* aix uses a screwed up file format */
+	    if (*chptr == '/') {
+		start = chptr;
+		while (*chptr != ':') chptr++;
+		*chptr = '\0';
+		item.mnt_dir = strdup(start);
+		return &item;
+	    }
+#	else 
+	    while (!isspace(*chptr) && (*chptr)) chptr++;
+	    if (!*chptr) return NULL;
+
+	    while (isspace(*chptr) && (*chptr)) chptr++;
+	    if (!*chptr) return NULL;
+	    start = chptr;
+	
+	    while (!isspace(*chptr) && (*chptr)) chptr++;
+	    *chptr = '\0';
+
+	    item.our_mntdir = strdup(start);
+	    return &item;
+#	endif
+    }
+
+    return NULL;
+}
+#endif
+#endif
+
 struct fsinfo {
     /*@only@*/ const char * mntPoint;
     dev_t dev;
@@ -301,3 +368,5 @@ int rpmGetFilesystemUsage(const char ** fileList, int_
 
     return 0;
 }
+
+
