[ofw] [PATCH] opensm: create all directories in database path

Hefty, Sean sean.hefty at intel.com
Wed Apr 20 14:57:57 PDT 2011


Replace CreateDirectory with SHCreateDirectoryEx, so that
intermediate directories in the database path are created.

This fixes an issue where opensm fails to start unless the
path has been created beforehand.

Signed-off-by: Sean Hefty <sean.hefty at intel.com>
---
 .../ulp/opensm/user/include/vendor/winosm_common.h |    1 +
 trunk/ulp/opensm/user/opensm/SOURCES               |    1 +
 trunk/ulp/opensm/user/opensm/osm_db_files.c        |   13 ++++++++-----
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/trunk/ulp/opensm/user/include/vendor/winosm_common.h b/trunk/ulp/opensm/user/include/vendor/winosm_common.h
index 91fdc13..0d9e291 100644
--- a/trunk/ulp/opensm/user/include/vendor/winosm_common.h
+++ b/trunk/ulp/opensm/user/include/vendor/winosm_common.h
@@ -12,6 +12,7 @@
 #include <linux\arpa\inet.h>
 #include <stdarg.h>
 #include <ctype.h>
+#include <shlobj.h>
 
 #include <complib\cl_debug.h>
 #define cl_is_debug osm_is_debug
diff --git a/trunk/ulp/opensm/user/opensm/SOURCES b/trunk/ulp/opensm/user/opensm/SOURCES
index 32302d4..622ac7d 100644
--- a/trunk/ulp/opensm/user/opensm/SOURCES
+++ b/trunk/ulp/opensm/user/opensm/SOURCES
@@ -34,6 +34,7 @@ OSM_HOME=..
 TARGETLIBS= \
 	$(SDK_LIB_PATH)\kernel32.lib \
 	$(SDK_LIB_PATH)\ws2_32.lib \
+	$(SDK_LIB_PATH)\shell32.lib \
 !if $(FREEBUILD)
 	$(VENDOR_LIBS) \
 	$(LIBPATH)\*\complib.lib \
diff --git a/trunk/ulp/opensm/user/opensm/osm_db_files.c b/trunk/ulp/opensm/user/opensm/osm_db_files.c
index 2fc8c53..3b7394e 100644
--- a/trunk/ulp/opensm/user/opensm/osm_db_files.c
+++ b/trunk/ulp/opensm/user/opensm/osm_db_files.c
@@ -166,13 +166,16 @@ int osm_db_init(IN osm_db_t * p_db, IN osm_log_t * p_log)
 	/* Create the directory if it doesn't exist */
 	/* There is a difference in creating directory between windows and linux */
 #ifdef __WIN__
-	/* Check if the directory exists. If not - create it. */
-	if (!CreateDirectory(p_db_imp->db_dir_name, NULL)) {
-		DWORD gle = GetLastError();
-		if (gle != ERROR_ALREADY_EXISTS) {
+	{
+		int ret;
+
+		/* Check if the directory exists. If not - create it. */
+		ret = SHCreateDirectoryEx(NULL, p_db_imp->db_dir_name, NULL);
+		if (ret != ERROR_SUCCESS && ret != ERROR_ALREADY_EXISTS &&
+			ret != ERROR_FILE_EXISTS) {
 			OSM_LOG(p_log, OSM_LOG_ERROR, "ERR 0x%x: "
 				"Failed to create the db directory:%s\n",
-				gle, p_db_imp->db_dir_name);
+				ret, p_db_imp->db_dir_name);
 			OSM_LOG_EXIT(p_log);
 			return 1;
 		}




More information about the ofw mailing list