• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   Implement the realpath function.
3 
4   Copyright (c) 2011 - 2014, Intel Corporation
5   All rights reserved. This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13 #include <LibConfig.h>
14 #include <Library/BaseLib.h>
15 #include <Library/MemoryAllocationLib.h>
16 #include <errno.h>
17 
18 /** The realpath() function shall derive, from the pathname pointed to by
19     file_name, an absolute pathname that names the same file, whose resolution
20     does not involve '.', '..', or symbolic links.
21 
22     The generated pathname shall be stored as a null-terminated string, up to a
23     maximum of {PATH_MAX} bytes, in the buffer pointed to by resolved_name.
24 
25     If resolved_name is a null pointer, the behavior of realpath() is
26     implementation-defined.
27 
28   @param[in] file_name            The filename to convert.
29   @param[in,out] resolved_name    The resultant name.
30 
31   @retval NULL                    An error occured.
32   @return resolved_name.
33 **/
34 char *
realpath(char * file_name,char * resolved_name)35 realpath(
36   char *file_name,
37   char *resolved_name
38   )
39 {
40   CHAR16 *Temp;
41   if (file_name == NULL || resolved_name == NULL) {
42     errno = EINVAL;
43     return (NULL);
44   }
45   Temp = AllocateZeroPool((1+AsciiStrLen(file_name))*sizeof(CHAR16));
46   if (Temp == NULL) {
47     errno = ENOMEM;
48     return (NULL);
49   }
50   AsciiStrToUnicodeStr(file_name, Temp);
51   PathCleanUpDirectories(Temp);
52   UnicodeStrToAsciiStr(Temp, resolved_name);
53   return (resolved_name);
54 }
55