sysfsutils: move to the correct directory
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Fri, 19 Oct 2012 10:22:11 +0000 (10:22 +0000)
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Fri, 19 Oct 2012 10:22:11 +0000 (10:22 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33856 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/libs/sysfsutils/Makefile [new file with mode: 0644]
package/libs/sysfsutils/patches/200-mnt_path_check.patch [new file with mode: 0644]

diff --git a/package/libs/sysfsutils/Makefile b/package/libs/sysfsutils/Makefile
new file mode 100644 (file)
index 0000000..3c43bbc
--- /dev/null
@@ -0,0 +1,70 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=sysfsutils
+PKG_VERSION:=2.1.0
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/linux-diag
+PKG_MD5SUM:=14e7dcd0436d2f49aa403f67e1ef7ddc
+PKG_MAINTAINER:=Jo-Philipp Wich <jow@openwrt.org>
+
+PKG_FIXUP:=autoreconf
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libsysfs
+  SECTION:=libs
+  CATEGORY:=Libraries
+  SUBMENU:=Filesystem
+  TITLE:=Sysfs library
+  URL:=http://linux-diag.sourceforge.net/Sysfsutils.html
+endef
+
+define Package/sysfsutils
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Filesystem
+  DEPENDS:=+libsysfs
+  TITLE:=System Utilities Based on Sysfs
+  URL:=http://linux-diag.sourceforge.net/Sysfsutils.html
+endef
+
+define Package/libsysfs/description
+The library's purpose is to provide a consistant and stable interface for
+querying system device information exposed through sysfs.
+endef
+
+define Package/sysfsutils/description
+A utility built upon libsysfs that lists devices by bus, class, and topology.
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/sysfs $(1)/usr/include/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsysfs.{a,so*,la} $(1)/usr/lib/
+endef
+
+define Package/libsysfs/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsysfs.so* $(1)/usr/lib/
+endef
+
+define Package/sysfsutils/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/systool $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,libsysfs))
+$(eval $(call BuildPackage,sysfsutils))
diff --git a/package/libs/sysfsutils/patches/200-mnt_path_check.patch b/package/libs/sysfsutils/patches/200-mnt_path_check.patch
new file mode 100644 (file)
index 0000000..8710578
--- /dev/null
@@ -0,0 +1,55 @@
+--- a/lib/sysfs_utils.c
++++ b/lib/sysfs_utils.c
+@@ -22,6 +22,7 @@
+  */
+ #include "libsysfs.h"
+ #include "sysfs.h"
++#include <mntent.h>
+ /**
+  * sysfs_remove_trailing_slash: Removes any trailing '/' in the given path
+@@ -53,6 +54,9 @@ int sysfs_get_mnt_path(char *mnt_path, s
+ {
+       static char sysfs_path[SYSFS_PATH_MAX] = "";
+       const char *sysfs_path_env;
++      FILE *mnt;
++      struct mntent *mntent;
++      int ret;
+       if (len == 0 || mnt_path == NULL)
+               return -1;
+@@ -64,12 +68,31 @@ int sysfs_get_mnt_path(char *mnt_path, s
+               if (sysfs_path_env != NULL) {
+                       safestrcpymax(mnt_path, sysfs_path_env, len);
+                       sysfs_remove_trailing_slash(mnt_path);
+-                      return 0;
++              } else {
++                      safestrcpymax(mnt_path, SYSFS_MNT_PATH, len);
+               }
+-              safestrcpymax(mnt_path, SYSFS_MNT_PATH, len);
+       }
+-      return 0;
++      /* check that mount point is indeed mounted */
++      ret = -1;
++      if ((mnt = setmntent(SYSFS_PROC_MNTS, "r")) == NULL) {
++              dprintf("Error getting mount information\n");
++              return -1;
++      }
++      while ((mntent = getmntent(mnt)) != NULL) {
++              if (strcmp(mntent->mnt_type, SYSFS_FSTYPE_NAME) == 0 &&
++                      strcmp(mntent->mnt_dir, mnt_path) == 0) {
++                      ret = 0;
++                      break;
++              }
++      }
++      
++      endmntent(mnt);
++
++      if (ret < 0)
++              errno = ENOENT;
++
++      return ret;
+ }
+ /**