diff options
author | Xiao Pan <xyz@flylightning.xyz> | 2025-04-29 20:22:08 -0700 |
---|---|---|
committer | Xiao Pan <xyz@flylightning.xyz> | 2025-04-29 20:22:08 -0700 |
commit | 80d34fec94b1cea30bb3b6711b4cf86ff84a32d4 (patch) | |
tree | 591c52aace1a1f7dd76fc6b75d71e6cb605c7e5d /mycan.c | |
parent | 0b124524c142b5da1eaa82d35f5db732dd683a27 (diff) |
fix: wrong VLA arrary length, switch to malloc
When using $HOME env, array length need to consider /.local/.share
Diffstat (limited to 'mycan.c')
-rw-r--r-- | mycan.c | 28 |
1 files changed, 17 insertions, 11 deletions
@@ -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; } |