err_handler

added an error handler for when a pointer is NULL

got rid of malloc in format reply
This commit is contained in:
joran2738
2023-11-07 15:09:38 +01:00
parent c8130f8222
commit 142aad264c
3 changed files with 119 additions and 46 deletions

View File

@@ -13,17 +13,27 @@
#include <stdlib.h> #include <stdlib.h>
#include "lwip/netif.h" #include "lwip/netif.h"
#include "lwip.h" #include "lwip.h"
#define LOGGER_LEVEL_INFO #define LOGGER_LEVEL_ALL
#include "log.h" #include "log.h"
#define sod_name "set_owner_details_name"
#define god_name "get_owner_details_name"
#define sod_surname "set_owner_details_surname"
#define god_surname "get_owner_details_surname"
#define sod_reply "set_owner_details_reply"
#define god_reply "get_owner_details_reply"
#define sod_mac "set_owner_details_mac"
#define sod "set_owner_details"
#define f_reply "format_reply"
typedef struct { typedef struct {
char name[20]; char name[20];
char surname[20]; char surname[20];
uint8_t mac_address[6]; uint8_t mac_address[6];
char reply[200]; char reply[100];
}owner_details_t; }owner_details_t;
uint8_t set_owner_details_name(owner_details_t*, char* );
uint8_t set_owner_details_sirname(owner_details_t*, char* );
uint8_t set_owner_details(owner_details_t*, char* , char*); uint8_t set_owner_details(owner_details_t*, char* , char*);
char* get_owner_details_name(owner_details_t*); char* get_owner_details_name(owner_details_t*);

View File

@@ -10,19 +10,47 @@
static const char *TAG = "UDP_broadcast"; static const char *TAG = "UDP_broadcast";
/** /**
* @fn void set_owner_details_mac(owner_details_t*) * @fn void owner_details_error_handler(owner_details_t*, char*, char*)
* @brief * @brief
* *
* @param owner * @param owner
* @param word
* @param funct
*/ */
static void set_owner_details_mac(owner_details_t* owner){ static void owner_details_error_handler(owner_details_t* owner, char* funct,char* word){
if(owner == NULL && word == NULL){
LOG_WARN(TAG,"%s: owner and string given are both NULL pointers",funct);
}
else if(owner == NULL){
LOG_WARN(TAG,"%s: owner given is a NULL pointer",funct);
}
else{
LOG_WARN(TAG,"%s: string given is a NULL pointer",funct);
}
}
/**
* @fn uint8_t set_owner_details_mac(owner_details_t*)
* @brief
*
* @param owner
* @return
*/
static uint8_t set_owner_details_mac(owner_details_t* owner){
// Access the MAC address // Access the MAC address
if(owner != NULL){
for(int i = 0; i < 6; i++){ for(int i = 0; i < 6; i++){
owner->mac_address[i] = netif_default->hwaddr[i]; owner->mac_address[i] = netif_default->hwaddr[i];
} }
return 1;
}
else{
owner_details_error_handler(owner, sod_mac,"");
return 0;
}
} }
@@ -35,13 +63,14 @@ static void set_owner_details_mac(owner_details_t* owner){
* @return * @return
*/ */
uint8_t set_owner_details_name(owner_details_t *owner, char *name){ static uint8_t set_owner_details_name(owner_details_t *owner, char *name){
if(name != NULL){ if(name != NULL && owner != NULL){
LOG_DEBUG(TAG,"set: %s",name); LOG_DEBUG(TAG,"set: %s",name);
strncpy(owner->name,name,sizeof(owner->name)); strncpy(owner->name,name,sizeof(owner->name));
return 1; return 1;
} }
else{ else{
owner_details_error_handler(owner, sod_name, name);
return 0; return 0;
} }
@@ -55,13 +84,14 @@ uint8_t set_owner_details_name(owner_details_t *owner, char *name){
* @param surname * @param surname
* @return * @return
*/ */
uint8_t set_owner_details_surname(owner_details_t* owner, char* surname){ static uint8_t set_owner_details_surname(owner_details_t* owner, char* surname){
if(surname != NULL){ if(surname != NULL && owner != NULL){
LOG_DEBUG(TAG,"set: %s",surname); LOG_DEBUG(TAG,"set: %s",surname);
strncpy(owner->surname,surname,sizeof(owner->surname)); strncpy(owner->surname,surname,sizeof(owner->surname));
return 1; return 1;
} }
else{ else{
owner_details_error_handler(owner, sod_surname, surname);
return 0; return 0;
} }
} }
@@ -76,45 +106,46 @@ uint8_t set_owner_details_surname(owner_details_t* owner, char* surname){
*/ */
static uint8_t set_owner_details_reply(owner_details_t *owner, char *reply){ static uint8_t set_owner_details_reply(owner_details_t *owner, char *reply){
if(reply != NULL){ if(reply != NULL && owner != NULL){
LOG_DEBUG(TAG,"set: %s",reply); LOG_DEBUG(TAG,"set: %s",reply);
strncpy(owner->reply,reply,sizeof(owner->reply)); strncpy(owner->reply,reply,sizeof(owner->reply));
return 1; return 1;
} }
else{ else{
owner_details_error_handler(owner, sod_reply, reply);
return 0; return 0;
} }
} }
/** /**
* @fn void format_reply(owner_details_t*) * @fn uint8_t format_reply(owner_details_t*)
* @brief * @brief
* *
* @param owner * @param owner
* @return
*/ */
static void format_reply(owner_details_t *owner){ static uint8_t format_reply(owner_details_t *owner){
size_t reply_len = 0; size_t reply_len = 0;
char mac_addr_str[18]; char mac_addr_str[18];
char* reply_buf = NULL; char reply_buf[100];
if (owner != NULL) { if (owner != NULL) {
reply_len = 20 + sizeof(mac_addr_str) + sizeof(owner->surname) + sizeof(owner->name); reply_len = 20 + sizeof(mac_addr_str) + sizeof(owner->surname) + sizeof(owner->name);
reply_buf = (char*)malloc(reply_len);
snprintf(mac_addr_str, sizeof(mac_addr_str), "%02X:%02X:%02X:%02X:%02X:%02X", snprintf(mac_addr_str, sizeof(mac_addr_str), "%02X:%02X:%02X:%02X:%02X:%02X",
owner->mac_address[0], owner->mac_address[1], owner->mac_address[2], owner->mac_address[0], owner->mac_address[1], owner->mac_address[2],
owner->mac_address[3], owner->mac_address[4], owner->mac_address[5]); owner->mac_address[3], owner->mac_address[4], owner->mac_address[5]);
if (reply_buf != NULL) {
snprintf(reply_buf, reply_len, "%s is present and my owner is %s %s", snprintf(reply_buf, reply_len, "%s is present and my owner is %s %s",
mac_addr_str, owner->surname, owner->name); mac_addr_str, owner->surname, owner->name);
set_owner_details_reply(owner, reply_buf); set_owner_details_reply(owner, reply_buf);
return 1;
free(reply_buf); // Free the temporary buffer
} }
else{
owner_details_error_handler(owner, f_reply,"");
return 0;
} }
} }
@@ -128,15 +159,25 @@ static void format_reply(owner_details_t *owner){
* @return * @return
*/ */
uint8_t set_owner_details(owner_details_t* owner, char* name, char* surname){ uint8_t set_owner_details(owner_details_t* owner, char* name, char* surname){
if(set_owner_details_name(owner, name) && set_owner_details_surname(owner, surname)){ if(owner != NULL){
set_owner_details_mac(owner); if(set_owner_details_name(owner, name) && set_owner_details_surname(owner, surname) && set_owner_details_mac(owner)){
format_reply(owner); if(format_reply(owner)){
return 1; return 1;;
} }
else{ else{
return 0; return 0;
} }
} }
else{
return 0;
}
}
else{
owner_details_error_handler(owner, f_reply,"");
return 0;
}
}
/** /**
* @fn char get_owner_details_name*(owner_details_t) * @fn char get_owner_details_name*(owner_details_t)
@@ -147,11 +188,11 @@ uint8_t set_owner_details(owner_details_t* owner, char* name, char* surname){
*/ */
char* get_owner_details_name(owner_details_t *owner){ char* get_owner_details_name(owner_details_t *owner){
char err_reply[20] = "no name yet"; if(owner == NULL || owner->name == NULL){
if(owner->name == NULL){ owner_details_error_handler(owner, god_name,"");
strncpy(owner->name,err_reply,sizeof(owner->name)); return "|no name yet|";
} }
return *owner->name; return owner->name;
} }
/** /**
@@ -163,9 +204,9 @@ char* get_owner_details_name(owner_details_t *owner){
*/ */
char* get_owner_details_surname(owner_details_t* owner){ char* get_owner_details_surname(owner_details_t* owner){
char err_reply[20] = "no surname yet"; if(owner == NULL || owner->surname == NULL){
if(owner->surname == NULL){ owner_details_error_handler(owner, god_surname,"");
strncpy(owner->surname,err_reply,sizeof(owner->surname)); return "|no surname yet|";
} }
return owner->surname; return owner->surname;
} }
@@ -179,10 +220,9 @@ char* get_owner_details_surname(owner_details_t* owner){
*/ */
char* get_owner_details_reply(owner_details_t *owner){ char* get_owner_details_reply(owner_details_t *owner){
LOG_DEBUG(TAG,"getting reply"); if(owner == NULL || owner->reply == NULL){
char err_reply[20] = "no reply yet"; owner_details_error_handler(owner, god_reply,"");
if(owner->reply == NULL){ return "|no reply formatted yet|";
strncpy(owner->reply,err_reply,sizeof(owner->reply));
} }
return owner->reply; return owner->reply;
} }

View File

@@ -111,16 +111,39 @@ int main(void)
MX_QUADSPI_Init(); MX_QUADSPI_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
owner_details_t owner; owner_details_t owner;
owner_details_t* owner_error = NULL;
char* test_error = NULL;
LOG_DEBUG(TAG,"\nhelloworld"); LOG_DEBUG(TAG,"\nhelloworld");
LOG_DEBUG(TAG,"%s",get_owner_details_reply(&owner)); LOG_DEBUG(TAG,"owner1:%s",get_owner_details_reply(&owner));
if(!set_owner_details(&owner, "joran", "vn")){ if(!set_owner_details(&owner, "joran", "vn")){
LOG_DEBUG(TAG,"error");; LOG_DEBUG(TAG,"error");;
} }
LOG_DEBUG(TAG,"%s",get_owner_details_reply(&owner)); LOG_DEBUG(TAG,"owner2:%s",get_owner_details_reply(&owner));
if(!set_owner_details(&owner, "joran", "Van Nieuwenhoven")){ if(!set_owner_details(&owner, "joran", "Van Nieuwenhoven")){
LOG_DEBUG(TAG,"error"); LOG_DEBUG(TAG,"error");
} }
LOG_DEBUG(TAG,"%s",get_owner_details_reply(&owner)); LOG_DEBUG(TAG,"owner3:%s",get_owner_details_reply(&owner));
if(!set_owner_details(&owner, "joran", "")){
LOG_DEBUG(TAG,"error");
}
LOG_DEBUG(TAG,"owner4:%s",get_owner_details_reply(&owner));
if(!set_owner_details(&owner, "joran", test_error)){
LOG_DEBUG(TAG,"error setting owner details");
}
LOG_DEBUG(TAG,"owner5:%s",get_owner_details_reply(&owner));
if(!set_owner_details(&owner, test_error, "Van Nieuwenhoven")){
LOG_DEBUG(TAG,"error setting owner details");
}
LOG_DEBUG(TAG,"owner6:%s",get_owner_details_reply(&owner));
if(!set_owner_details(owner_error, test_error, "Van Nieuwenhoven")){
LOG_DEBUG(TAG,"error setting owner details");
}
LOG_DEBUG(TAG,"owner7:%s",get_owner_details_reply(owner_error));
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */