| ... | ... |
@@ -101,7 +101,18 @@ void getFileInfo(const in_char *file, in_char *title, int *length_in_ms) |
| 101 | 101 |
xSF = xSFFile; |
| 102 | 102 |
else |
| 103 | 103 |
{
|
| 104 |
- xSF = new XSFFile(file); |
|
| 104 |
+ try |
|
| 105 |
+ {
|
|
| 106 |
+ xSF = new XSFFile(file); |
|
| 107 |
+ } |
|
| 108 |
+ catch (const std::exception &) |
|
| 109 |
+ {
|
|
| 110 |
+ if (title) |
|
| 111 |
+ String("").CopyToString(title);
|
|
| 112 |
+ if (length_in_ms) |
|
| 113 |
+ *length_in_ms = -1000; |
|
| 114 |
+ return; |
|
| 115 |
+ } |
|
| 105 | 116 |
toFree = true; |
| 106 | 117 |
} |
| 107 | 118 |
if (title) |
| ... | ... |
@@ -309,23 +320,30 @@ extern "C" __declspec(dllexport) int winampGetExtendedFileInfo(const char *fn, c |
| 309 | 320 |
} |
| 310 | 321 |
else |
| 311 | 322 |
{
|
| 312 |
- XSFFile file = XSFFile(fn); |
|
| 313 |
- std::string tagToGet = data; |
|
| 314 |
- if (eqstr(data, "album")) |
|
| 315 |
- tagToGet = "game"; |
|
| 316 |
- if (!file.GetTagExists(tagToGet)) |
|
| 323 |
+ try |
|
| 317 | 324 |
{
|
| 318 |
- if (eqstr(tagToGet, "replaygain_track_gain")) |
|
| 325 |
+ XSFFile file = XSFFile(fn); |
|
| 326 |
+ std::string tagToGet = data; |
|
| 327 |
+ if (eqstr(data, "album")) |
|
| 328 |
+ tagToGet = "game"; |
|
| 329 |
+ if (!file.GetTagExists(tagToGet)) |
|
| 330 |
+ {
|
|
| 331 |
+ if (eqstr(tagToGet, "replaygain_track_gain")) |
|
| 332 |
+ return 1; |
|
| 333 |
+ return 0; |
|
| 334 |
+ } |
|
| 335 |
+ else if (eqstr(tagToGet, "length")) |
|
| 336 |
+ {
|
|
| 337 |
+ strcpy(dest, stringify(file.GetLengthMS(xSFConfig->GetDefaultLength()) + file.GetFadeMS(xSFConfig->GetDefaultFade())).c_str()); |
|
| 319 | 338 |
return 1; |
| 320 |
- return 0; |
|
| 339 |
+ } |
|
| 340 |
+ file.GetTagValue(tagToGet).Substring(0, destlen - 1).CopyToString(dest, true); |
|
| 341 |
+ return 1; |
|
| 321 | 342 |
} |
| 322 |
- else if (eqstr(tagToGet, "length")) |
|
| 343 |
+ catch (const std::exception &) |
|
| 323 | 344 |
{
|
| 324 |
- strcpy(dest, stringify(file.GetLengthMS(xSFConfig->GetDefaultLength()) + file.GetFadeMS(xSFConfig->GetDefaultFade())).c_str()); |
|
| 325 |
- return 1; |
|
| 345 |
+ return 0; |
|
| 326 | 346 |
} |
| 327 |
- file.GetTagValue(tagToGet).Substring(0, destlen - 1).CopyToString(dest, true); |
|
| 328 |
- return 1; |
|
| 329 | 347 |
} |
| 330 | 348 |
} |
| 331 | 349 |
|
| ... | ... |
@@ -343,23 +361,30 @@ extern "C" __declspec(dllexport) int winampGetExtendedFileInfoW(const wchar_t *f |
| 343 | 361 |
} |
| 344 | 362 |
else |
| 345 | 363 |
{
|
| 346 |
- XSFFile file = XSFFile(fn); |
|
| 347 |
- std::string tagToGet = data; |
|
| 348 |
- if (eqstr(data, "album")) |
|
| 349 |
- tagToGet = "game"; |
|
| 350 |
- if (!file.GetTagExists(tagToGet)) |
|
| 364 |
+ try |
|
| 351 | 365 |
{
|
| 352 |
- if (eqstr(tagToGet, "replaygain_track_gain")) |
|
| 366 |
+ XSFFile file = XSFFile(fn); |
|
| 367 |
+ std::string tagToGet = data; |
|
| 368 |
+ if (eqstr(data, "album")) |
|
| 369 |
+ tagToGet = "game"; |
|
| 370 |
+ if (!file.GetTagExists(tagToGet)) |
|
| 371 |
+ {
|
|
| 372 |
+ if (eqstr(tagToGet, "replaygain_track_gain")) |
|
| 373 |
+ return 1; |
|
| 374 |
+ return 0; |
|
| 375 |
+ } |
|
| 376 |
+ else if (eqstr(tagToGet, "length")) |
|
| 377 |
+ {
|
|
| 378 |
+ wcscpy(dest, wstringify(file.GetLengthMS(xSFConfig->GetDefaultLength()) + file.GetFadeMS(xSFConfig->GetDefaultFade())).c_str()); |
|
| 353 | 379 |
return 1; |
| 354 |
- return 0; |
|
| 380 |
+ } |
|
| 381 |
+ file.GetTagValue(tagToGet).Substring(0, destlen - 1).CopyToString(dest); |
|
| 382 |
+ return 1; |
|
| 355 | 383 |
} |
| 356 |
- else if (eqstr(tagToGet, "length")) |
|
| 384 |
+ catch (const std::exception &) |
|
| 357 | 385 |
{
|
| 358 |
- wcscpy(dest, wstringify(file.GetLengthMS(xSFConfig->GetDefaultLength()) + file.GetFadeMS(xSFConfig->GetDefaultFade())).c_str()); |
|
| 359 |
- return 1; |
|
| 386 |
+ return 0; |
|
| 360 | 387 |
} |
| 361 |
- file.GetTagValue(tagToGet).Substring(0, destlen - 1).CopyToString(dest); |
|
| 362 |
- return 1; |
|
| 363 | 388 |
} |
| 364 | 389 |
} |
| 365 | 390 |
|
| ... | ... |
@@ -373,16 +398,30 @@ int wrapperWinampSetExtendedFileInfo(const char *data, const wchar_t *val) |
| 373 | 398 |
|
| 374 | 399 |
extern "C" __declspec(dllexport) int winampSetExtendedFileInfo(const char *fn, const char *data, const wchar_t *val) |
| 375 | 400 |
{
|
| 376 |
- if (!extendedXSFFile.get() || extendedXSFFile->GetFilename().GetStr() != fn) |
|
| 377 |
- extendedXSFFile.reset(new XSFFile(fn)); |
|
| 378 |
- return wrapperWinampSetExtendedFileInfo(data, val); |
|
| 401 |
+ try |
|
| 402 |
+ {
|
|
| 403 |
+ if (!extendedXSFFile.get() || extendedXSFFile->GetFilename().GetStr() != fn) |
|
| 404 |
+ extendedXSFFile.reset(new XSFFile(fn)); |
|
| 405 |
+ return wrapperWinampSetExtendedFileInfo(data, val); |
|
| 406 |
+ } |
|
| 407 |
+ catch (const std::exception &) |
|
| 408 |
+ {
|
|
| 409 |
+ return 0; |
|
| 410 |
+ } |
|
| 379 | 411 |
} |
| 380 | 412 |
|
| 381 | 413 |
extern "C" __declspec(dllexport) int winampSetExtendedFileInfoW(const wchar_t *fn, const char *data, const wchar_t *val) |
| 382 | 414 |
{
|
| 383 |
- if (!extendedXSFFile.get() || extendedXSFFile->GetFilename().GetWStr() != fn) |
|
| 384 |
- extendedXSFFile.reset(new XSFFile(fn)); |
|
| 385 |
- return wrapperWinampSetExtendedFileInfo(data, val); |
|
| 415 |
+ try |
|
| 416 |
+ {
|
|
| 417 |
+ if (!extendedXSFFile.get() || extendedXSFFile->GetFilename().GetWStr() != fn) |
|
| 418 |
+ extendedXSFFile.reset(new XSFFile(fn)); |
|
| 419 |
+ return wrapperWinampSetExtendedFileInfo(data, val); |
|
| 420 |
+ } |
|
| 421 |
+ catch (const std::exception &) |
|
| 422 |
+ {
|
|
| 423 |
+ return 0; |
|
| 424 |
+ } |
|
| 386 | 425 |
} |
| 387 | 426 |
|
| 388 | 427 |
extern "C" __declspec(dllexport) int winampWriteExtendedFileInfo() |
| ... | ... |
@@ -418,14 +457,28 @@ intptr_t wrapperWinampGetExtendedRead_open(std::unique_ptr<XSFPlayer> tmpxSFPlay |
| 418 | 457 |
|
| 419 | 458 |
extern "C" __declspec(dllexport) intptr_t winampGetExtendedRead_open(const char *fn, int *size, int *bps, int *nch, int *srate) |
| 420 | 459 |
{
|
| 421 |
- auto tmpxSFPlayer = std::unique_ptr<XSFPlayer>(XSFPlayer::Create(fn)); |
|
| 422 |
- return wrapperWinampGetExtendedRead_open(std::move(tmpxSFPlayer), size, bps, nch, srate); |
|
| 460 |
+ try |
|
| 461 |
+ {
|
|
| 462 |
+ auto tmpxSFPlayer = std::unique_ptr<XSFPlayer>(XSFPlayer::Create(fn)); |
|
| 463 |
+ return wrapperWinampGetExtendedRead_open(std::move(tmpxSFPlayer), size, bps, nch, srate); |
|
| 464 |
+ } |
|
| 465 |
+ catch (const std::exception &) |
|
| 466 |
+ {
|
|
| 467 |
+ return 0; |
|
| 468 |
+ } |
|
| 423 | 469 |
} |
| 424 | 470 |
|
| 425 | 471 |
extern "C" __declspec(dllexport) intptr_t winampGetExtendedRead_openW(const wchar_t *fn, int *size, int *bps, int *nch, int *srate) |
| 426 | 472 |
{
|
| 427 |
- auto tmpxSFPlayer = std::unique_ptr<XSFPlayer>(XSFPlayer::Create(fn)); |
|
| 428 |
- return wrapperWinampGetExtendedRead_open(std::move(tmpxSFPlayer), size, bps, nch, srate); |
|
| 473 |
+ try |
|
| 474 |
+ {
|
|
| 475 |
+ auto tmpxSFPlayer = std::unique_ptr<XSFPlayer>(XSFPlayer::Create(fn)); |
|
| 476 |
+ return wrapperWinampGetExtendedRead_open(std::move(tmpxSFPlayer), size, bps, nch, srate); |
|
| 477 |
+ } |
|
| 478 |
+ catch (const std::exception &) |
|
| 479 |
+ {
|
|
| 480 |
+ return 0; |
|
| 481 |
+ } |
|
| 429 | 482 |
} |
| 430 | 483 |
|
| 431 | 484 |
int extendedSeekNeeded = -1; |