[libcamera-devel] [PATCH 4/4] libcamera: file: Create the file on open() if it doesn't exist
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Jul 13 15:11:51 CEST 2020
On 13/07/2020 12:57, Laurent Pinchart wrote:
> Hi Kieran,
>
> On Sun, Jul 12, 2020 at 08:51:41PM +0100, Kieran Bingham wrote:
>> Hi Laurent,
>>
>> On 12/07/2020 15:44, Laurent Pinchart wrote:
>>> When a file is opened in WriteOnly or ReadWrite mode, create it if it
>>> doesn't exist.
>>
>> Indeed, this solved my issue when using this series before.
>>
>> Thanks!
>>
>> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>>
>>> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>>> ---
>>> src/libcamera/file.cpp | 9 ++++++---
>>> 1 file changed, 6 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/libcamera/file.cpp b/src/libcamera/file.cpp
>>> index 8bd109090919..77701666e438 100644
>>> --- a/src/libcamera/file.cpp
>>> +++ b/src/libcamera/file.cpp
>>> @@ -148,8 +148,9 @@ bool File::exists() const
>>> * \param[in] mode The open mode
>>> *
>>> * This function opens the file specified by fileName() in \a mode. If the file
>>> - * doesn't exist and the mode is WriteOnly or ReadWrite, this
>>> - * function will attempt to create the file.
>>> + * doesn't exist and the mode is WriteOnly or ReadWrite, this function will
>>> + * attempt to create the file with initial permissions set to 0666 (modified by
>>> + * the process' umask).
>>> *
>>> * The error() status is updated.
>>> *
>>> @@ -163,8 +164,10 @@ bool File::open(File::OpenMode mode)
>>> }
>>>
>>> int flags = (mode & ReadWrite) - 1;
>>> + if (mode & WriteOnly)
>>
>> This looks a bit awkward, as it's actually WriteOnly or ReadWrite (i.e.
>> it's not 'Write .. Only') because we know the bit will be set in both
>> cases ... but that is detailed above in the function comment anyway, so
>> this is fine, and I'm sure if anyone was looking they'd figure out it
>> works for RW files too :)
>>
>> In otherwords, it's only the use of the word 'only' in the enum that's
>> awkward, but not something worthy of a change of the enum.
>
> Should we instead have File::OpenMode::Read and File::OpenMode::Write,
> and left the user combine those ? If I had been creating this from
> scratch that's likely what I would have done, but ReadOnly, WriteOnly
> and ReadWrite are established terms.
I don't think it matters now, and as I said this doesn't warrant
changing the enum now.
It works, it's commented, ship it ;-)
--
Kieran
>>> + flags |= O_CREAT;
>>>
>>> - fd_ = ::open(name_.c_str(), flags);
>>> + fd_ = ::open(name_.c_str(), flags, 0666);
>>> if (fd_ < 0) {
>>> error_ = -errno;
>>> return false;
>>>
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list