On 18 November 2013 23:25 Andres Freund wrote:
> On 2013-11-18 15:01:42 +0000, Haribabu kommi wrote:
> >
> > /*
> > + * Returns the malloced string of containing current working
> directory.
> > + * The caller has to take care of freeing the memory.
> > + * On failure exits with error code.
> > + */
> > +static char *
> > +get_current_working_dir()
> > +{
> > + char *buf;
> > + size_t buflen;
> > +
> > + buflen = MAXPGPATH;
> > + for (;;)
> > + {
> > + buf = pg_malloc(buflen);
> > + if (getcwd(buf, buflen))
> > + break;
> > + else if (errno == ERANGE)
> > + {
> > + pg_free(buf);
> > + buflen *= 2;
> > + continue;
> > + }
> > + else
> > + {
> > + pg_free(buf);
> > + fprintf(stderr,
> > + _("%s: could not get current working
> directory: %s\n"),
> > + progname, strerror(errno));
> > + exit(1);
> > + }
> > + }
> > +
> > + return buf;
> > +}
> > +
> > +/*
> > + * calculates the absolute path for the given path. The output
> > +absolute path
> > + * is a malloced string. The caller needs to take care of freeing
> the memory.
> > + */
> > +static char *
> > +get_absolute_path(const char *input_path) {
> > + char *pwd = NULL;
> > + char *abspath = NULL;
> > +
> > + /* Getting the present working directory */
> > + pwd = get_current_working_dir();
> > +
> > + if (chdir(input_path) < 0)
> > + {
> > + /* Directory doesn't exist */
> > + if (errno == ENOENT)
> > + return NULL;
> > +
> > + fprintf(stderr, _("%s: could not change directory to
> \"%s\": %s\n"),
> > + progname, input_path, strerror(errno));
> > + exit(1);
> > + }
> > +
> > + abspath = get_current_working_dir();
> > +
> > + /* Returning back to old working directory */
> > + if (chdir(pwd) < 0)
> > + {
> > + fprintf(stderr, _("%s: could not change directory to
> \"%s\": %s\n"),
> > + progname, pwd, strerror(errno));
> > + exit(1);
> > + }
> > +
> > + pg_free(pwd);
> > + return abspath;
> > +}
>
> This looks like it should be replaced by moving make_absolute_path from
> pg_regress.c to path.[ch] and then use that.
The "get_absolute_path" function removes any parent references, if exists, in the path
But the "make_absolute_path" doesn't. In this patch proper path is required to compare
The xlog and data directories provided are same or not?
I find two ways to do this
1. change to that provided directory and get the current working directory.
2. Write a function to remove the parent references in the path.
This patch has implemented the first approach. Please let me know your suggestions.
Regards,
Hari babu.