Index: /AE/Installer/trunk/source/include/dirent.h
===================================================================
--- /AE/Installer/trunk/source/include/dirent.h	(revision 306)
+++ /AE/Installer/trunk/source/include/dirent.h	(revision 306)
@@ -0,0 +1,121 @@
+/*
+ * DIRENT.H (formerly DIRLIB.H)
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ */
+#ifndef _DIRENT_H_
+#define _DIRENT_H_
+
+#include <stdio.h>
+#include <io.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dirent
+{
+	long		d_ino;		/* Always zero. */
+	unsigned short	d_reclen;	/* Always zero. */
+	unsigned short	d_namlen;	/* Length of name in d_name. */
+	char		d_name[FILENAME_MAX]; /* File name. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ * dd_stat field is now int (was short in older versions).
+ */
+typedef struct
+{
+	/* disk transfer area for this dir */
+	struct _finddata_t	dd_dta;
+
+	/* dirent struct to return from dir (NOTE: this makes this thread
+	 * safe as long as only one thread uses a particular DIR struct at
+	 * a time) */
+	struct dirent		dd_dir;
+
+	/* _findnext handle */
+	long			dd_handle;
+
+	/*
+         * Status of search:
+	 *   0 = not started yet (next entry to read is first entry)
+	 *  -1 = off the end
+	 *   positive = 0 based index of next entry
+	 */
+	int			dd_stat;
+
+	/* given path for dir with search pattern (struct is extended) */
+	char			dd_name[1];
+} DIR;
+
+DIR* __cdecl opendir (const char*);
+struct dirent* __cdecl readdir (DIR*);
+int __cdecl closedir (DIR*);
+void __cdecl rewinddir (DIR*);
+long __cdecl telldir (DIR*);
+void __cdecl seekdir (DIR*, long);
+
+
+/* wide char versions */
+
+struct _wdirent
+{
+	long		d_ino;		/* Always zero. */
+	unsigned short	d_reclen;	/* Always zero. */
+	unsigned short	d_namlen;	/* Length of name in d_name. */
+	wchar_t		d_name[FILENAME_MAX]; /* File name. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ */
+typedef struct
+{
+	/* disk transfer area for this dir */
+	struct _wfinddata_t	dd_dta;
+
+	/* dirent struct to return from dir (NOTE: this makes this thread
+	 * safe as long as only one thread uses a particular DIR struct at
+	 * a time) */
+	struct _wdirent		dd_dir;
+
+	/* _findnext handle */
+	long			dd_handle;
+
+	/*
+         * Status of search:
+	 *   0 = not started yet (next entry to read is first entry)
+	 *  -1 = off the end
+	 *   positive = 0 based index of next entry
+	 */
+	int			dd_stat;
+
+	/* given path for dir with search pattern (struct is extended) */
+	wchar_t			dd_name[1];
+} _WDIR;
+
+
+
+_WDIR* __cdecl _wopendir (const wchar_t*);
+struct _wdirent*  __cdecl _wreaddir (_WDIR*);
+int __cdecl _wclosedir (_WDIR*);
+void __cdecl _wrewinddir (_WDIR*);
+long __cdecl _wtelldir (_WDIR*);
+void __cdecl _wseekdir (_WDIR*, long);
+
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* Not RC_INVOKED */
+
+#endif	/* Not _DIRENT_H_ */
Index: /AE/Installer/trunk/source/subs.cpp
===================================================================
--- /AE/Installer/trunk/source/subs.cpp	(revision 305)
+++ /AE/Installer/trunk/source/subs.cpp	(revision 306)
@@ -82,22 +82,18 @@
 
 	string filename = "\0";
-	string MODINFO_CFG = "\\Mod_Info.cfg";
-
-
-
-	DIR *pdir;
-	struct dirent *pent;
-
-	pdir = opendir( path.c_str() ); //"." refers to the current dir
-	if (!pdir){
-		printf ("\nopendir() failure; terminating");
-		exit(1);
-	}
-	errno=0; 
-
-	while (( pent = readdir(pdir) )){
-
-		filename = path + '\\' + pent->d_name + MODINFO_CFG;
-		file.open(filename.c_str());
+	string MODINFO_CFG = "Mod_Info.cfg";
+
+	try
+	{
+
+
+	directory_iterator end_iter;
+	for ( directory_iterator dir_itr( "./packages" );
+		dir_itr != end_iter;
+		++dir_itr )
+	{
+
+		
+		file.open( (dir_itr->path().string() + "/" + MODINFO_CFG ).c_str());
 
 		//cout << filename << "\n";
@@ -105,8 +101,5 @@
 		if(!file.fail() )
 		{
-			//file.open(filename.c_str(), fstream::out);
-
-			//do stuff like adding to vector :P
-
+			cout << dir_itr->path().string() + MODINFO_CFG ;
 			//would prefer to push a pointer to a package, but this will do for now
 			packages.push_back( fileToModPackage(file) );
@@ -116,13 +109,14 @@
 		file.clear();
 
-	}
-
-
-	if (errno){
-		printf ("readdir() failure; terminating");
-		exit(1);
-	}
-	closedir(pdir);
-
+
+
+	}
+
+
+	}
+	catch ( const std::exception & ex )
+	{
+		cout << "Warning, something odd happened!\n";
+	}
 
 	return packages;
@@ -376,5 +370,5 @@
 				catch( const std::exception & ex ) {
 					cout << "Warning, exception " << ex.what() << "!\n"
-						<< "You probably need to reGlobalize.;
+						<< "You probably need to reGlobalize.";
 					create_directory( "./packages/VanillaDats" );
 				}
