From 80d34fec94b1cea30bb3b6711b4cf86ff84a32d4 Mon Sep 17 00:00:00 2001 From: Xiao Pan Date: Tue, 29 Apr 2025 20:22:08 -0700 Subject: fix: wrong VLA arrary length, switch to malloc When using $HOME env, array length need to consider /.local/.share --- mycan.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'mycan.c') diff --git a/mycan.c b/mycan.c index cad7a37..4a786aa 100644 --- a/mycan.c +++ b/mycan.c @@ -47,17 +47,21 @@ int main(int argc, char **argv) struct sockaddr_can addr; struct ifreq ifr; struct can_frame frame; - // usually ~/.local/share - const char *dir=getenv("XDG_DATA_HOME"); - const char *home; - if(dir == NULL) - home=getenv("HOME"); - // /mycan.csv 10 + \0 1 = 11 - char filename[((dir == NULL)?strlen(home):strlen(dir))+11]; - if(dir == NULL) - sprintf(filename,"%s/.local/share/mycan.csv",home); - else - sprintf(filename,"%s/mycan.csv",dir); + char *filename; + { + // usually ~/.local/share + const char *dir=getenv("XDG_DATA_HOME"); + const char *str; + if(dir != NULL) + str="/mycan.csv"; + else + { + str="/.local/share/mycan.csv"; + dir=getenv("HOME"); + } + filename=malloc((strlen(dir)+strlen(str)+1)*sizeof(char)); + sprintf(filename,"%s%s",dir,str); + } can_obj_all_sre_edited_h_t obj; dbcc_time_stamp_t t, t_before; @@ -416,5 +420,7 @@ int main(int argc, char **argv) close(s); //system("sudo ifconfig can0 down"); + free(filename); + return 0; } -- cgit v1.2.3-70-g09d2