/* $Id: c,v.canonicalise 3.2 1998/07/19 10:20:30 stoklund Exp stoklund $ */
/* canonicalise.c: Filename canonicalisation.

   Copyright (C) 1998 Jakob Stoklund Olesen

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */

#include "kpathsea:config.h"

#include "kpathsea:riscos.h"
#include "OS:osfscontro.h"

string
riscos_canonicalise (const_string path_name, const_string path)
{
  os_error *erp;
  string buffer = NULL;
  int size;

  assert (path_name != NULL);
  /* path may be NULL */

  /* First call to find size */
  erp = xosfscontrol_canonicalise_path (path_name, NULL, NULL, path,
					0, &size);
  if (erp == NULL)
    {
      size = 1 - size;
      buffer = xmalloc (size);
      /* Second call with a buffer */
      erp = xosfscontrol_canonicalise_path (path_name, buffer, NULL, path,
					    size, &size);
    }
  if (erp != NULL || size != 1)
    {
      if (buffer != NULL)
	free (buffer);
      /* Something went wrong, return path_name as given */
      return xstrdup (path_name);
    }
  return buffer;
}
