Re: [HACKERS] initdb mkdir_p() doesn't work - Mailing list pgsql-patches

From Andrew Dunstan
Subject Re: [HACKERS] initdb mkdir_p() doesn't work
Date
Msg-id 3FC1111C.6040802@dunslane.net
Whole thread Raw
Responses Re: [HACKERS] initdb mkdir_p() doesn't work
Re: [HACKERS] initdb mkdir_p() doesn't work
List pgsql-patches

Andrew Dunstan wrote:

>
>
> Peter Eisentraut wrote:
>
>> Here is what I get:
>>
>> peter ~$ pg-install/bin/initdb pg-install/var/data
>> ...
>> creating directory pg-install/var/data ... initdb: failed
>>
>> No points for details in the error message here either.
>>
>> If I create pg-install/var first, then it work.
>>
>
> I will check it out. I know I spent quite some time making sure this
> worked, but I might have missed something obvious. I wonder if it is
> platform specific?
>
>

I don't remember why the code is the way it is. The failure appears to
be before we ever get to mkdir_p(). I can't see any reason right now why
we can't call mkdir_p() in all cases. The attached patch does that (and
makes the code slightly simpler as a result). I tested it with one
element and 2 element existant and nonexistant paths, and it appeared to
work for all of them.

cheers

andrew

? .deps
? initdb
Index: initdb.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/initdb/initdb.c,v
retrieving revision 1.11
diff -c -w -r1.11 initdb.c
*** initdb.c    17 Nov 2003 20:35:28 -0000    1.11
--- initdb.c    23 Nov 2003 19:46:56 -0000
***************
*** 797,803 ****
  mkdatadir(char *subdir)
  {
      char       *path;
-     int            res;

      path = xmalloc(strlen(pg_data) + 2 +
                     (subdir == NULL ? 0 : strlen(subdir)));
--- 797,802 ----
***************
*** 807,819 ****
      else
          strcpy(path, pg_data);

!     res = mkdir(path, 0700);
!     if (res == 0)
!         return true;
!     else if (subdir == NULL || errno != ENOENT)
!         return false;
!     else
!         return !mkdir_p(path, 0700);
  }


--- 806,812 ----
      else
          strcpy(path, pg_data);

!     return (mkdir_p(path, 0700) == 0);
  }



pgsql-patches by date:

Previous
From: Tom Lane
Date:
Subject: Re: COMMENT ON mega patch
Next
From: Peter Eisentraut
Date:
Subject: Re: internationalization of initdb