From 00bb64ecfa87c3da13764578e0e65e9b4e72bbf8 Mon Sep 17 00:00:00 2001
From: Paweł Szewczyk
Date: Mon, 26 Sep 2016 18:45:47 +0200
Subject: core: Fix USB functionfs activation and clarify its documentation
(#4188)
There was no certainty about how the path in service file should look
like for usb functionfs activation. Because of this it was treated
differently in different places, which made this feature unusable.
This patch fixes the path to be the *mount directory* of functionfs, not
ep0 file path and clarifies in the documentation that ListenUSBFunction should be
the location of functionfs mount point, not ep0 file itself.
---
man/systemd.socket.xml | 6 +++---
src/core/socket.c | 9 ++-------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
index 26e5d3ce7b..5b6045f69b 100644
--- a/man/systemd.socket.xml
+++ b/man/systemd.socket.xml
@@ -294,10 +294,10 @@
ListenUSBFunction=
Specifies a USB
- FunctionFS endpoint location to listen on, for
+ FunctionFS endpoints location to listen on, for
implementation of USB gadget functions. This expects an
- absolute file system path as the argument. Behavior otherwise
- is very similar to the ListenFIFO=
+ absolute file system path of functionfs mount point as the argument.
+ Behavior otherwise is very similar to the ListenFIFO=
directive above. Use this to open the FunctionFS endpoint
ep0. When using this option, the
activated service has to have the
diff --git a/src/core/socket.c b/src/core/socket.c
index 70d55dd9ed..b9032fa5c9 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -1334,14 +1334,9 @@ static int usbffs_select_ep(const struct dirent *d) {
static int usbffs_dispatch_eps(SocketPort *p) {
_cleanup_free_ struct dirent **ent = NULL;
- _cleanup_free_ char *path = NULL;
int r, i, n, k;
- path = dirname_malloc(p->path);
- if (!path)
- return -ENOMEM;
-
- r = scandir(path, &ent, usbffs_select_ep, alphasort);
+ r = scandir(p->path, &ent, usbffs_select_ep, alphasort);
if (r < 0)
return -errno;
@@ -1356,7 +1351,7 @@ static int usbffs_dispatch_eps(SocketPort *p) {
for (i = 0; i < n; ++i) {
_cleanup_free_ char *ep = NULL;
- ep = path_make_absolute(ent[i]->d_name, path);
+ ep = path_make_absolute(ent[i]->d_name, p->path);
if (!ep)
return -ENOMEM;
--
cgit v1.2.3-54-g00ecf