Will this make it into 8.1?
>-----Original Message-----
>From: Tom Lane [mailto:[EMAIL PROTECTED]
>Sent: Thursday, January 27, 2005 7:38 PM
>To: Kenneth Lareau
>Cc: David Parker; [email protected]
>Subject: Re: [HACKERS] Strange issue with initdb on 8.0 and
>Solaris automounts
>
>Kenneth Lareau <[EMAIL PROTECTED]> writes:
>> In message <[EMAIL PROTECTED]>, Tom Lane writes:
>>> Could you truss that and see what it does?
>
>> Here's the relevant truss output from 'mkdir
>/software/postgresql-8.0.0'
>> on my Solaris 9 system:
>
>> 10832: mkdir("/software/postgresql-8.0.0", 0777) Err#89 ENOSYS
>> 10832: stat64("/software/postgresql-8.0.0", 0xFFBFFA38) = 0
>
>> It's doing the stat after the mkdir attempt it seems, and
>coming back
>> with the correct response. Hmm, maybe I should look at the
>Solaris 8
>> code for the mkdir command...
>
>Well, the important point is that the stat does succeed. I'm
>not going to put in anything as specific as a check for
>ENOSYS, but it seems reasonable to try the stat first and
>mkdir only if stat fails.
>I've applied the attached patch.
>
> regards, tom lane
>
>*** src/bin/initdb/initdb.c.orig Sat Jan 8 17:51:12 2005
>--- src/bin/initdb/initdb.c Thu Jan 27 19:23:49 2005
>***************
>*** 476,481 ****
>--- 476,484 ----
> * this tries to build all the elements of a path to a
>directory a la mkdir -p
> * we assume the path is in canonical form, i.e. uses / as
>the separator
> * we also assume it isn't null.
>+ *
>+ * note that on failure, the path arg has been modified to show the
>+ particular
>+ * directory level we had problems with.
> */
> static int
> mkdir_p(char *path, mode_t omode)
>***************
>*** 544,573 ****
> }
> if (last)
> (void) umask(oumask);
>! if (mkdir(path, last ? omode : S_IRWXU |
>S_IRWXG | S_IRWXO) < 0)
> {
>! if (errno == EEXIST || errno == EISDIR)
>! {
>! if (stat(path, &sb) < 0)
>! {
>! retval = 1;
>! break;
>! }
>! else if (!S_ISDIR(sb.st_mode))
>! {
>! if (last)
>! errno = EEXIST;
>! else
>! errno = ENOTDIR;
>! retval = 1;
>! break;
>! }
>! }
>! else
> {
> retval = 1;
> break;
> }
> }
> if (!last)
> *p = '/';
>--- 547,570 ----
> }
> if (last)
> (void) umask(oumask);
>!
>! /* check for pre-existing directory; ok if it's
>a parent */
>! if (stat(path, &sb) == 0)
> {
>! if (!S_ISDIR(sb.st_mode))
> {
>+ if (last)
>+ errno = EEXIST;
>+ else
>+ errno = ENOTDIR;
> retval = 1;
> break;
> }
>+ }
>+ else if (mkdir(path, last ? omode : S_IRWXU |
>S_IRWXG | S_IRWXO) < 0)
>+ {
>+ retval = 1;
>+ break;
> }
> if (!last)
> *p = '/';
>
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly