On solaris, createdb/dropdb fails because of strange behavior of system().
authorTatsuo Ishii <ishii@postgresql.org>
Thu, 25 May 2000 06:53:43 +0000 (06:53 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Thu, 25 May 2000 06:53:43 +0000 (06:53 +0000)
(it returns error with errno ECHILD upon successful completion of commands).
This fix ignores an error from system() if errno == ECHILD.

src/backend/commands/dbcommands.c

index d09973f5402f09f909e948df3793824b14a982d4..4458edafaf27de53925b7708026852fbcac3613b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.53 2000/04/12 17:14:58 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.54 2000/05/25 06:53:43 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -148,13 +148,21 @@ createdb(const char *dbname, const char *dbpath, int encoding)
 
        snprintf(buf, sizeof(buf), "cp %s%cbase%ctemplate1%c* '%s'",
                         DataDir, SEP_CHAR, SEP_CHAR, SEP_CHAR, loc);
+#if defined(sun)
+       if (system(buf) != 0 && errno != ECHILD)
+#else
        if (system(buf) != 0)
+#endif
        {
                int                     ret;
 
                snprintf(buf, sizeof(buf), "rm -rf '%s'", loc);
                ret = system(buf);
+#if defined(sun)
+               if (ret == 0 || errno == ECHILD)
+#else
                if (ret == 0)
+#endif
                        elog(ERROR, "CREATE DATABASE: could not initialize database directory");
                else
                        elog(ERROR, "CREATE DATABASE: Could not initialize database directory. Delete failed as well");
@@ -281,7 +289,11 @@ dropdb(const char *dbname)
         * Remove the database's subdirectory and everything in it.
         */
        snprintf(buf, sizeof(buf), "rm -rf '%s'", path);
+#if defined(sun)
+       if (system(buf) != 0 && errno != ECHILD)
+#else
        if (system(buf) != 0)
+#endif
                elog(NOTICE, "DROP DATABASE: The database directory '%s' could not be removed", path);
 }