mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +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