From 82eb13a6d6f7519bf6c4452b4e67bc296d30801b Mon Sep 17 00:00:00 2001 From: "Frederic.Pillon" Date: Fri, 16 Jun 2017 14:43:12 +0200 Subject: [PATCH] MassStorageCopy updated to manage several node names. Depending of the board revision, mount point name could be different. Ex for: STM32F030R8 with a rev 1 node name is : "NUCLEO" while it is "NODE_F030R8" for rev c Ex: in boards.txt we could have: Nucleo_64.menu.Nucleo_64_board.NUCLEO_F030R8.node="NODE_F030R8,NUCLEO" Fix #6 Signed-off-by: Frederic Pillon --- linux/massStorageCopy | Bin 8057 -> 12529 bytes linux64/massStorageCopy | Bin 13628 -> 14130 bytes src/massStorageCopy/massStorageCopy.bat | 9 -- src/massStorageCopy/massStorageCopy.c | 112 +++++++++++++++++++----- win/massStorageCopy.bat | 48 ++++++++-- 5 files changed, 127 insertions(+), 42 deletions(-) delete mode 100644 src/massStorageCopy/massStorageCopy.bat diff --git a/linux/massStorageCopy b/linux/massStorageCopy index 7e10d84cc6e7c435ca15011519b42939ff089171..4a0db4b9f2f922728eb3a269fd34b4bfef34e2b1 100755 GIT binary patch literal 12529 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 MaPjZu$h{)|2l+saaR2}S literal 8057 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 delta 4007 zcmZ`+4Qx}_6~51o^W#AL6FW{AAumlrOh{rINTMRzI9b!ZFti#Y~dI$J23c;;+!%lsnw3`qKcz=ZV2Y5dO|3rKp=bL%IjC$z9 zv77MuFvBgaBxLy>^lo8AEH1A_4(H@OW3MA6{Q5L}hrm+;&ldJu1U?EKh94R_)@|GF zhfza;ZHIq5+t}&f*5fC#wcFp>?T3^>ftE}c?942mPm9*^g^TPlTUXai#`NrW=#sGB zSzS4p5_S>BGxIx)VnQOLA_xQW1ygWsF@#eJwWckGa7wGzw8ao^A8N@uB?Xk=wQMC~ zIOvd>5*qaz5<{p{g6Ff(X@gXnuKNX=q$~DfZz}O3NAf08CgW*r6}w5M!Y0SKyq#p) zILT2iZzfq!a+J&KNDfdPl7~6)903$s@)a(xAenYavX9G4NzNjfBr`4>Nj8yu{aXYo zbR<*dl5sA7Q-CrZoa7kFp08WO<7<@g6(#u9b>GU?*r?g$WlHSq;XER-zZ$(P@kAv$ zy7hvor)H@i8W}U zL_$$N(8cLR9jTR($U(;Xk119vmE2lXIF@c$ycX*ETYjRAy9-P%w#lMYbE)>Y*gO2@S#O0&Rz4e*wI+sj^q!`aH0SXk0pM_-KdU(r}=*9 zeN{E!dRlexG~dYnHky{4Y9+rg;>JML0^Ow01_o69LE7$QhWR|xj5hb{xSHnUiU9Zj zHX2Sg5yAtxFyg!K@eNd|rwOy0o}4}ME6U1h^87&2X!#L->Xb-(VuP}9Hb0K|LidvG zp7V5MpKm{>zG|9QHHFhn&$fnPmo>Mz%_QS{WT1xV)63>v_54LSdrwa{Ln3qsj#&Gk zJinndr{<}}^44v=-Tt0!UEO|pL+1{ES9gcMYg@P6-LbWk!AJQo!wQ?#xMO{fT(JXx z47S+X>gcn8UgPoG>GVFN<~!+h8`677qevSuz%ir@cTNgP4^l5k_DWqe1y%N1gAWI~ zq1|4#v;~JWlW9|)xnKAFnVB!m$f6sd9G?yNY()Jj{S>_t)a&2Tt40XpTbBJ2A9fG^ zZg0-{6gekWM>o_|@W-qnU%|=@V-LQTsrigBYtCG2Ted3BdE6RX+F%Rv(ZH z1BXNuM+H40=mkM93;H)f|1D^y__!+&bgrQFf<7tevx2@L=uZUgSE-R562MV7i&4d; zjG?&vnoe@Ut}>TJOGYX~UDpIys`KGu*=)<0L0#Y&UF+Ct;ZB(=hlyn~@RT>?xP|0~ z7t0&KS#H)vB{*4LYt&NTmJK(`>n(j^O?^~wY;Jh8!gc@iHA)vhwsi*BT~TYa;X95R zmg~KWdW$SXnQm`veQ>A3WzoJ{weQ&_@aSBZC5{J-TAXfnY_o@U%?(J>Al#{Rat-#>FVsK+C-O#!Vho^Qj(o z&pT11B~b;{UeB@^?E||W*9;w14#|zZT{6Ots~ih+nUNiFy#XV2WVz{G*tfFXlU>QS9xISG}|~E;fs1UW<&5&17bA zv^2a);J#`2D#RuHCTDP@+NJ9;!lmlRL9Q+Yb4}*=EG%X5Y92V9;N~_agCys}wHjOC zD~?-P;heRc)4G2lBQZO3PQ$rno&z%a8uiH?(N}fo#LMV#QRC!r>XbM z!7#|r^jYR3PJeN<-73xxYlP)42mU>>xE&qq$wpVmqSIpN;bXts8RCSqfbgmP1JQ6m zoH9e-xYRm%&)9GHTqmgyjH8Vi!hU*wlER)oq^a>2Khl2) z{MQ0+=32&Xah$;_mqp5fBW{PGSdVpqaVcN&kSw+E{yFN4x1f$PGJV#a+L)pP$XVIL zr|>lz|HxZ3{(tWz=?%hp>EM$_+(K++6Z6N6+pbM3<~SLu%-TaxLm*b EzwCd0A^-pY diff --git a/src/massStorageCopy/massStorageCopy.bat b/src/massStorageCopy/massStorageCopy.bat deleted file mode 100644 index 746f67a7..00000000 --- a/src/massStorageCopy/massStorageCopy.bat +++ /dev/null @@ -1,9 +0,0 @@ -@ECHO off -SET SOURCE=%2 -SET SRC_PARSE=%SOURCE:/=\% -SET TARGET=%4 -setlocal enabledelayedexpansion -for /F "skip=1 tokens=*" %%a in ('WMIC LOGICALDISK where "volumename like '%TARGET%%%'" get deviceid') do if not defined id set id=%%a -Call Set "deviceid=%%id: =%%" -if not "%deviceid%" == "" (XCOPY %SRC_PARSE% %deviceid% /Y /Q >NUL -echo Upload complete ) else ( echo %TARGET% not found. Please ensure the device is correctly connected) \ No newline at end of file diff --git a/src/massStorageCopy/massStorageCopy.c b/src/massStorageCopy/massStorageCopy.c index 6f7aa5b3..6fd5acce 100644 --- a/src/massStorageCopy/massStorageCopy.c +++ b/src/massStorageCopy/massStorageCopy.c @@ -4,13 +4,38 @@ #include #include #include +#include + +static char *input_path = NULL; +static char *output_path = NULL; +static char *output_dev = NULL; +static char **list_output_dev = NULL; +static char *cmd = NULL; +static FILE *aFile = NULL; void usage(char *name) { - printf("Usage: %s [-I ] [-O ]\n\n", name); + printf("Usage: %s [-I ] [-O ]\n\n", name); printf("Mandatory options:\n"); printf("\t-I: filepath binary to copy\n"); - printf("\t-O: mountpoint destination name\n"); + printf("\t-O: mountpoint(s) destination name.\n"); + printf("\t Could be a list (separated by','). Ex: \"NODE_1,NODE2,NODE_3\"\n"); +} + +void free_ressource() +{ + if(input_path) + free(input_path); + if(output_path) + free(output_path); + if(output_dev) + free(output_dev); + if(list_output_dev) + free(list_output_dev); + if(cmd) + free(cmd); + if(aFile) + endmntent(aFile); } int main(int argc, char *argv[]) @@ -18,12 +43,10 @@ int main(int argc, char *argv[]) int c, i; int ret = 0; int device_found = 0; - char input_path[256] = ""; - char output_dev[256] = ""; - char output_path[256] = ""; - char cmd[512] = ""; struct mntent *ent = NULL; - FILE *aFile = NULL; + char *p = NULL; + int n_output_dev = 0; + char scp_cmd[]="scp"; opterr = 0; @@ -31,10 +54,14 @@ int main(int argc, char *argv[]) switch (c) { case 'I': - strcpy(input_path, optarg); + input_path = malloc(strlen(optarg)+1); + if(input_path != NULL) + strcpy(input_path, optarg); break; case 'O': - strcpy(output_dev, optarg); + output_dev = malloc(strlen(optarg)+1); + if(output_dev != NULL) + strcpy(output_dev, optarg); break; case '?': if ((optopt == 'I') || (optopt == 'O')) @@ -46,40 +73,77 @@ int main(int argc, char *argv[]) "Unknown option character `\\x%x'.\n", optopt); usage(argv[0]); - return 1; + free_ressource(); + return EINVAL; default: abort (); } + if((input_path == NULL) || (output_dev == NULL)) + { + free_ressource(); + exit(ENOMEM); + } + if (strlen(input_path) && strlen(output_dev)) { - //get the mounted devives list + /* get the mounted devives list */ aFile = setmntent("/proc/mounts", "r"); if (aFile == NULL) { perror("setmntent"); - exit(1); + free_ressource(); + exit(ENOENT); } - //now lets read the path of the device - while (NULL != (ent = getmntent(aFile))) { - if (strstr(ent->mnt_dir, output_dev)) { - sprintf(output_path, "%s", ent->mnt_dir); - device_found = 1; + p = strtok (output_dev, ","); + + /* split output_dev and append tokens to list_output_dev */ + while (p) { + list_output_dev = realloc (list_output_dev, sizeof (char*) * ++n_output_dev); + + if (list_output_dev == NULL) + exit (ENOMEM); + + list_output_dev[n_output_dev-1] = p; + + p = strtok (NULL, ","); + } + + /* realloc one extra element for the last NULL */ + list_output_dev = realloc (list_output_dev, sizeof (char*) * (n_output_dev+1)); + list_output_dev[n_output_dev] = 0; + + /* now lets read the path of the device */ + while ((NULL != (ent = getmntent(aFile))) && (!device_found)) { + for (i = 0; (i < (n_output_dev)) && (!device_found); ++i) { + if (strstr(ent->mnt_dir, list_output_dev[i])) { + output_path = malloc(strlen(ent->mnt_dir)+1); + if(output_path != NULL) { + sprintf(output_path, "%s", ent->mnt_dir); + } else { + free_ressource(); + exit(ENOMEM); + } + device_found = 1; + } } } - endmntent(aFile); - if(device_found) { printf("copying %s to %s\n", input_path, output_path); - - sprintf(cmd, "scp %s %s", input_path, output_path); - system(cmd); + cmd = malloc(strlen(scp_cmd)+1+strlen(input_path)+1+strlen(output_path)+1); + if(cmd != NULL) { + sprintf(cmd, "%s %s %s", scp_cmd, input_path, output_path); + } else { + free_ressource(); + exit(ENOMEM); + } + ret = system(cmd); } else { printf("%s not found. please ensure the device is correctly connected\n", output_dev); - ret = -1; + ret = ENODEV; } } else @@ -87,6 +151,6 @@ int main(int argc, char *argv[]) printf("Missing argument\n"); usage(argv[0]); } - + free_ressource(); return ret; } diff --git a/win/massStorageCopy.bat b/win/massStorageCopy.bat index 8325ff38..7a813423 100644 --- a/win/massStorageCopy.bat +++ b/win/massStorageCopy.bat @@ -1,9 +1,39 @@ -@ECHO off -SET SOURCE=%2 -SET SRC_PARSE=%SOURCE:/=\% -SET TARGET=%4 -setlocal enabledelayedexpansion -for /F "skip=1 tokens=*" %%a in ('WMIC LOGICALDISK where "volumename like '%TARGET%%%'" get deviceid') do if not defined id set id=%%a -Call Set "deviceid=%%id: =%%" -if not "%deviceid%" == "" (XCOPY %SRC_PARSE% %deviceid% /Y /Q >NUL -echo Upload complete ) else ( echo %TARGET% not found. Please ensure the device is correctly connected) +@ECHO off + +REM Exit codes for xcopy +REM code | Description +REM 0 | Files were copied without error. +REM 1 | No files were found to copy. +REM 2 | The user pressed CTRL+C to terminate xcopy. +REM 4 | Initialization error occurred. There is not enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line. +REM 5 | Disk write error occurred. + +SET SOURCE=%2 +SET SRC_PARSE=%SOURCE:/=\% +SET TARGET=%4 +SET TARGET=%TARGET:\=% + +call :parse %TARGET% +echo %TARGET% not found. Please ensure the device is correctly connected. +exit 7 + +:parse +set list=%1 +set list=%list:"=% + +for /f "tokens=1* delims=," %%a in ("%list%") DO ( + if not "%%a" == "" call :sub %%a + if not "%%b" == "" call :parse "%%b" +) +goto :eof + + +:sub +setlocal enabledelayedexpansion +for /F "skip=1 tokens=*" %%a in ('WMIC LOGICALDISK where "volumename like '%~1'" get deviceid 2^>NUL') do if not defined id set id=%%a + call Set "deviceid=%%id: =%%" + if not "%deviceid%" == "" ( + XCOPY %SRC_PARSE% %deviceid% /Y /Q + if !errorlevel! == 0 (echo Upload complete on %1 ^(%deviceid%^)) + exit !errorlevel!) +goto :eof