openbsd-ports/misc/rpm/patches/patch-lib_fs_c
2010-05-19 13:45:15 +00:00

84 lines
1.8 KiB
Plaintext

$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;
}
+
+