[libcamera-devel] [PATCH] libcamera: sysfs: Fix directory exists check

Sebastian Fricke sebastian.fricke.linux at gmail.com
Sat Jan 9 07:12:23 CET 2021


Hey Niklas,

Thank you for the patch.
I have tested your patch on my FriendlyElec NanoPC-T4 development board
with the OV13850.
*Before* I applied your patch the output looked like this:
```
basti at nanopct4:~$ cam -l
Available cameras:
1: Internal front camera (platform/ff110000.i2c/i2c-1/1-0010 ov13850)
```
And *after* applying your patch it looks like this:
```
basti at nanopct4:~$ cam -l
Available cameras:
1: Internal front camera (/base/i2c at ff110000/ov13850 at 10)
```

I also tested this patch on my laptop:
*Before*:
```
basti at basti-TUXEDO-Book-XA1510:~$ cam -l
Available cameras:
1: External camera 'Chicony USB2.0 Camera: Chicony ' (\_SB_.PCI0.GP18.XHC0.RHUB.PRT4-4:1.0-04f2:b685)
```
*After*:
```
basti at basti-TUXEDO-Book-XA1510:~$ cam -l
Available cameras:
1: External camera 'Chicony USB2.0 Camera: Chicony ' (\_SB_.PCI0.GP18.XHC0.RHUB.PRT4-4:1.0-04f2:b685)
```

The output on my laptop looks a little odd, but that is another issue.

Greetings

Sebastian

On 08.01.2021 18:00, Niklas Söderlund wrote:
>The scope of File::exists() was changed to only validate that a file
>exists and is therefore not usable to check if a directory exists. This
>breaks the persistent name generation for DT based systems as it uses
>File::exists() to check for directories, fix this by using stat()
>directly.
>
>On Scarlet the persistent names of the cameras are impacted by this and
>where incorrectly reported as:
>
>    $ cam -l
>    Available cameras:
>    1: Internal front camera (platform/ff160000.i2c/i2c-7/7-003c ov2685)
>    2: Internal front camera (platform/ff160000.i2c/i2c-7/7-0036 ov5695
>
>While the expected ones are restored with this fix:
>
>    $ cam -l
>    Available cameras:
>    1: Internal front camera (/base/i2c at ff160000/camera at 3c)
>    2: Internal front camera (/base/i2c at ff160000/camera at 36)
>
>Fixes: 8f4e16f014c820a0 ("test: file: Check that directories are not treated as files")
>Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
>---
> src/libcamera/sysfs.cpp | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
>diff --git a/src/libcamera/sysfs.cpp b/src/libcamera/sysfs.cpp
>index 3ebe66f8d69b61d4..e9004b2b59c8638d 100644
>--- a/src/libcamera/sysfs.cpp
>+++ b/src/libcamera/sysfs.cpp
>@@ -70,10 +70,11 @@ std::string charDevPath(const std::string &deviceNode)
> std::string firmwareNodePath(const std::string &device)
> {
> 	std::string fwPath, node;
>+	struct stat st;
>
> 	/* Lookup for DT-based systems */
> 	node = device + "/of_node";
>-	if (File::exists(node)) {
>+	if (!stat(node.c_str(), &st)) {
> 		char *ofPath = realpath(node.c_str(), nullptr);
> 		if (!ofPath)
> 			return {};
>-- 
>2.30.0
>
>_______________________________________________
>libcamera-devel mailing list
>libcamera-devel at lists.libcamera.org
>https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list