mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 04:10:09 +01:00
util: Add os_same_file_description helper
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3202>
This commit is contained in:
parent
c6468f66c7
commit
f76cbc7901
2 changed files with 31 additions and 0 deletions
|
|
@ -34,7 +34,9 @@ os_file_create_unique(const char *filename, int filemode)
|
|||
#if defined(__linux__)
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <linux/kcmp.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
|
|
@ -130,8 +132,18 @@ os_read_file(const char *filename)
|
|||
return buf;
|
||||
}
|
||||
|
||||
bool
|
||||
os_same_file_description(int fd1, int fd2)
|
||||
{
|
||||
pid_t pid = getpid();
|
||||
|
||||
return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2) == 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "u_debug.h"
|
||||
|
||||
char *
|
||||
os_read_file(const char *filename)
|
||||
{
|
||||
|
|
@ -139,4 +151,15 @@ os_read_file(const char *filename)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
bool
|
||||
os_same_file_description(int fd1, int fd2)
|
||||
{
|
||||
if (fd1 == fd2)
|
||||
return true;
|
||||
|
||||
debug_warn_once("Can't tell if different file descriptors reference the same"
|
||||
" file description, false negatives might cause trouble!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#ifndef _OS_FILE_H_
|
||||
#define _OS_FILE_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
@ -30,6 +31,13 @@ os_file_create_unique(const char *filename, int filemode);
|
|||
char *
|
||||
os_read_file(const char *filename);
|
||||
|
||||
/*
|
||||
* Returns true if the two file descriptors passed in can be determined to
|
||||
* reference the same file description, false otherwise
|
||||
*/
|
||||
bool
|
||||
os_same_file_description(int fd1, int fd2);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue