mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-08 12:12:05 +08:00
b56692bd2e
This commit adapts the xattr handling in the loggerd module to individual platforms, specifically macOS and others. It imports specific xattr functions based on the running system, enhancing compatibility and reducing the risk of errors. In specific, 'ENOATTR' error is now also taken into account which is relevant in some non-Linux platforms.
31 lines
905 B
Python
31 lines
905 B
Python
import os
|
|
import errno
|
|
import platform
|
|
|
|
if platform.system() == 'Darwin': # macOS
|
|
from xattr import getxattr as _getxattr
|
|
from xattr import setxattr as _setxattr
|
|
else:
|
|
from os import getxattr as _getxattr
|
|
from os import setxattr as _setxattr
|
|
|
|
_cached_attributes: dict[tuple, bytes | None] = {}
|
|
|
|
def getxattr(path: str, attr_name: str) -> bytes | None:
|
|
key = (path, attr_name)
|
|
if key not in _cached_attributes:
|
|
try:
|
|
response = _getxattr(path, attr_name)
|
|
except OSError as e:
|
|
# ENODATA means attribute hasn't been set
|
|
if e.errno == errno.ENODATA or e.errno == errno.ENOATTR:
|
|
response = None
|
|
else:
|
|
raise
|
|
_cached_attributes[key] = response
|
|
return _cached_attributes[key]
|
|
|
|
def setxattr(path: str, attr_name: str, attr_value: bytes) -> None:
|
|
_cached_attributes.pop((path, attr_name), None)
|
|
return _setxattr(path, attr_name, attr_value)
|