mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02: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__)
|
#if defined(__linux__)
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <linux/kcmp.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -130,8 +132,18 @@ os_read_file(const char *filename)
|
||||||
return buf;
|
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
|
#else
|
||||||
|
|
||||||
|
#include "u_debug.h"
|
||||||
|
|
||||||
char *
|
char *
|
||||||
os_read_file(const char *filename)
|
os_read_file(const char *filename)
|
||||||
{
|
{
|
||||||
|
|
@ -139,4 +151,15 @@ os_read_file(const char *filename)
|
||||||
return NULL;
|
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
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
#ifndef _OS_FILE_H_
|
#ifndef _OS_FILE_H_
|
||||||
#define _OS_FILE_H_
|
#define _OS_FILE_H_
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
@ -30,6 +31,13 @@ os_file_create_unique(const char *filename, int filemode);
|
||||||
char *
|
char *
|
||||||
os_read_file(const char *filename);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue