You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/06/28 05:11:16 UTC

[lucy-commits] svn commit: r1140418 - /incubator/lucy/trunk/charmonizer/src/Charmonizer/Probe/DirManip.c

Author: marvin
Date: Tue Jun 28 03:11:15 2011
New Revision: 1140418

URL: http://svn.apache.org/viewvc?rev=1140418&view=rev
Log:
LUCY-168 Rework DIR_SEP derivation.

Use symbol and header detection rather than probing to determine the determine
the directory separator character.  (The probing would often produce poor 
results because of hack fixes that allow "/" to work under Windows or "\\" 
to work under Cygwin.)

Modified:
    incubator/lucy/trunk/charmonizer/src/Charmonizer/Probe/DirManip.c

Modified: incubator/lucy/trunk/charmonizer/src/Charmonizer/Probe/DirManip.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/charmonizer/src/Charmonizer/Probe/DirManip.c?rev=1140418&r1=1140417&r2=1140418&view=diff
==============================================================================
--- incubator/lucy/trunk/charmonizer/src/Charmonizer/Probe/DirManip.c (original)
+++ incubator/lucy/trunk/charmonizer/src/Charmonizer/Probe/DirManip.c Tue Jun 28 03:11:15 2011
@@ -17,6 +17,7 @@
 #define CHAZ_USE_SHORT_NAMES
 
 #include "Charmonizer/Core/ConfWriter.h"
+#include "Charmonizer/Core/Compiler.h"
 #include "Charmonizer/Core/Dir.h"
 #include "Charmonizer/Core/Util.h"
 #include "Charmonizer/Core/HeaderChecker.h"
@@ -25,6 +26,12 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+static const char cygwin_code[] = 
+    QUOTE(#ifndef __CYGWIN__            )
+    QUOTE(  #error "Not Cygwin"         )
+    QUOTE(#endif                        )
+    QUOTE(int main() { return 0; }      );
+
 void
 DirManip_run(void) {
     FILE *f;
@@ -77,44 +84,17 @@ DirManip_run(void) {
         ConfWriter_append_conf("#define CHY_MAKEDIR_MODE_IGNORED 1\n");
     }
 
-    /* Create a directory. */
-    Dir_mkdir("_charm_test_dir_orig");
-
-    /* Try to create files under the new directory. */
-    if ((f = fopen("_charm_test_dir_orig\\backslash", "w")) != NULL) {
-        fclose(f);
-    }
-    if ((f = fopen("_charm_test_dir_orig/slash", "w")) != NULL) {
-        fclose(f);
+    if (CC_test_compile(cygwin_code, strlen(cygwin_code))) {
+        strcpy(dir_sep, "/");
     }
-
-    /* Rename the directory, then see which file we can get to. */
-    rename("_charm_test_dir_orig", "_charm_test_dir_mod");
-    if ((f = fopen("_charm_test_dir_mod\\backslash", "r")) != NULL) {
-        fclose(f);
+    else if (HeadCheck_check_header("windows.h")) {
         strcpy(dir_sep, "\\\\");
     }
-    else if ((f = fopen("_charm_test_dir_mod/slash", "r")) != NULL) {
-        fclose(f);
-        strcpy(dir_sep, "/");
-    }
     else {
-        /* Punt based on OS. */
-        #ifdef _WIN32
-        strcpy(dir_sep, "\\\\");
-        #else
         strcpy(dir_sep, "/");
-        #endif
     }
-    ConfWriter_append_conf("#define CHY_DIR_SEP \"%s\"\n", dir_sep);
 
-    /* Clean up - delete all possible files without verifying. */
-    remove("_charm_test_dir_mod/slash");
-    remove("_charm_test_dir_mod\\backslash");
-    remove("_charm_test_dir_orig/slash");
-    remove("_charm_test_dir_orig\\backslash");
-    Dir_rmdir("_charm_test_dir_orig");
-    Dir_rmdir("_charm_test_dir_mod");
+    ConfWriter_append_conf("#define CHY_DIR_SEP \"%s\"\n", dir_sep);
 
     /* See whether remove works on directories. */
     Dir_mkdir("_charm_test_remove_me");