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.


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to