git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15277 27425a3e-05d8-49a3-a47f-9c15f0e5edd8

This commit is contained in:
Giovanni Di Sirio 2021-12-28 15:33:29 +00:00
parent 8df9b3d998
commit 8eca9d11d6
12 changed files with 56 additions and 51 deletions

View File

@ -177,7 +177,7 @@ static void InsertHandler(eventid_t id) {
#endif #endif
err = drvFatFSMount("0:", 1); err = drvFatFSMount("0:", 1);
if (CH_IS_ERROR(err)) { if (CH_RET_IS_ERROR(err)) {
#if HAL_USE_SDC #if HAL_USE_SDC
sdcDisconnect(&PORTAB_SDCD1); sdcDisconnect(&PORTAB_SDCD1);
#else #else
@ -288,13 +288,13 @@ int main(void) {
msg = drvOverlayRegisterDriver(&root_overlay_driver, msg = drvOverlayRegisterDriver(&root_overlay_driver,
drvStreamsObjectInit(&dev_driver, &streams[0]), drvStreamsObjectInit(&dev_driver, &streams[0]),
"dev"); "dev");
if (CH_IS_ERROR(msg)) { if (CH_RET_IS_ERROR(msg)) {
chSysHalt("VFS"); chSysHalt("VFS");
} }
/* Opening a file for shell I/O.*/ /* Opening a file for shell I/O.*/
msg = vfsOpenFile("/dev/VSD1", VO_RDWR, &file); msg = vfsOpenFile("/dev/VSD1", VO_RDWR, &file);
if (CH_IS_ERROR(msg)) { if (CH_RET_IS_ERROR(msg)) {
chSysHalt("VFS"); chSysHalt("VFS");
} }
shell_cfg1.sc_channel = vfsGetFileStream(file); shell_cfg1.sc_channel = vfsGetFileStream(file);

View File

@ -98,6 +98,8 @@ DEPDIR := ./.dep
include $(CHIBIOS)/os/license/license.mk include $(CHIBIOS)/os/license/license.mk
# Startup files. # Startup files.
include $(CHIBIOS)/os/common/startup/ARMCMx-SB/compilers/GCC/mk/startup.mk include $(CHIBIOS)/os/common/startup/ARMCMx-SB/compilers/GCC/mk/startup.mk
# Common files.
include $(CHIBIOS)/os/common/utils/utils.mk
# HAL-OSAL files (optional). # HAL-OSAL files (optional).
#include $(CHIBIOS)/os/hal/hal.mk #include $(CHIBIOS)/os/hal/hal.mk
#include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform.mk #include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform.mk

View File

@ -98,6 +98,8 @@ DEPDIR := ./.dep
include $(CHIBIOS)/os/license/license.mk include $(CHIBIOS)/os/license/license.mk
# Startup files. # Startup files.
include $(CHIBIOS)/os/common/startup/ARMCMx-SB/compilers/GCC/mk/startup.mk include $(CHIBIOS)/os/common/startup/ARMCMx-SB/compilers/GCC/mk/startup.mk
# Common files.
include $(CHIBIOS)/os/common/utils/utils.mk
# HAL-OSAL files (optional). # HAL-OSAL files (optional).
#include $(CHIBIOS)/os/hal/hal.mk #include $(CHIBIOS)/os/hal/hal.mk
#include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform.mk #include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform.mk

View File

@ -91,14 +91,14 @@
#define CH_ERRORS_MASK (msg_t)0xFF #define CH_ERRORS_MASK (msg_t)0xFF
#define CH_ENCODE_ERROR(posixerr) (~CH_ERRORS_MASK | (msg_t)(posixerr)) #define CH_ENCODE_ERROR(posixerr) (~CH_ERRORS_MASK | (msg_t)(posixerr))
#define CH_DECODE_ERROR(err) ((msg_t)(err) & CH_ERRORS_MASK) #define CH_DECODE_ERROR(err) ((msg_t)(err) & CH_ERRORS_MASK)
#define CH_IS_ERROR(x) (((msg_t)(x) & ~CH_ERRORS_MASK) == ~CH_ERRORS_MASK) #define CH_RET_IS_ERROR(x) (((msg_t)(x) & ~CH_ERRORS_MASK) == ~CH_ERRORS_MASK)
#define CH_BREAK_ON_ERROR(err) \ #define CH_BREAK_ON_ERROR(err) \
if (CH_IS_ERROR(err)) break if (CH_RET_IS_ERROR(err)) break
#define CH_RETURN_ON_ERROR(err) do { \ #define CH_RETURN_ON_ERROR(err) do { \
msg_t __ret = (err); \ msg_t __ret = (err); \
if (CH_IS_ERROR(__ret)) { \ if (CH_RET_IS_ERROR(__ret)) { \
return __ret; \ return __ret; \
} \ } \
} while (false) } while (false)

View File

@ -28,7 +28,8 @@
#ifndef SBUSER_H #ifndef SBUSER_H
#define SBUSER_H #define SBUSER_H
#include "sberr.h" #include "errcodes.h"
#include "sbsysc.h"
/*===========================================================================*/ /*===========================================================================*/
/* Module constants. */ /* Module constants. */

View File

@ -32,7 +32,7 @@ int _close_r(struct _reent *r, int file) {
uint32_t err; uint32_t err;
err = sbFileClose((uint32_t)file); err = sbFileClose((uint32_t)file);
if (SB_ERR_ISERROR(err)) { if (CH_RET_IS_ERROR(err)) {
__errno_r(r) = MAKERR(err); __errno_r(r) = MAKERR(err);
return -1; return -1;
} }
@ -45,7 +45,7 @@ int _write_r(struct _reent *r, int file, char * ptr, int len) {
uint32_t err; uint32_t err;
err = sbFileWrite((uint32_t)file, (const uint8_t *)ptr, (size_t)len); err = sbFileWrite((uint32_t)file, (const uint8_t *)ptr, (size_t)len);
if (SB_ERR_ISERROR(err)) { if (CH_RET_IS_ERROR(err)) {
__errno_r(r) = MAKERR(err); __errno_r(r) = MAKERR(err);
return -1; return -1;
} }
@ -58,7 +58,7 @@ int _read_r(struct _reent *r, int file, char * ptr, int len) {
uint32_t err; uint32_t err;
err = sbFileRead((uint32_t)file, (uint8_t *)ptr, (size_t)len); err = sbFileRead((uint32_t)file, (uint8_t *)ptr, (size_t)len);
if (SB_ERR_ISERROR(err)) { if (CH_RET_IS_ERROR(err)) {
__errno_r(r) = MAKERR(err); __errno_r(r) = MAKERR(err);
return -1; return -1;
} }
@ -71,7 +71,7 @@ int _lseek_r(struct _reent *r, int file, int ptr, int dir) {
uint32_t err; uint32_t err;
err = sbFileSeek((uint32_t)file, (uint32_t)ptr, (uint32_t)dir); err = sbFileSeek((uint32_t)file, (uint32_t)ptr, (uint32_t)dir);
if (SB_ERR_ISERROR(err)) { if (CH_RET_IS_ERROR(err)) {
__errno_r(r) = MAKERR(err); __errno_r(r) = MAKERR(err);
return -1; return -1;
} }

View File

@ -347,7 +347,7 @@ static void cmd_cd(BaseSequentialStream *chp, int argc, char *argv[]) {
msg_t res; msg_t res;
res = vfsChangeCurrentDirectory(argv[0]); res = vfsChangeCurrentDirectory(argv[0]);
if (CH_IS_ERROR(res)) { if (CH_RET_IS_ERROR(res)) {
chprintf(chp, "failed (%d)" SHELL_NEWLINE_STR, res); chprintf(chp, "failed (%d)" SHELL_NEWLINE_STR, res);
} }
} }
@ -374,7 +374,7 @@ static void cmd_ls(BaseSequentialStream *chp, int argc, char *argv[]) {
/* Opening the (un)specified directory.*/ /* Opening the (un)specified directory.*/
res = vfsOpenDirectory(argc == 1 ? argv[0] : ".", &dirp); res = vfsOpenDirectory(argc == 1 ? argv[0] : ".", &dirp);
if (!CH_IS_ERROR(res)) { if (!CH_RET_IS_ERROR(res)) {
while (vfsReadDirectoryNext(dirp, dip) > (msg_t)0) { while (vfsReadDirectoryNext(dirp, dip) > (msg_t)0) {
chprintf(chp, "%s" SHELL_NEWLINE_STR, dip->name); chprintf(chp, "%s" SHELL_NEWLINE_STR, dip->name);
@ -413,7 +413,7 @@ static void cmd_pwd(BaseSequentialStream *chp, int argc, char *argv[]) {
} }
res = vfsGetCurrentDirectory(buf, VFS_CFG_PATHLEN_MAX + 1); res = vfsGetCurrentDirectory(buf, VFS_CFG_PATHLEN_MAX + 1);
if (CH_IS_ERROR(res)) { if (CH_RET_IS_ERROR(res)) {
chprintf(chp, "Failed (%d)" SHELL_NEWLINE_STR, res); chprintf(chp, "Failed (%d)" SHELL_NEWLINE_STR, res);
} }
else { else {

View File

@ -456,7 +456,7 @@ static size_t file_stream_write(void *instance, const uint8_t *bp, size_t n) {
msg_t msg; msg_t msg;
msg = fffnp->vmt->file_write((void *)fffnp, bp, n); msg = fffnp->vmt->file_write((void *)fffnp, bp, n);
if (msg < CH_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return (size_t)0; return (size_t)0;
} }
@ -470,7 +470,7 @@ static size_t file_stream_read(void *instance, uint8_t *bp, size_t n) {
msg_t msg; msg_t msg;
msg = fffnp->vmt->file_read((void *)fffnp, bp, n); msg = fffnp->vmt->file_read((void *)fffnp, bp, n);
if (msg < CH_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return (size_t)0; return (size_t)0;
} }
@ -484,7 +484,7 @@ static msg_t file_stream_put(void *instance, uint8_t b) {
msg_t msg; msg_t msg;
msg = fffnp->vmt->file_write((void *)fffnp, &b, (size_t)1); msg = fffnp->vmt->file_write((void *)fffnp, &b, (size_t)1);
if (msg < CH_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return STM_TIMEOUT; return STM_TIMEOUT;
} }
@ -499,7 +499,7 @@ static msg_t file_stream_get(void *instance) {
uint8_t b; uint8_t b;
msg = fffnp->vmt->file_read((void *)fffnp, &b, (size_t)1); msg = fffnp->vmt->file_read((void *)fffnp, &b, (size_t)1);
if (msg < CH_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return STM_TIMEOUT; return STM_TIMEOUT;
} }

View File

@ -208,7 +208,7 @@ static msg_t open_absolute_dir(vfs_overlay_driver_c *drvp,
/* Searching for a match among registered overlays.*/ /* Searching for a match among registered overlays.*/
err = match_driver(drvp, &scanpath, &dp); err = match_driver(drvp, &scanpath, &dp);
if (!CH_IS_ERROR(err)) { if (!CH_RET_IS_ERROR(err)) {
/* Delegating node creation to a registered driver.*/ /* Delegating node creation to a registered driver.*/
err = dp->vmt->open_dir((void *)dp, err = dp->vmt->open_dir((void *)dp,
scanpath, scanpath,
@ -272,7 +272,7 @@ static msg_t open_absolute_file(vfs_overlay_driver_c *drvp,
/* Searching for a match among registered overlays.*/ /* Searching for a match among registered overlays.*/
err = match_driver(drvp, &scanpath, &dp); err = match_driver(drvp, &scanpath, &dp);
if (!CH_IS_ERROR(err)) { if (!CH_RET_IS_ERROR(err)) {
/* Delegating node creation to a registered driver.*/ /* Delegating node creation to a registered driver.*/
err = dp->vmt->open_file((void *)dp, scanpath, oflag, vfnpp); err = dp->vmt->open_file((void *)dp, scanpath, oflag, vfnpp);
} }

View File

@ -142,10 +142,10 @@ static msg_t drv_set_cwd(void *instance, const char *path) {
(void)instance; (void)instance;
if (strcmp(path, "/") != 0) { if (strcmp(path, "/") != 0) {
return VFS_RET_ENOENT; return CH_RET_ENOENT;
} }
return VFS_RET_SUCCESS; return CH_RET_SUCCESS;
} }
static msg_t drv_get_cwd(void *instance, char *buf, size_t size) { static msg_t drv_get_cwd(void *instance, char *buf, size_t size) {
@ -153,19 +153,19 @@ static msg_t drv_get_cwd(void *instance, char *buf, size_t size) {
(void)instance; (void)instance;
if (size < 2) { if (size < 2) {
return VFS_RET_ERANGE; return CH_RET_ERANGE;
} }
buf[0] = '/'; buf[0] = '/';
buf[1] = '\0'; buf[1] = '\0';
return VFS_RET_SUCCESS; return CH_RET_SUCCESS;
} }
static msg_t drv_open_dir(void *instance, static msg_t drv_open_dir(void *instance,
const char *path, const char *path,
vfs_directory_node_c **vdnpp) { vfs_directory_node_c **vdnpp) {
msg_t err = VFS_RET_SUCCESS; msg_t err = CH_RET_SUCCESS;
do { do {
vfs_sfs_driver_c *drvp = (vfs_sfs_driver_c *)instance; vfs_sfs_driver_c *drvp = (vfs_sfs_driver_c *)instance;
@ -184,7 +184,7 @@ static msg_t drv_open_file(void *instance,
const char *path, const char *path,
int flags, int flags,
vfs_file_node_c **vfnpp) { vfs_file_node_c **vfnpp) {
msg_t err = VFS_RET_SUCCESS; msg_t err = CH_RET_SUCCESS;
do { do {
vfs_sfs_driver_c *drvp = (vfs_sfs_driver_c *)instance; vfs_sfs_driver_c *drvp = (vfs_sfs_driver_c *)instance;
@ -212,7 +212,7 @@ static void node_dir_release(void *instance) {
static msg_t node_dir_first(void *instance, vfs_direntry_info_t *dip) { static msg_t node_dir_first(void *instance, vfs_direntry_info_t *dip) {
vfs_sfs_dir_node_c *dnp = (vfs_sfs_dir_node_c *)instance; vfs_sfs_dir_node_c *dnp = (vfs_sfs_dir_node_c *)instance;
msg_t err = VFS_RET_SUCCESS;; msg_t err = CH_RET_SUCCESS;;
(void)dnp; (void)dnp;
@ -223,7 +223,7 @@ static msg_t node_dir_first(void *instance, vfs_direntry_info_t *dip) {
} }
static msg_t node_dir_next(void *instance, vfs_direntry_info_t *dip) { static msg_t node_dir_next(void *instance, vfs_direntry_info_t *dip) {
msg_t err = VFS_RET_SUCCESS; msg_t err = CH_RET_SUCCESS;
do { do {
vfs_sfs_dir_node_c *dnp = (vfs_sfs_dir_node_c *)instance; vfs_sfs_dir_node_c *dnp = (vfs_sfs_dir_node_c *)instance;
@ -278,7 +278,7 @@ static msg_t node_file_setpos(void *instance, vfs_offset_t offset) {
(void)fnp; (void)fnp;
(void)offset; (void)offset;
return VFS_RET_SUCCESS; return CH_RET_SUCCESS;
} }
static vfs_offset_t node_file_getpos(void *instance) { static vfs_offset_t node_file_getpos(void *instance) {
@ -294,7 +294,7 @@ static msg_t node_file_getstat(void *instance, vfs_file_stat_t *fsp) {
(void)instance; (void)instance;
(void)fsp; (void)fsp;
return VFS_RET_ENOSYS; return CH_RET_ENOSYS;
} }
static size_t file_stream_write(void *instance, const uint8_t *bp, size_t n) { static size_t file_stream_write(void *instance, const uint8_t *bp, size_t n) {
@ -303,7 +303,7 @@ static size_t file_stream_write(void *instance, const uint8_t *bp, size_t n) {
msg_t msg; msg_t msg;
msg = fnp->vmt->file_write((void *)fnp, bp, n); msg = fnp->vmt->file_write((void *)fnp, bp, n);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return (size_t)0; return (size_t)0;
} }
@ -317,7 +317,7 @@ static size_t file_stream_read(void *instance, uint8_t *bp, size_t n) {
msg_t msg; msg_t msg;
msg = fnp->vmt->file_read((void *)fnp, bp, n); msg = fnp->vmt->file_read((void *)fnp, bp, n);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return (size_t)0; return (size_t)0;
} }
@ -331,7 +331,7 @@ static msg_t file_stream_put(void *instance, uint8_t b) {
msg_t msg; msg_t msg;
msg = fnp->vmt->file_write((void *)fnp, &b, (size_t)1); msg = fnp->vmt->file_write((void *)fnp, &b, (size_t)1);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return STM_TIMEOUT; return STM_TIMEOUT;
} }
@ -346,7 +346,7 @@ static msg_t file_stream_get(void *instance) {
uint8_t b; uint8_t b;
msg = fnp->vmt->file_read((void *)fnp, &b, (size_t)1); msg = fnp->vmt->file_read((void *)fnp, &b, (size_t)1);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return STM_TIMEOUT; return STM_TIMEOUT;
} }

View File

@ -142,10 +142,10 @@ static msg_t drv_set_cwd(void *instance, const char *path) {
(void)instance; (void)instance;
if (strcmp(path, "/") != 0) { if (strcmp(path, "/") != 0) {
return VFS_RET_ENOENT; return CH_RET_ENOENT;
} }
return VFS_RET_SUCCESS; return CH_RET_SUCCESS;
} }
static msg_t drv_get_cwd(void *instance, char *buf, size_t size) { static msg_t drv_get_cwd(void *instance, char *buf, size_t size) {
@ -153,19 +153,19 @@ static msg_t drv_get_cwd(void *instance, char *buf, size_t size) {
(void)instance; (void)instance;
if (size < 2) { if (size < 2) {
return VFS_RET_ERANGE; return CH_RET_ERANGE;
} }
buf[0] = '/'; buf[0] = '/';
buf[1] = '\0'; buf[1] = '\0';
return VFS_RET_SUCCESS; return CH_RET_SUCCESS;
} }
static msg_t drv_open_dir(void *instance, static msg_t drv_open_dir(void *instance,
const char *path, const char *path,
vfs_directory_node_c **vdnpp) { vfs_directory_node_c **vdnpp) {
msg_t err = VFS_RET_SUCCESS; msg_t err = CH_RET_SUCCESS;
do { do {
vfs_template_driver_c *drvp = (vfs_template_driver_c *)instance; vfs_template_driver_c *drvp = (vfs_template_driver_c *)instance;
@ -184,14 +184,14 @@ static msg_t drv_open_file(void *instance,
const char *path, const char *path,
int flags, int flags,
vfs_file_node_c **vfnpp) { vfs_file_node_c **vfnpp) {
msg_t err = VFS_RET_SUCCESS; msg_t err = CH_RET_SUCCESS;
do { do {
vfs_template_driver_c *drvp = (vfs_template_driver_c *)instance; vfs_template_driver_c *drvp = (vfs_template_driver_c *)instance;
(void)drvp; (void)drvp;
(void)path; (void)path;
(void)oflag; (void)flags;
(void)vfnpp; (void)vfnpp;
} }
@ -212,7 +212,7 @@ static void node_dir_release(void *instance) {
static msg_t node_dir_first(void *instance, vfs_direntry_info_t *dip) { static msg_t node_dir_first(void *instance, vfs_direntry_info_t *dip) {
vfs_template_dir_node_c *dnp = (vfs_template_dir_node_c *)instance; vfs_template_dir_node_c *dnp = (vfs_template_dir_node_c *)instance;
msg_t err = VFS_RET_SUCCESS;; msg_t err = CH_RET_SUCCESS;;
(void)dnp; (void)dnp;
@ -223,7 +223,7 @@ static msg_t node_dir_first(void *instance, vfs_direntry_info_t *dip) {
} }
static msg_t node_dir_next(void *instance, vfs_direntry_info_t *dip) { static msg_t node_dir_next(void *instance, vfs_direntry_info_t *dip) {
msg_t err = VFS_RET_SUCCESS; msg_t err = CH_RET_SUCCESS;
do { do {
vfs_template_dir_node_c *dnp = (vfs_template_dir_node_c *)instance; vfs_template_dir_node_c *dnp = (vfs_template_dir_node_c *)instance;
@ -278,7 +278,7 @@ static msg_t node_file_setpos(void *instance, vfs_offset_t offset) {
(void)fnp; (void)fnp;
(void)offset; (void)offset;
return VFS_RET_SUCCESS; return CH_RET_SUCCESS;
} }
static vfs_offset_t node_file_getpos(void *instance) { static vfs_offset_t node_file_getpos(void *instance) {
@ -294,7 +294,7 @@ static msg_t node_file_getstat(void *instance, vfs_file_stat_t *fsp) {
(void)instance; (void)instance;
(void)fsp; (void)fsp;
return VFS_RET_ENOSYS; return CH_RET_ENOSYS;
} }
static size_t file_stream_write(void *instance, const uint8_t *bp, size_t n) { static size_t file_stream_write(void *instance, const uint8_t *bp, size_t n) {
@ -303,7 +303,7 @@ static size_t file_stream_write(void *instance, const uint8_t *bp, size_t n) {
msg_t msg; msg_t msg;
msg = fnp->vmt->file_write((void *)fnp, bp, n); msg = fnp->vmt->file_write((void *)fnp, bp, n);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return (size_t)0; return (size_t)0;
} }
@ -317,7 +317,7 @@ static size_t file_stream_read(void *instance, uint8_t *bp, size_t n) {
msg_t msg; msg_t msg;
msg = fnp->vmt->file_read((void *)fnp, bp, n); msg = fnp->vmt->file_read((void *)fnp, bp, n);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return (size_t)0; return (size_t)0;
} }
@ -331,7 +331,7 @@ static msg_t file_stream_put(void *instance, uint8_t b) {
msg_t msg; msg_t msg;
msg = fnp->vmt->file_write((void *)fnp, &b, (size_t)1); msg = fnp->vmt->file_write((void *)fnp, &b, (size_t)1);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return STM_TIMEOUT; return STM_TIMEOUT;
} }
@ -346,7 +346,7 @@ static msg_t file_stream_get(void *instance) {
uint8_t b; uint8_t b;
msg = fnp->vmt->file_read((void *)fnp, &b, (size_t)1); msg = fnp->vmt->file_read((void *)fnp, &b, (size_t)1);
if (msg < VFS_RET_SUCCESS) { if (CH_RET_IS_ERROR(msg)) {
return STM_TIMEOUT; return STM_TIMEOUT;
} }

View File

@ -86,7 +86,7 @@ int _read_r(struct _reent *r, int file, char *ptr, int len) {
} }
nr = vfsReadFile(fds[file], (uint8_t *)ptr, (size_t)len); nr = vfsReadFile(fds[file], (uint8_t *)ptr, (size_t)len);
if (CH_IS_ERROR(nr)) { if (CH_RET_IS_ERROR(nr)) {
__errno_r(r) = CH_DECODE_ERROR(nr); __errno_r(r) = CH_DECODE_ERROR(nr);
return -1; return -1;
} }
@ -106,7 +106,7 @@ int _write_r(struct _reent *r, int file, const char *ptr, int len) {
} }
nw = vfsWriteFile(fds[file], (const uint8_t *)ptr, (size_t)len); nw = vfsWriteFile(fds[file], (const uint8_t *)ptr, (size_t)len);
if (CH_IS_ERROR(nw)) { if (CH_RET_IS_ERROR(nw)) {
__errno_r(r) = CH_DECODE_ERROR(nw); __errno_r(r) = CH_DECODE_ERROR(nw);
return -1; return -1;
} }