From f8a6410104d1294b75fbcb0f63c1dc39e3a5c40c Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 11 Jul 2008 15:20:04 +0000 Subject: [PATCH] bin_to_cso_mp3 improved git-svn-id: file:///home/notaz/opt/svn/PicoDrive@539 be3aeb3a-fb24-0410-a615-afba39da0efa --- tools/bin_to_cso_mp3/bin_to_cso_mp3.c | 77 ++++++++++++++++++++---- tools/bin_to_cso_mp3/bin_to_cso_mp3.exe | Bin 31860 -> 28672 bytes 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/tools/bin_to_cso_mp3/bin_to_cso_mp3.c b/tools/bin_to_cso_mp3/bin_to_cso_mp3.c index 87a5599..39ca7bf 100644 --- a/tools/bin_to_cso_mp3/bin_to_cso_mp3.c +++ b/tools/bin_to_cso_mp3/bin_to_cso_mp3.c @@ -2,12 +2,14 @@ * bin_to_cso_mp3 * originally written by Exophase as "bin_to_iso_ogg" * updated for cso/mp3 by notaz + * v2 */ #include #include #include #include #include +#include #ifndef MAX_PATH #define MAX_PATH 1024 @@ -100,12 +102,28 @@ static void myexit(int code) char *skip_whitespace(char *str) { - while(*str == ' ') + while (isspace(*str)) str++; return str; } +char *skip_whitespace_rev(char *str) +{ + while (isspace(*str)) + str--; + + return str; +} + +char *skip_nonspace_rev(char *str) +{ + while (!isspace(*str)) + str--; + + return str; +} + s32 load_bin_cue(char *cue_file_name) { FILE *cue_file = fopen(cue_file_name, "rb"); @@ -116,6 +134,7 @@ s32 load_bin_cue(char *cue_file_name) { char line_buffer[256]; char *line_buffer_ptr; + char *tmp; char bin_file_name[MAX_PATH]; char *separator_pos; @@ -129,11 +148,31 @@ s32 load_bin_cue(char *cue_file_name) u32 i; // First, get filename. Only support binary right now. - fgets(line_buffer, 255, cue_file); - - strcpy(bin_file_name, strchr(line_buffer, '"') + 1); - - *(strrchr(bin_file_name, '"')) = 0; + tmp = fgets(line_buffer, 255, cue_file); + if (tmp == NULL) goto invalid; + separator_pos = line_buffer + strlen(line_buffer) - 1; + separator_pos = skip_whitespace_rev(separator_pos); + if (separator_pos <= line_buffer) goto invalid; + separator_pos = skip_nonspace_rev(separator_pos); + if (separator_pos <= line_buffer) goto invalid; + separator_pos = skip_whitespace_rev(separator_pos); + if (separator_pos <= line_buffer) goto invalid; + // see if what's there is a quote. + if(*separator_pos == '"') + { + separator_pos[0] = 0; + separator_pos = strrchr(line_buffer, '"'); + if (separator_pos == NULL) goto invalid; + strcpy(bin_file_name, separator_pos + 1); + } + else + { + // Otherwise go to the next space. + separator_pos[1] = 0; + separator_pos = strrchr(line_buffer, ' '); + if (separator_pos == NULL) goto invalid; + strcpy(bin_file_name, separator_pos + 1); + } // Might have to change directory first. separator_pos = strrchr(cue_file_name, DIR_SEPARATOR_CHAR); @@ -153,8 +192,6 @@ s32 load_bin_cue(char *cue_file_name) cd_bin.bin_file = fopen(bin_file_name, "rb"); #endif - printf("loaded bin file %s (%p)\n", bin_file_name, cd_bin.bin_file); - *separator_pos = DIR_SEPARATOR_CHAR; chdir(current_dir); } @@ -167,6 +204,16 @@ s32 load_bin_cue(char *cue_file_name) #endif } + if (cd_bin.bin_file == NULL) + { + printf("can't open bin file: \"%s\"\n", bin_file_name); + return -1; + } + else + { + printf("found bin file: %s\n", bin_file_name); + } + for(i = 0; i < 100; i++) { cd_bin.logical_tracks[i] = NULL; @@ -338,6 +385,9 @@ s32 load_bin_cue(char *cue_file_name) return 0; } + return -1; +invalid: + printf("error: invalid/unsupported .cue file\n"); return -1; } @@ -600,9 +650,9 @@ s32 convert_bin_cue(char *output_name_base) #ifdef _WIN32 static void update_path(void) { - char buff1[MAX_PATH], buff2[MAX_PATH]; + char buff1[MAX_PATH*4], *buff2; char *path; - int i; + int size, i; path = getenv("PATH"); GetModuleFileNameA(NULL, buff1, sizeof(buff1)); @@ -610,8 +660,13 @@ static void update_path(void) if (buff1[i] == '\\') break; buff1[i] = 0; - snprintf(buff2, sizeof(buff2), "%s;%s", path, buff1); + size = strlen(path) + strlen(buff1) + 3; + buff2 = malloc(size); + if (buff2 == NULL) return; + + snprintf(buff2, size, "%s;%s", path, buff1); SetEnvironmentVariableA("PATH", buff2); + free(buff2); } #endif diff --git a/tools/bin_to_cso_mp3/bin_to_cso_mp3.exe b/tools/bin_to_cso_mp3/bin_to_cso_mp3.exe index 733795cbb4926cfa6fb6a9ef04a518c7eb50e161..5571dc9aee71c989d8a3085fc08b9e34ba65e45c 100755 GIT binary patch literal 28672 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 I$}7%Jk6W&o`ncwwkmXi}<>ji3`2yb#E6 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 literal 31860 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

f1Zgit0 z^llA(sfPZ5hQ3@wZzu_UmxjJvLyv0c%^G^JB=jx~y+K3YsG(Oo=(0b&5tPZ=yXp^} z_)+~~QH;s>X;xN13-9q}_lG2($InIj!}-b^7wHe1Z8>nJ=TQA&=pz16{oz|^dsE_K zI?GwXs!Q8`<5Mbrd^0?jJKqXXtcuu(IKSnKbw<^9L)Ridh|;*w^Uhlt3Ep4IO;F3G zT$U!jt-$wI+|EU~(0_WNQB+XY;W8jShIMpuF_(DvrAloA&n}yX1X2G@2VKPN!?C|@TY7y5TK%D=fNrdWQ*#9JC=#jD^+xb*oQD37=(QvqGg zYe$v33KaF-sIaS%)Wbm+LAe#T?r3SHOqZn}2W8Mzr!+E%?}-%Fr$JF;laTzkpomdV z@f-!k?TsI5l%IgI(Ph^!KsjYoOcR@tVC@+lj-TmyQN526==7G<;W6cc$U#>`y$d}3 zj%2wwvDw9Q9eC92R7j>hUJ-Xi=&M25W6Po37UHpeh+i_(Qcw1POY&CmoOG4?I4Fm0 ziYXUs4!KG_0Unwo6M)cXFK*p6_-#;9jvNyUUn8Q<$=$r2V*L;FakZ3}NFkSM zW&2z@?OXP_K+Q7(Wo>Z1Gsl(Q~MCH;^MVx87B7nBhfPdzA4yC};*x!|I#28HTM$e~5o zwCuRs_75$(j#A6*R&9rm7g#?0fU9r$800kBl1;S?*_K1LcY$Z49jm5VI_;A4IC!2b zl7q1cOOjJIk0}>22W<*Teg>uXI;F(IYG$~24uFSh!|~WrqS$s(?hiqsj@{uo1In;1 znRtEy%03rm6qJICGNpnz=|Hs5N-2hH&v6xa4!TOs2c_MnsMYW(S3A9#B)fF}5GV_s zQm8>%W8ZI=GR5+8R_*eJiBbkcIqftFO3;==%03MW2u0p_4iq{Z|9nTvK`8PlNAE}! zSG~Us%1bWEL!cb7DHKt(sJz*w;eUf?x6MPSzXyd5>hcH=|3(l$iX3v4dJiaFb}3UV z!)M(to`v*NN*sHeuY%%^jn}D^&11?1`-fcUmtkSvY!q~A@ExEW zwM*3^RUeJDX18FL(@Hz69*fy2IJ`OSTl3O~nW=!o0VTx@c(!nO= zn0)b>iKPnnTH&;nO^KBj#pw^nJJ(`iOfktcKeWV92Dx5eT9^b7+=n(oR^W+!~4# zu+W8e!Ln&c(BczehNWWh>z6Ju z@xM2%ct;F|W4!<-DQU8~`1knSE)eC9+gb7Yg1Q9ug2RK7tWkHZ71t-PL2teDzF+*9 z84gpMWB{J3CA4l81_~tBx2)T+dTq#TzBkme>TYv=XwBU#)$RkP8SlVO9&((KDSIOh z%oDK<6;KcoLRRtGVH2B;OtcY6a4Ar^Sn)7XzdaV-S`VePz3)JrIA(ZhwKoWuprRPz z33IXyPAHJ?(DqgdHZCS7Scy!L9r%&F*hj()qjp4`a!j#33U)6+5Sqz0DiYa>;OOXx z3lF$6XthFmTa5drBm7`8ZDz8qqFI~R!!3ht%7ovry3OoL6lq{`N_+x}7~oY^6z{X5 zXtZ~VW2xLNhBsrfE18IrMMak39da?w23#VMh%S~BCji~Kkq*`!&(N;AS z1Udx`gB+16R!34?X7e3rq+B_7ktzOU$Ga;yJDG8Lnb)9P@MxM)K57nO%)B~|QC1I*%m zOJpW`4w~PX*lv$j8lpeuTjMEXFVaO&3GALnr4+Y#9FUUblbcdPY;L1c;vETk1#B-d zQJu*tj1tVB9i6g#`y5*5NiBAwAhNrW;>P9b`$S!;ZG@y~IfZt*58i-^I|<=$tH|F@ zhhayEobM>1VjCkzdzyhy)SD_}#p99W=Y6}qag*!_Rb=qG_Qs%V>{2o>(d|lC#yhBe z6?c3zXvflgSC9;EQ51|c>O(Lhm~ZzaHML_`L?GXUNf`l;@ZF%CR<|{l?u;d_Uu=dU z$=M)E6%boZseZ!oaj|Zg@}T;4on