diff options
-rw-r--r-- | apps/bookmark.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/apps/bookmark.c b/apps/bookmark.c index d3e7cf3db8..77aaa4377e 100644 --- a/apps/bookmark.c +++ b/apps/bookmark.c | |||
@@ -43,7 +43,7 @@ | |||
43 | #include "file.h" | 43 | #include "file.h" |
44 | #include "pathfuncs.h" | 44 | #include "pathfuncs.h" |
45 | 45 | ||
46 | /* #define LOGF_ENABLE */ | 46 | /*#define LOGF_ENABLE*/ |
47 | #include "logf.h" | 47 | #include "logf.h" |
48 | 48 | ||
49 | #define MAX_BOOKMARKS 10 | 49 | #define MAX_BOOKMARKS 10 |
@@ -351,11 +351,16 @@ static bool generate_bookmark_file_name(char *filenamebuf, | |||
351 | strmemccpy(filenamebuf, "/root_dir.bmark", filenamebufsz); | 351 | strmemccpy(filenamebuf, "/root_dir.bmark", filenamebufsz); |
352 | else | 352 | else |
353 | { | 353 | { |
354 | filenamebufsz--; /* strlcpy considers the NULL so bmarknamelen is one off */ | 354 | size_t buflen, len; |
355 | size_t len = strlcpy(filenamebuf, bmarknamein, | 355 | /* strmemccpy considers the NULL so bmarknamelen is one off */ |
356 | MIN(filenamebufsz, bmarknamelen) + 1); | 356 | buflen = MIN(filenamebufsz -1 , bmarknamelen); |
357 | if(len >= filenamebufsz) | 357 | if (buflen >= filenamebufsz) |
358 | return false; | 358 | return false; |
359 | |||
360 | strmemccpy(filenamebuf, bmarknamein, buflen + 1); | ||
361 | |||
362 | len = strlen(filenamebuf); | ||
363 | |||
359 | #ifdef HAVE_MULTIVOLUME | 364 | #ifdef HAVE_MULTIVOLUME |
360 | /* The "root" of an extra volume need special handling too. */ | 365 | /* The "root" of an extra volume need special handling too. */ |
361 | const char *filename; | 366 | const char *filename; |
@@ -404,7 +409,7 @@ static char* create_bookmark(char **name, size_t *namelen) | |||
404 | if(!resume_info.id3) | 409 | if(!resume_info.id3) |
405 | return NULL; | 410 | return NULL; |
406 | 411 | ||
407 | size_t bmsz = snprintf(buf, bufsz, | 412 | size_t bmarksz= snprintf(buf, bufsz, |
408 | /* new optional bookmark token descriptors should | 413 | /* new optional bookmark token descriptors should |
409 | be inserted just after ';"' in this line... */ | 414 | be inserted just after ';"' in this line... */ |
410 | #if defined(HAVE_PITCHCONTROL) | 415 | #if defined(HAVE_PITCHCONTROL) |
@@ -431,20 +436,20 @@ static char* create_bookmark(char **name, size_t *namelen) | |||
431 | #endif | 436 | #endif |
432 | ); /*sprintf*/ | 437 | ); /*sprintf*/ |
433 | /* mandatory tokens */ | 438 | /* mandatory tokens */ |
434 | if (bmsz >= bufsz) /* include NULL*/ | 439 | if (bmarksz >= bufsz) /* include NULL*/ |
435 | return NULL; | 440 | return NULL; |
436 | buf += bmsz; | 441 | buf += bmarksz; |
437 | bufsz -= bmsz; | 442 | bufsz -= bmarksz; |
438 | 443 | ||
439 | /* create the bookmark */ | 444 | /* create the bookmark */ |
440 | playlist_get_name(NULL, buf, bmsz); | 445 | playlist_get_name(NULL, buf, bufsz); |
441 | bmsz = strlen(buf); | 446 | bmarksz = strlen(buf); |
442 | 447 | ||
443 | if (bmsz == 0 || (bmsz + 1) >= bufsz) /* include the separator & NULL*/ | 448 | if (bmarksz == 0 || (bmarksz + 1) >= bufsz) /* include the separator & NULL*/ |
444 | return NULL; | 449 | return NULL; |
445 | 450 | ||
446 | *name = buf; /* return the playlist name through the *pointer */ | 451 | *name = buf; /* return the playlist name through the *pointer */ |
447 | *namelen = bmsz; /* return the name length through the pointer */ | 452 | *namelen = bmarksz; /* return the name length through the pointer */ |
448 | 453 | ||
449 | /* Get the currently playing file minus the path */ | 454 | /* Get the currently playing file minus the path */ |
450 | /* This is used when displaying the available bookmarks */ | 455 | /* This is used when displaying the available bookmarks */ |
@@ -452,12 +457,12 @@ static char* create_bookmark(char **name, size_t *namelen) | |||
452 | if(NULL == file) | 457 | if(NULL == file) |
453 | return NULL; | 458 | return NULL; |
454 | 459 | ||
455 | if (buf[bmsz - 1] != '/') | 460 | if (buf[bmarksz - 1] != '/') |
456 | file = resume_info.id3->path; | 461 | file = resume_info.id3->path; |
457 | else file++; | 462 | else file++; |
458 | 463 | ||
459 | buf += bmsz; | 464 | buf += bmarksz; |
460 | bufsz -= (bmsz + 1); | 465 | bufsz -= (bmarksz + 1); |
461 | buf[0] = ';'; | 466 | buf[0] = ';'; |
462 | buf[1] = '\0'; | 467 | buf[1] = '\0'; |
463 | 468 | ||