diff --git a/include/mosquitto/libcommon_file.h b/include/mosquitto/libcommon_file.h index 35633852..719dc3be 100644 --- a/include/mosquitto/libcommon_file.h +++ b/include/mosquitto/libcommon_file.h @@ -51,7 +51,7 @@ libmosqcommon_EXPORT int mosquitto_write_file(const char* target_path, bool rest /* * Function: mosquitto_read_file */ -libmosqcommon_EXPORT int mosquitto_read_file(const char *file, char **buf); +libmosqcommon_EXPORT int mosquitto_read_file(const char *file, char **buf, size_t *buflen); /* diff --git a/libcommon/file_common.c b/libcommon/file_common.c index 1fa2b2dd..80847a23 100644 --- a/libcommon/file_common.c +++ b/libcommon/file_common.c @@ -432,11 +432,11 @@ error: } -int mosquitto_read_file(const char *file, char **buf) +int mosquitto_read_file(const char *file, char **buf, size_t *buflen) { FILE *fptr; - size_t buflen; long l; + size_t buflen_i; *buf = NULL; fptr = fopen(file, "rt"); @@ -449,24 +449,27 @@ int mosquitto_read_file(const char *file, char **buf) fclose(fptr); return MOSQ_ERR_ERRNO; } - buflen = (size_t)l; + buflen_i = (size_t)l; - if(buflen == 0){ + if(buflen_i == 0){ fclose(fptr); return MOSQ_ERR_SUCCESS; } - *buf = mosquitto_calloc(buflen+1, sizeof(char)); + *buf = mosquitto_calloc(buflen_i+1, sizeof(char)); if((*buf) == NULL){ fclose(fptr); return MOSQ_ERR_NOMEM; } - if(fread(*buf, 1, buflen, fptr) != buflen){ + if(fread(*buf, 1, buflen_i, fptr) != buflen_i){ free(*buf); fclose(fptr); return MOSQ_ERR_INVAL; } fclose(fptr); + if(buflen){ + *buflen = buflen_i; + } return MOSQ_ERR_SUCCESS; } diff --git a/src/http_api.c b/src/http_api.c index 00f78c84..5921cdbd 100644 --- a/src/http_api.c +++ b/src/http_api.c @@ -387,11 +387,11 @@ int http_api__start(struct mosquitto__listener *listener) port = listener->port; if(listener->certfile && listener->keyfile){ - if(mosquitto_read_file(listener->certfile, &x509_cert)){ + if(mosquitto_read_file(listener->certfile, &x509_cert, NULL)){ log__printf(NULL, MOSQ_LOG_ERR, "Error: Unable to load server certificate \"%s\". Check certfile.", listener->certfile); return MOSQ_ERR_INVAL; } - if(mosquitto_read_file(listener->keyfile, &x509_key)){ + if(mosquitto_read_file(listener->keyfile, &x509_key, NULL)){ log__printf(NULL, MOSQ_LOG_ERR, "Error: Unable to load server key file \"%s\". Check keyfile.", listener->keyfile); mosquitto_FREE(x509_cert); return MOSQ_ERR_INVAL;