This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 6538477fa55 drivers/sensors/dhtxx: Fix read return values to be POSIX
compliant
6538477fa55 is described below
commit 6538477fa55a96b70d7aadb7c6e7b3c4e61eb9e1
Author: jklincn <[email protected]>
AuthorDate: Mon Jan 26 21:31:21 2026 +0800
drivers/sensors/dhtxx: Fix read return values to be POSIX compliant
The dhtxx driver previously returned 0 on success, which violates standard
character device behavior where the number of bytes read should be returned.
It also used non-standard error codes like -1 or -ENOSYS for operational
errors.
This commit fixes the following behavior to comply with POSIX standards:
* Return sizeof(struct dhtxx_sensor_data_s) on success instead of 0.
* Return -EINVAL instead of -ENOSYS/-1 for invalid buffer arguments.
* Return -ETIMEDOUT instead of -1 for sensor timeouts.
* Return -EIO instead of -1 for checksum or parsing errors.
Signed-off-by: jklincn <[email protected]>
---
drivers/sensors/dhtxx.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/sensors/dhtxx.c b/drivers/sensors/dhtxx.c
index db410925991..0c32d2bf25f 100644
--- a/drivers/sensors/dhtxx.c
+++ b/drivers/sensors/dhtxx.c
@@ -434,7 +434,7 @@ static int dhtxx_open(FAR struct file *filep)
static ssize_t dhtxx_read(FAR struct file *filep, FAR char *buffer,
size_t buflen)
{
- int ret = OK;
+ int ret;
FAR struct inode *inode = filep->f_inode;
FAR struct dhtxx_dev_s *priv = inode->i_private;
FAR struct dhtxx_sensor_data_s *data =
@@ -443,13 +443,13 @@ static ssize_t dhtxx_read(FAR struct file *filep, FAR
char *buffer,
if (!buffer)
{
snerr("ERROR: Buffer is null.\n");
- return -1;
+ return -EINVAL;
}
if (buflen < sizeof(FAR struct dhtxx_sensor_data_s))
{
snerr("ERROR: Not enough memory to read data sample.\n");
- return -ENOSYS;
+ return -EINVAL;
}
memset(priv->raw_data, 0u, sizeof(priv->raw_data));
@@ -465,32 +465,33 @@ static ssize_t dhtxx_read(FAR struct file *filep, FAR
char *buffer,
if (dht_prepare_reading(priv) != 0)
{
data->status = DHTXX_TIMEOUT;
- ret = -1;
+ ret = -ETIMEDOUT;
goto out;
}
if (dht_read_raw_data(priv) != 0)
{
data->status = DHTXX_TIMEOUT;
- ret = -1;
+ ret = -ETIMEDOUT;
goto out;
}
if (!dht_verify_checksum(priv))
{
data->status = DHTXX_CHECKSUM_ERROR;
- ret = -1;
+ ret = -EIO;
goto out;
}
if (dht_parse_data(priv, data) != 0)
{
data->status = DHTXX_READ_ERROR;
- ret = -1;
+ ret = -EIO;
}
else
{
data->status = DHTXX_SUCCESS;
+ ret = sizeof(struct dhtxx_sensor_data_s);
}
out: