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