mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 14:15:28 +00:00
maint: fix some compilation issues on non-linux platforms (part 2)
Get rid of the #if __linux__ check in virPidFileReadPathIfAlive that was preventing a check of a symbolic link in /proc/<pid>/exe on non-linux platforms against an expected executable. Replace this with a run-time check testing whether the /proc/<pid>/exe is a symbolic link and if so call the function doing the comparison against the expected file the link is supposed to point to.
This commit is contained in:
parent
f4765b691d
commit
57c7b40b76
@ -1047,6 +1047,7 @@ virFileExists;
|
||||
virFileFindMountPoint;
|
||||
virFileHasSuffix;
|
||||
virFileIsExecutable;
|
||||
virFileIsLink;
|
||||
virFileLinkPointsTo;
|
||||
virFileLock;
|
||||
virFileMakePath;
|
||||
|
@ -570,6 +570,23 @@ int virFileResolveLink(const char *linkpath,
|
||||
return *resultpath == NULL ? -1 : 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Check whether the given file is a link.
|
||||
* Returns 1 in case of the file being a link, 0 in case it is not
|
||||
* a link and the negative errno in all other cases.
|
||||
*/
|
||||
int virFileIsLink(const char *linkpath)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (lstat(linkpath, &st) < 0)
|
||||
return -errno;
|
||||
|
||||
return (S_ISLNK(st.st_mode) != 0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Finds a requested executable file in the PATH env. e.g.:
|
||||
* "kvm-img" will return "/usr/bin/kvm-img"
|
||||
|
@ -78,6 +78,9 @@ int virFileLinkPointsTo(const char *checkLink,
|
||||
int virFileResolveLink(const char *linkpath,
|
||||
char **resultpath) ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
int virFileIsLink(const char *linkpath)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
char *virFindFileInPath(const char *file);
|
||||
|
||||
bool virFileExists(const char *file) ATTRIBUTE_NONNULL(1);
|
||||
|
@ -210,10 +210,11 @@ int virPidFileReadPathIfAlive(const char *path,
|
||||
*pid = -1;
|
||||
return 0;
|
||||
}
|
||||
#ifdef __linux__
|
||||
if (virFileLinkPointsTo(procpath, binpath) == 0)
|
||||
|
||||
if (virFileIsLink(procpath) &&
|
||||
virFileLinkPointsTo(procpath, binpath) == 0)
|
||||
*pid = -1;
|
||||
#endif
|
||||
|
||||
VIR_FREE(procpath);
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user