mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
Add virFileAbsPath() utility
* src/util/util.[ch]: Add virFileAbsPath() function to ensure an absolute path for a potentially realtive path. * src/libvirt_private.syms: add it in libvirt private symbols
This commit is contained in:
parent
624a7927f0
commit
2e812c89e9
@ -445,6 +445,7 @@ virFileExists;
|
||||
virFileHasSuffix;
|
||||
virFileLinkPointsTo;
|
||||
virFileMakePath;
|
||||
virFileAbsPath;
|
||||
virFileOpenTty;
|
||||
virFileReadLimFD;
|
||||
virFilePid;
|
||||
|
@ -1402,6 +1402,42 @@ cleanup:
|
||||
|
||||
#endif /* PROXY */
|
||||
|
||||
/*
|
||||
* Creates an absolute path for a potentialy realtive path.
|
||||
* Return 0 if the path was not relative, or on success.
|
||||
* Return -1 on error.
|
||||
*
|
||||
* You must free the result.
|
||||
*/
|
||||
int virFileAbsPath(const char *path, char **abspath)
|
||||
{
|
||||
char *buf;
|
||||
int cwdlen;
|
||||
|
||||
if (path[0] == '/') {
|
||||
buf = strdup(path);
|
||||
if (buf == NULL)
|
||||
return(-1);
|
||||
} else {
|
||||
buf = getcwd(NULL, 0);
|
||||
if (buf == NULL)
|
||||
return(-1);
|
||||
|
||||
cwdlen = strlen(buf);
|
||||
/* cwdlen includes the null terminator */
|
||||
if (VIR_REALLOC_N(buf, cwdlen + strlen(path) + 1) < 0) {
|
||||
VIR_FREE(buf);
|
||||
errno = ENOMEM;
|
||||
return(-1);
|
||||
}
|
||||
|
||||
buf[cwdlen] = '/';
|
||||
strcpy(&buf[cwdlen + 1], path);
|
||||
}
|
||||
|
||||
*abspath = buf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Like strtol, but produce an "int" result, and check more carefully.
|
||||
Return 0 upon success; return -1 to indicate failure.
|
||||
|
@ -115,6 +115,9 @@ int virFileBuildPath(const char *dir,
|
||||
char *buf,
|
||||
unsigned int buflen);
|
||||
|
||||
int virFileAbsPath(const char *path,
|
||||
char **abspath);
|
||||
|
||||
int virFileOpenTty(int *ttymaster,
|
||||
char **ttyName,
|
||||
int rawmode);
|
||||
|
Loading…
Reference in New Issue
Block a user