mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
Merge pull request #7334 from prahal/fix-kodi-eject
libcdio: add patch to fix cdio eject media when path has spaces
This commit is contained in:
commit
21c204a6b7
@ -0,0 +1,68 @@
|
|||||||
|
From 0d550dc9307901edd817333a5b530241d08ad889 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miguel Borges de Freitas <enen92@kodi.tv>
|
||||||
|
Date: Wed, 2 Feb 2022 20:47:02 +0000
|
||||||
|
Subject: [PATCH] Use getmntent/setmntent for reading mounts
|
||||||
|
|
||||||
|
Since fields in the mtab and fstab files are separated by
|
||||||
|
whitespace, octal escapes are used to represent the characters
|
||||||
|
space (\040), tab (\011), newline (\012), and backslash (\\) in
|
||||||
|
those files when they occur in one of the four strings in a
|
||||||
|
mntent structure. The routines addmntent() and getmntent() will
|
||||||
|
convert from string representation to escaped representation and
|
||||||
|
back. When converting from escaped representation, the sequence
|
||||||
|
\134 is also converted to a backslash.
|
||||||
|
---
|
||||||
|
lib/driver/gnu_linux.c | 20 ++++++++++----------
|
||||||
|
1 file changed, 10 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/driver/gnu_linux.c b/lib/driver/gnu_linux.c
|
||||||
|
index 6a6aa4dd..dddf333c 100644
|
||||||
|
--- a/lib/driver/gnu_linux.c
|
||||||
|
+++ b/lib/driver/gnu_linux.c
|
||||||
|
@@ -672,13 +672,13 @@ static int is_mounted (const char * device, char * target) {
|
||||||
|
char real_device_1[PATH_MAX];
|
||||||
|
char real_device_2[PATH_MAX];
|
||||||
|
|
||||||
|
- char file_device[PATH_MAX];
|
||||||
|
- char file_target[PATH_MAX];
|
||||||
|
+ struct mntent *fs;
|
||||||
|
+
|
||||||
|
+ fp = setmntent("/proc/mounts", "r");
|
||||||
|
|
||||||
|
- fp = fopen ( "/proc/mounts", "r");
|
||||||
|
/* Older systems just have /etc/mtab */
|
||||||
|
if(!fp)
|
||||||
|
- fp = fopen ( "/etc/mtab", "r");
|
||||||
|
+ fp = setmntent("/etc/mtab", "r");
|
||||||
|
|
||||||
|
/* Neither /proc/mounts nor /etc/mtab could be opened, give up here */
|
||||||
|
if(!fp) return 0;
|
||||||
|
@@ -691,19 +691,19 @@ static int is_mounted (const char * device, char * target) {
|
||||||
|
|
||||||
|
/* Read entries */
|
||||||
|
|
||||||
|
- while ( fscanf(fp, "%s %s %*s %*s %*d %*d\n", file_device, file_target) != EOF ) {
|
||||||
|
- if (NULL == cdio_realpath(file_device, real_device_2)) {
|
||||||
|
+ while ((fs = getmntent(fp)) != NULL) {
|
||||||
|
+ if (NULL == cdio_realpath(fs->mnt_fsname, real_device_2)) {
|
||||||
|
cdio_debug("Problems resolving device %s: %s\n",
|
||||||
|
- file_device, strerror(errno));
|
||||||
|
+ fs->mnt_fsname, strerror(errno));
|
||||||
|
}
|
||||||
|
if(!strcmp(real_device_1, real_device_2)) {
|
||||||
|
- strcpy(target, file_target);
|
||||||
|
- fclose(fp);
|
||||||
|
+ strcpy(target, fs->mnt_dir);
|
||||||
|
+ endmntent(fp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
- fclose(fp);
|
||||||
|
+ endmntent(fp);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user