Nigel J. Andrews wrote:
> On Thu, 11 Dec 2003, Alvaro Herrera wrote:
> 
> > On Thu, Dec 11, 2003 at 06:36:05PM -0500, Bruce Momjian wrote:
> > > Our dbcommands.c has for create database:
> > > 
> > >     snprintf(buf, sizeof(buf), "cp -r '%s' '%s'", src_loc, target_dir);
> > > 
> > [...]
> > > 
> > > I think we should switch to -R in our code.
> > 
> > But you will have to write special code for Win32, won't you?
> > Maybe it would be better to avoid using system commands
> > altogether and copy the whole thing using syscalls ...
> 
> That was my immediate thought. Unfortunately that means reinventing the
> wheel; or grabbing it from BSD or somewhere and distributing it with
> postgresql.

We already have in dbcommands.c:
        
        #ifndef WIN32
            snprintf(buf, sizeof(buf), "cp -r '%s' '%s'", src_loc, target_dir);
            if (system(buf) != 0)
            {
                if (remove_dbdirs(nominal_loc, alt_loc))
                    ereport(ERROR,
                            (errmsg("could not initialize database directory"),
                             errdetail("Failing system command was: %s", buf),
                             errhint("Look in the postmaster's stderr log for more 
information.")));
                else
                    ereport(ERROR,
                            (errmsg("could not initialize database directory; delete 
failed as well"),
                             errdetail("Failing system command was: %s", buf),
                             errhint("Look in the postmaster's stderr log for more 
information.")));
            }
        #else   /* WIN32 */
            if (copydir(src_loc, target_dir) != 0)
            {
                /* copydir should already have given details of its troubles */
                if (remove_dbdirs(nominal_loc, alt_loc))
                    ereport(ERROR,
                            (errmsg("could not initialize database directory")));
                else
                    ereport(ERROR,
                            (errmsg("could not initialize database directory; delete 
failed as well")));
            }
        #endif  /* WIN32 */

so Win32 is already handled by copydir.  One reason we didn't implement
this in C is because there might be some OS-specific handling for copy. 
copydir() is in port/copydir.c and is for Win32 alone.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to