From 82eb13a6d6f7519bf6c4452b4e67bc296d30801b Mon Sep 17 00:00:00 2001 From: "Frederic.Pillon" Date: Fri, 16 Jun 2017 14:43:12 +0200 Subject: [PATCH 1/3] 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 zcmeHNe{fXSb-pXD$by9=WZ_bS!-FnHq+%^VFtSWy35j2}Ko|r`2Ajuf_epQV{_4KB zSjyl;%nFPwNM+ZP(rKoJl6sn{Q!``Np=qWCL?AfR8JfDD%%oG3#&%bMrcR7OO|iG% zci+3>>6y&5|8{hxv-f`IoO|xQ=l&E7d4JN zv`~o9E5Q)SM5W^(wo7>#vO37?AR`rlNtCk<66=^~o74eJQnGFD+VShKbA2=zBCUmt zq~uRP4)}>g`=}3o00%0yN=GS;Ph|g%i$&MfHy8rYubGN?u@E`uwwt5ef}2U7U=KK!;1f60eid^qC6_xtd(KD^h5ANS$s zeR#DGzvRR3c(8`@A`j;Haz6YIKKyq+Jm|x(`S2Hg_(31u;ltks?mrz2aen7urv4Op z)`RZ>ZuosAuND`94|wFqfd@TUU~R>?rq&33bC+(}@kCnBTSi=1b}p735JrE(7FITw zNZY+4Yvgj7oXF;FOXyIJ#`ftkbD!QDO(aFmh$fSnn27dda;ReG?94u48Fngd8);i4 z93vDYjWjd-i$257WNl`yTFNm3W;E9atvH$#)_`RjDFG&xjda{q?sfYGF4c6MqhY^t zww{V6(xNwK7-09MGHI8si;bO|*R|^_BTbW~MmPnhfb&;ASyG%kGR1N7fYjvvDU*AM z`;nKB5rmHqMwCRnELsV6$;PE3ol6PZjf>`KiDLtOWiPHfIfU z98z`6v1#Wq#{yWu92-|-j*TB?{wX2qnTN0rn9mfVk@+l~ugtMPnweMPjAD+SwlYV5 zI+#}rv57f4-pPE95Zjnz@pm)F!TSZ~I9#4&K39mn%Luc)Z;x91z!iCW8G3f_>lvW2(tF$D9Pl=as)FzALS5d9Bgrhep8^0nk zy18uZEF`A4&3@wdKL%q7y>1Q? zUzM2NH;)isk(je!juM}hn6qIXCq6APXT>~0d_rQ*j`4-+whuqd0;eg_EAC*dIxrgOX!$TB*yt%L2J;$Q@N&7Rc4eeNk~)Aa@qI#}$_aa&KTyo&1L4vOw-Hpey^b zYX|1EaDCgz`bvy#fpL=00w{H^ID4rh+(=I%Z*uciH*a=xKDJA5~)C;BY8#MEu_?R^FHrTG2A)2A1l-raU={(oWLYm<>qyFCKn>tBh+gl0_-Rp2zQjK4-H|-DHqOkosgeX z9D+TpP@LwXcmiFPD%G!xp|jOPZ{RyaYP$Hlz#MT5jiHW#tXPRUr?`CF#gu;lk{l)H ze~s=gam@1xx!6YYbT@4rfC_tg6ioE8`C6*b5nda>7}g%EI|OwhS2CO|C-|>n>=akD zyT0?4s?*mXk<5|q@Y;jtu`3@v_itr^^RU!BT&9|WHfe zTBLEBy>f|W#Q3-H0ox4{@R?F|p+Rbm)WCAv3jIc>m55?gSIW@y* zvI}Z(b}MA9!d5CxP;s^Y2Bt^m%ARn`afx$9p_#8>zKX9*luF02t!b-3TVu{H1hfGI zV@`hoIo`mJ3unuz8Ui@QgGU`h9V4^Z#>iZ`ujP@{8LmNVmB+ea-Q8HDXp+?jP+is} z_!o2mU244cSn)C(s2uPv*m7;T-Tel;E5L-q8u7>>uH6sSpOE_;xFeIB>R}iueia{J zHICTfPGi+-o^^QG_~k8()|lA6=PA!O*3QqbDDB!&T#Y^*9NW1Fk0aL?j3mR2$6l?3 z8;fnMQwX8B?BcnP%MRVNmpb2DFyB1f5JvYxC^oU1r5FE}iiJyohi~QIE?ii!dyoFq z*tOZC-t++;b>#EV7`lCM>}Q($0EEpipBr~t(LSR^TViRumv7eA_9l`>Hfo!ndkVNq zTbs({({?t4hwpl8+2^#UX3Y{?qUm_l&g2F(JoP3rX{$xdT)w$QQ&qK|L^=woozY?$ zJirTxyIQmBhqAd$>>)WK%kzfOAUNPe zx{vO}@RwM#1WNLs_EAV@Y^@hQjYqU>(ui7yW~8lr&d_YrfK&D-VuqHm;J94Qh}p>j zl+tOGj5r*huq+x^V-bP*<&W?y6OZ1aW{52e;e76ka z7}szDaE&qrzPw!o4uk^pD}%u!;A`OV-Me_BR2l>pRiO=4m5){5V+Z@iqxV1ZnU&$i zl(&MoSmpa}TUF>#*}B;kWgEW_GqV0($diyCMJ^`gN2I(StU=I^A+P0&zmjh{TwVy4 z2P?+fF1ATcyemNbGUx~RHi{y5bla*bpDk~%syQ5NtEwwhY^`c6+f-H8Hda;BcCo6m z?NU{!?fX^18mJdRw^5hhAk%5u1JfRu_Q13Uradt2foTs+dtllF(;k@i!2d@N3?2!F z_JTMzzQ&RGBVF)tFoY`?QHP(7arGnbq;cgVaGfJ~*ID^WFvRye;txMAWnRX8Ghfk8 z7jS2U{37|2gsgTvghDvF-x(g7$+BgT4-W3G_PXBIqs9d!U=3 z8Hf?M5A+~t4QK;s7pNDsA9NV>bm3fI)d}T#b zq_HWoYMH|qB4Q1s>}U^i+)c{dR3-etV&t+Sg5L*>NZY#2%k5~Ni~7>}NKZb2`}ag# zM2O6&Wr|3AAPsv?j*Cnw*>B`5{G>7k=#b@%B=wy_Hff7UB8_X+h;8)avljrO41U&$ ziilzAy*d0OqnmNmRLH5JM{~L8fKx-2zZ8QSj7L+67#hyNAU-0p6~|(aWr;{Elj09B z%5VRhoa>V7f$K@eUI1{-s6-jl?|^XaDD`BF1OyteN?glKD?m!`2-Y!w?+8nY^P%)Q z0B>RqvR$tKm!a2$GWP)!^+;Pm+ym6(zPJj#DRYrvbQsR8qw~ zU~msmkL&*o8ex2bYL|S{J`nc|%iK3NpvNl}Z@Ylv%OG68$~xS4VHm0hR`xgsF6078 z>2aTSLV^32dh*ObPCfpX!@jZ|o+CjN=zEoDkBPr$E4@bOH9~Jt4H7c?gt{+y^cbIW z8k5t*333zln2v*#J)T>2xFc4-Us0~w{S#M@eyN9EJ@hVk+EscldGut=3>uPGPT(^s zz1L7?b!qQ;*uw#Kn+k4HdW^Zi^|hR18RLUk9wnoyD!+j;x+L{@&Q|^gy|TBH(puIS*L(9QO3l$1lr>oW}@Ej%98Uz842!}wj8byf2?8r z6u3zhnRCum>V6Qm;iw0|SOsGLxVE_F**BGj8iYux&V#A!DY-Z2c|`0)mpQRn4t84R z`Ql)w1)d`gb{gP$;b3Ps@?3B*XVlsM4t6#K_ql^*Ccj4=%uzVsuMU%^8h*x8l!*bffotYDt8t{lv7cjr06!On@z zb?jhg=c@1Na`)+h>(Y_)auSK_52;)}J;1+{cplkuJuxqr(PAt)sT@x+-gyg(UzRvx z)qVgc2cLW1cfZ5S#B9OK2hDv}B5ng#&rZaj2bMSd$OEX|i=6ux8SuU081g|+{XYU$ z{s@R#d6rU_iT&X@z?&x==ZHFBuRmaJGO>ReynCA)g8H4toPkz&tLyUbsPkiK) z*Pvtk9-+JzC-;4x!-Do#0`r<)+3)blclogC!_WBe3qJhkKKvbEHD31jf=~XY55MQZ z8v6U82ebbbIC7HcKZ;^b**sAT?2XA==HzsiTV`EbmK^S}(#iJ~s&_Ykq$UJd5s zIbeRDvwg~+2j=&&VEHaeI-lj8CvzQ7+qnTmAo5v0o=>F)P{o6Ez5+~9 zO+_th2b#l;a62wC(fdRip_V!?gheKA`^&hmMEIs<>#mGAmWqq$2HYZ}u?^eXwyf9J zZ|%U)9Y3h@l&0fC@A%@@wk@06q2-atFiN3s?Ce_C)~R=G*sx=Lx8B{hu5&%j$wU1%{hUfUJgS$y;wKo+m0J%Iz=L1u>A3=cQl&Zz|uRMMmN&c%fYK6;$gj<$)Hs) zb28x7%XC9yy(}lr)yu(x@^}CtwqBtV0qf=XqFNcJJ5?OFGP;Ri0XqB>p}h#fovQ7N zob?LbC|fVf3ETB@JS&20NMQM6VYzFlH>;aZW6|JE)Md%&+&qIH?u7Gt&GE%Nv(L-X zAKR~QclT<05?cj(*NOY}YPpfhUY4$7@wwZ8i$+IGf|beVV)P3ZsX73rEKwQ6?6rcX 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 From 68b6a770770262e035092c85ae967125716d8e5b Mon Sep 17 00:00:00 2001 From: fpr Date: Mon, 19 Jun 2017 11:20:06 +0200 Subject: [PATCH 2/3] MassStorage updated to manage several node name on MacOSX. Source file modified to be as close as possible than Linux source. Easier to maintain. Signed-off-by: fpr --- macosx/massStorageCopyMacOsX | Bin 8972 -> 13844 bytes src/massStorageCopy/massStorageCopyMacOsX.c | 149 ++++++++++++++++---- 2 files changed, 119 insertions(+), 30 deletions(-) diff --git a/macosx/massStorageCopyMacOsX b/macosx/massStorageCopyMacOsX index 4fa3550f54e8077a82d7df9e2a35fbe48c7fe308..e67acb81243fe6a7dcf3b403b7d660b7493d84eb 100644 GIT binary patch literal 13844 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 #include #include +#include +#include +#include #define MAX_FS 128 +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; + + +void usage(char *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(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); +} + int main(int argc, char *argv[]) { - int i; + int c, i, n; int ret = 0; int device_found = 0; - char input_path[256]; - char output_dev[256]; - char output_path[256]; - char cmd[512]; struct statfs buf[MAX_FS]; int fs_count; + char *p = NULL; + int n_output_dev = 0; + char scp_cmd[]="scp"; - if(argc < 4) { - printf("error: missing parameters\n"); - ret = -1; - } + opterr = 0; - for(i = 1; i < argc; i++) { - - if((strcmp(argv[i], "-I") == 0)&&(i+1 < argc)) { - strcpy(input_path, argv[i+1]); - i++; - } else if((strcmp(argv[i], "-O") == 0)&&(i+1 < argc)) { - strcpy(output_dev, argv[i+1]); - i++; - } else { - printf("error: unknown option %s\n", argv[i]); - ret = -1; + while ((c = getopt (argc, argv, "I:O:")) != -1) { + switch (c) + { + case 'I': + input_path = malloc(strlen(optarg)+1); + if(input_path != NULL) + strcpy(input_path, optarg); + break; + case 'O': + output_dev = malloc(strlen(optarg)+1); + if(output_dev != NULL) + strcpy(output_dev, optarg); + break; + case '?': + if ((optopt == 'I') || (optopt == 'O')) + fprintf (stderr, "Option -%c requires an argument.\n", optopt); + else if (isprint (optopt)) + fprintf (stderr, "Unknown option `-%c'.\n", optopt); + else + fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); + usage(argv[0]); + free_ressource(); + return EINVAL; + default: + abort (); } } - if(ret == 0) { + if((input_path == NULL) || (output_dev == NULL)) + { + free_ressource(); + exit(ENOMEM); + } + if(strlen(input_path) && strlen(output_dev)) + { + /* get the mounted devices list */ fs_count = getfsstat(NULL,0,MNT_WAIT); if(fs_count < 0) { perror("getfsstat"); - exit(1); + free_ressource(); + exit(ENOENT); } getfsstat(buf,fs_count*sizeof(buf[0]),MNT_WAIT); - for(i = 0; i < fs_count; i++) { - if(strstr(buf[i].f_mntonname,output_dev)) { - sprintf(output_path, "%s", buf[i].f_mntonname); - device_found = 1; + /* " must be removed too */ + 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; + + for(n = 0; (n < fs_count) && (!device_found); n++) { + for(i = 0; (i < n_output_dev) && (!device_found); i++) { + if(strstr(buf[n].f_mntonname,list_output_dev[i])) { + output_path = malloc(strlen(buf[n].f_mntonname)+1); + if(output_path != NULL) { + sprintf(output_path, "%s", buf[n].f_mntonname); + } else { + free_ressource(); + exit(ENOMEM); + } + device_found = 1; + } } } 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", + printf("%s not found. Please ensure the device is correctly connected\n", output_dev); - ret = -1; + ret = ENODEV; } + } else { + printf("Missing argument\n"); + usage(argv[0]); } + free_ressource(); return ret; } From e82d0f26ba94c5bf186d7495d156fd93b3f35bd2 Mon Sep 17 00:00:00 2001 From: "Frederic.Pillon" Date: Tue, 20 Jun 2017 09:32:43 +0200 Subject: [PATCH 3/3] Minor update to avoid warning Fix typo Signed-off-by: Frederic.Pillon --- linux/massStorageCopy | Bin 12529 -> 12535 bytes linux64/massStorageCopy | Bin 14130 -> 14134 bytes src/massStorageCopy/massStorageCopy.c | 5 +++-- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/linux/massStorageCopy b/linux/massStorageCopy index 4a0db4b9f2f922728eb3a269fd34b4bfef34e2b1..215d2231ef8c45d435e7af911e33c39c422e5090 100755 GIT binary patch delta 2495 zcmZ8jZERCj7(Vy*7TT^|*KV>+x3pdFCY#Du8Db2w!ioZdqK-K}wlQ$ZWMqI_fJiK} z4%U_7#sTC9>MHO{qApFu@DVr0$6`PiNR-5c9~hE5K7s?~%em|G-nOIkG`;6M@B6&( zdG34eJ?DU9pdYC>AA~4i(9Ph96VbR7+>>G-Gw!Tgx?T!q9$`~>aF(ChGLEDe8Z=?x7Q z#w7LtW3pvvSjTiA5l+*v$Sf3uHu{}pm|)>W`m1Rd3mFRqMpad9>uc64mm`h|UkG+D zZeaD$PRa0QrJO-)bykB9C@tXM( zlbm8D-f>WdkMMR=QBg@(G~p+(Utgj8fiA>CPtfWJ7la|}5oSHom(RSY=y_A7@vRtr z7QboA@;AnilcIcbPKc2pKeQ>Qarto)&GUwiG39kI&iZ7-PDBth=#!<;9PL)_{Hv;f zzQ7jQr&`-uP>^strblIs;Vx~^VpCe8wJ{^3(uxS8@J~~m3pp~PuzS!cHy^6%f&B;x z)1|GiB^REr$#Vc6t!OZalp~LFPN z74nSMlUV+;{wtzz5_j}sP>g2+8#6Fv>>;l+PZng}VP5E{e4srm%Ru#pyb{gkMz+}6 z4D!3?{G65GAW11bZ`WZeZ20KZv3UAchx&ieby zYN`j`>x%!n7Qf?BE8kY~p{jKt-^EzqMoy?vF6oSzQESD+`%;%oj9`-1fk?z@?GS`T z{F}6e*`@!eY6UX)A}j4cqv-dcZ|64Kbm0=8XLAc4zSiatmh(=VBWnOy1xqHa50N25iHy zg&mn05)gzoQN&;92S1ez++{D_xneT&*!;~ z6fQxQmp{mJ=zTywp6hn&X_7`h2P2Xo^R*Z)!e|lS<8~W|kaTDwV;gwC+hO!!^YB@* znQ>2EIv;hL^;NJ`af|FWYKH~X&d_`dWcaXZRgr4>PeJ&Q&nnpNCovF@oe~+*ND}or zrge-&MX`}OM$)3#q+t>m#VHylnNds?WQ@c{F;xcLQ+GxXf&} zk^HemB>%_2v}Vzx+{)U3*Cp_~f$1!y*NymlfzM;LUW?`54;*ih^l8%Aw94y^f0#^V{{vmpm#_c; delta 2410 zcmZ8je{54#6u$5Em9<;DwcUgbhHclkxgoL+7zTrG9Yp~LIE5L5%ndT!A~?h?VF}nR z+rX`W8wX{7NT5LtM3I?lM1wLM5s~m8F(jCvLGa-geuNQz4eEDZ+tKtkefNClocrDH zo%`Os?@ry#y54MQpfBegqv{Ys?dxtz9kB^9(yN$8dP$Z($*S*P`uvx_z3D$wJ$Ycu z6H9l`-ShP!`bzSUR)6S9+BvRB$hRdTV^NA0rH{zX#OKlF|4^leP? zo=w6(C*igv{4LoHW%k4HZW>Tb3VOT95&P&pL*~@!AH_Wx;#WjACuHl)R-UPlg)AieWq7!k(4$Uz%W7=23SkhpVm_OW zW$`c;A3LI$CZyA1<7L~eA|ZkuW06RtYp~g~@*ef|~P}s14r(&wAZs_b*Oj;9N zOSwMB3%AzuFcLYXsH@q2@{w-0u~ z(AFd4lwUQ~U<7A&`&A{lK<9TL1nBSBtokDvU7fh|(1(~C?R(P@?k^mkh3^o?x)avv)4qoa6+KIl+3BZakYCzqvQ%6G^; zup6NeU%CccEMU~98m2mnJDs!P0gKS4KA>Jpp){XfrV9MG2d=1;R-ytK;eudUr3#4VV!}{C{A7Bpc$lXX}hhJUDL>(B{J*1a{ zVKbmK6xt4f40&ehe8-@Hf$1I@(@O)rpkUaFSg1di_$Me)UhnW??KGstr@jogUJYIe zI6vj-1)PxT&19*Q;l04#9(aS}t2>wL8o&iEZ?IXdte;hyh5TmY9PQ>E$gjVesYVh-x2N;TED}BsaKD_3j8;@X}~Lx{>}y$`IygAG#ENC8I}@HqZsz zk{ti-NMt#PPk?k2dJ9te(f5+NqczwuwjFKz|gNsvNU-xh$p^F}fOmvbdIq8(ifw7;ffg(y=^?k@Jqy**uS# z8Ah>-dFfuB)2M=7rKui|k>{zT1+Z9!LhE69VR`9ekH;_pG ztg|F9lg2z2V<9|+WK}(8eS63DHBXOKs)+R=7G9-ZlBD(IE7%rbG0=}~4UA|kiFcCB)vF0d_?z@H5 z_|$RtjTntAtYQYjuGoq(_5s(@qQYXSjam!$NiNDMYLaZ!T~sXpwT*r(stGV5H$Jay zc=6*Z93ovzwhBYJ@2i^}mnU|z%MVVoiQfj1=Ne+JBl9lwQ~e+c+6R`2B~e?T08Bi>ln$t3(o z0(K$(A8_K?K9&&Y@flDO7r=Fx0(=(}Zbys-Ok<_7<`N}B_!AsVumYIRQFim^#oI9A dkGVsng*&D{k{tTC#JkPq<>Ma_;kFqy^8dT$c0>RG diff --git a/linux64/massStorageCopy b/linux64/massStorageCopy index 41913d2d46c4165239e0a813e3a41ff5efc6082c..64f9de7d1a95cc0a86876bf00630704c9b402bff 100755 GIT binary patch delta 2962 zcmY+G4RBP|702)0%?sJxg#Bg{gzRp@hR=L#5E5z`9v^F794u)y4#>c!AVO@bn>5je z4s7Crot;;viMQiK9cLDG2B^|eG9@WRb|cZW46P7a8e!UIthR4WZ39wWwXi+s-nU77 znYs7;&d2|rd*91@d+PDikM|Z+xvyl<)G?3ntE2Dzqgwp_Fri)UCAEE4>jfygZ?L~C@~TWrcD=dwzd`#l1Dz)eJ;*Ma!cpV z`K=}b3U>xB=l{|`n_0K1EV^Nyk7NUzV6=K=u#oqmV0t18SKu4SxJvpG=UQX~a*FdZ zWFzt$oXe1LTj>Pn`N$G-FJ}jGK5{p5G+;)@9CSo@f&sYzxrOtWZeZw}q?5{d8ZQpK#6@g)%0NF zXv*f4i84BzaNsoRXX`CJWow{_blRJh_($47=yJ!qQU$o^r|0puDY3Q1>_f}i=n^O$ z0%@XASS$H3pf-3LtRJ9t60KgeUO{UJt>?k|-FehiROwZhk0^&z9agaW(T!E-Ck1KAS722$aE{afSR%i{oRrv6V7o4zv zxYAFv*QXFYTbL%SdZoo;0Ni{{rypa7s1C)iP`qPpF}^$|ynbL=af6Jo_T;15S-xYUx?`BQdrYBYN|au*4if8NDnMjHpnK5S zBXpibowC_FXQ7Qruj<|;5}GkVo}KU_Bq(Yqp{V?RHo}b&9jIvW2Qd!+z}lx@V&44; zH57gQ%r36*2RNg@KzSSv{J_Pm_3(Chs^C;9t_6J+f-MQV(8GSmX*E zS`uGET8mhu2Qtrf^PWew1?;ERg*7{|Slp>AxU;ylS*V6|RkLU_Uno?w_pJ*oD3JtR zq8)$M=D+J7wrP#+LgSC46O=|j+>X!h@*6bqfDYUu1eq2C@b z#}14ThxJf1yb(YppR0^&-(vIaf#{Hxw|WAn_`AucVQb>_lCXkuBs77o#n6tQhvFWd zH>$Ovhoa{x-4o`XaoCL!OH#Z58iZ{XKn0~Z`< z?kWHE7nQk(|-e-&u&3?v+XrL>7fUHAJh-O6TrL8a-lY_h{hHLe`J*i@1KS?HR+yqWnb4XV6w2Ty zWP+8HE_U>r1mVXEFPD>jr}Ut~OxalJPJ3jI%)R*O#4E$rd#mXXYx8>H=SZLTCv1uD zxTV4(^XO`e%q~;+z=UtyfC^{It4#azMQlI2QC?>s(rE}k&Tz?W&7x{kM)zh|+oC#C zZp{dL6DZeTKf3{x(z{KuV4%(}>+8z+Wrk~vbp@);E~m^1c5*7P+U(QO=VUhnt4%Y% z&Vm(nrh2!?tsiKsm}8{Ru&$-=!N$J3%xx?nLoj=2hLf2@SRYV78-`dRNx|%C%r(H* z(+4A&3x_CVzwWn^TrXeu+sG92FZa;;fi=s$v?QYMDwk9RhJh531Z!L2p%W~=qQO84 z+1QGI(+C@`JZ7*t*<)2#4KC-vhU$E3fQ{Z)Q$-W3tL7;xvl}%HCH^9rtMMlStS)#J zJ3z9MeLJ|AGIq4aBOL>u4{o26{sx)8$A*K|t3Cs--B3&>d@WodHyGg87b2e=j()6PpwDVHqGq=&(}U@WSdrBtDO01`u!(%%W}i!#tj?8 VwN)$04?7;&)80PgsjXT?{tu0n>*W9d delta 2909 zcmZuz4Qx}_6~5Qb3wE5~{}|H{JE4XVLjF()l%YAa4lflbhJm!OLBgP@VJu3zWJ^|2 z)0%X+PiV=`)Rk^(JxyIRtsQ}Ap+hKk0AV&|T|k9pL#r&5YR^kMC3M;XEA`H~?-^2Q zFVa2dJ3rq!=iVE?H`aNsb8s2=4|&grI%)$d`oP z2W5HNpxw9(p3SS_-DHCi)Q$-68(^0_-t$=A&b-W4)-D>!6Dwnb&?tF$3|ghk@& zJ=X!(q&1M04#Ls=FK;ri+@BWC5pz^+dbX>hqlhsho6&8(%R9^rWBxfhpZ^;J?}fOz zJo3$AKg$LV;cE2-Q6u~;5oFR?d;)t36KiHl;9Z0bgp&e4P1s0yMBuH2ssBt|;3o)6 zga-w#Bb-n8IN?a3f(%Q@&?N%O37ZJF3%r~#_RTV3fgOYk2nPi&AZ#IABd~#RAz{D3 z_uYtbA6UjF@Lj@72{XizY~UYcu##c!bF>8R5T-rMqy_#fVLRa|fo~9Y5KapG2f|Lm zBLZI{>>?Z&_yS=!;X#4V5vFUHIsSRJJX`xobL{$lId(^m&dh~(H>Z+mN07;>i7p{h z91d7sEN{gm)@$D*$39YDz%KV)m737RKfO%HCP%kyguKEnkp;|o52=~Tu~wqO8D#4D z2dHf!?OoE^N&5w9CrLYv+V3wDudGN{Tz)1GBzvr=zejp3rEbIkgl8AI-qKwwG}jvs zUAqaI!6^~@qyE4YgGR$g%8{P<+PjdxKAO-2`* zdz{gQmY%lg!dI*(-X_-$bYZ6l;q{{B8wW7~L5u`WR4Oa(dd>7*60ut}+e$2#$;Y$| z*K!?B__)X$Y0)C(MaeS`!6!Jhmlbhz`|%94VsX;Mor~fBs%jE(JK{>{oeOn>;C*btfGxyuYmY@Hv(|wwyg;~t z8>kjGR*3o&n%?WuNVg+tg8tLgjNp?B&~F`MCz93^5AY`fGfa;xvuGJ_z+#C_xTsB( z5|graq*tT`5(CNJ(nJ$FE7Vr>YDH9RDnY+D>VQ^c3`57mqUn^{2ou&7H9*!y#B|E3pto0(qJGN2s@zJ@(imk}i$JtdSV(&~2;Wx8P^C@<^0i zxE+Uao2O+ZXrgPh{~j8nNlyAD(qq!|HZfNZ2@GGUg@;WzYdhJrZY2y(g|6V;W3&3E zehYilx;0^`Xy_tWLKioOt{p3g9=pO|i`{JAEC^ESL1?iDBA-}Ar4LEOt|oTjSlZ5g zuz;PM3Z<#5*GP|D#_D4tE~UOq7EYFTbW4x0OyeL%O1UXgq+e?EZ<4@4w#rKV^TJeg zREUT)K=Ra{baQNO{E&7oS_3ZH3PpN`{76`jgt1U^wng){;dt7hpHU@6S|{SJCb}L@ z;6z6%lyuVecoS#Pt|tFOv7y`zfB#-x?xNU`PYESuWuJOTUSAUU5@z*C>Ifx7uYB$6 z`z{~0`c9yc!J7_u$w`Z!?U7HdBl*?sYd)&IEl)f!%F&Na>dnz9$A_GE!5P<%vh=^Q z*+EQd|93Xqj&cX`(Ez7WPNQsu74FS^0b1SFT!xr?H9rMs-9G+1xbF59H)7Obdiyml zwY_Y3vM4_kH5$J$nqO=&!SUj1bJ`L_Cu2$Qmaca6nKeXjD|%)eu&eY1!+i!fO848t zOM=2m?@D^6q0v{(hoRf&!;gs}-w!Nfdj3^&5S;#Z;TE@zrv1|fejn_WPMBO-Vm^`| z6v;Yq6%$?o~^S_yN_w=1(}= zfeN?L#D-CN__RO;EDS@4`d|Wmg)ENJ)0}HS)YBIuTZ;Rr(SFfxWw~CyXt&{Ml&$q} z)99wPKJE?cQ{{rHP%*F~b{x7ZJv<4q%58A6(gx|uG!MeWy0;B!2OO!oWtee{ZmrJe z2AuTinku|b{Wag?eweS>=H*2}K_{*TYW?`5>_E;U*jc-p{}_H= #include #include +#include static char *input_path = NULL; static char *output_path = NULL; @@ -87,7 +88,7 @@ int main(int argc, char *argv[]) if (strlen(input_path) && strlen(output_dev)) { - /* get the mounted devives list */ + /* get the mounted devices list */ aFile = setmntent("/proc/mounts", "r"); if (aFile == NULL) { perror("setmntent"); @@ -141,7 +142,7 @@ int main(int argc, char *argv[]) ret = system(cmd); } else { - printf("%s not found. please ensure the device is correctly connected\n", + printf("%s not found. Please ensure the device is correctly connected\n", output_dev); ret = ENODEV; }