summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-07-05 12:48:17 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-07-05 12:48:17 +0000
commit6b91b7ea57ee2798c2b86853e4e4aa95bbb3ddaa (patch)
treedb32c2e733feab1dff292b34a223c406b587e8f5
parent75447f6d413286e2925f7b44cb53753f34590c02 (diff)
downloadrockbox-6b91b7ea57ee2798c2b86853e4e4aa95bbb3ddaa.zip
rockbox-6b91b7ea57ee2798c2b86853e4e4aa95bbb3ddaa.tar.gz
rockbox-6b91b7ea57ee2798c2b86853e4e4aa95bbb3ddaa.tar.bz2
rockbox-6b91b7ea57ee2798c2b86853e4e4aa95bbb3ddaa.tar.xz
Relative path playlist patch by Mat Pritchard
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1342 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playlist.c39
-rw-r--r--apps/playlist.h2
-rw-r--r--apps/tree.c2
3 files changed, 24 insertions, 19 deletions
diff --git a/apps/playlist.c b/apps/playlist.c
index 4a2a6fd..2d8bbd3 100644
--- a/apps/playlist.c
+++ b/apps/playlist.c
@@ -33,14 +33,15 @@
playlist_info_t playlist;
-char now_playing[256];
+char now_playing[MAX_PATH+1];
-char* playlist_next(int steps)
+char* playlist_next(int steps, char *dirname)
{
int seek;
int max;
int fd;
int i;
+ char buf[MAX_PATH+1];
playlist.index = (playlist.index+steps) % playlist.amount;
seek = playlist.indices[playlist.index];
@@ -48,36 +49,40 @@ char* playlist_next(int steps)
fd = open(playlist.filename, O_RDONLY);
if(-1 != fd) {
lseek(fd, seek, SEEK_SET);
- max = read(fd, now_playing+1, sizeof(now_playing)-1);
+ max = read(fd, buf, sizeof(buf)-1);
close(fd);
/* Zero-terminate the file name */
seek=0;
- while((now_playing[seek] != '\n') &&
- (now_playing[seek] != '\r') &&
+ while((buf[seek] != '\n') &&
+ (buf[seek] != '\r') &&
(seek < max))
seek++;
/* Now work back killing white space */
- while((now_playing[seek-1] == ' ') ||
- (now_playing[seek-1] == '\t'))
+ while((buf[seek-1] == ' ') ||
+ (buf[seek-1] == '\t'))
seek--;
- now_playing[seek]=0;
+ buf[seek]=0;
/* replace backslashes with forward slashes */
for ( i=1; i<seek; i++ )
- if ( now_playing[i] == '\\' )
- now_playing[i] = '/';
+ if ( buf[i] == '\\' )
+ buf[i] = '/';
- if('/' == now_playing[1])
- return &now_playing[1];
+ if('/' == buf[0]) {
+ strcpy(now_playing, &buf[0]);
+ return now_playing;
+ }
else {
/* handle dos style drive letter */
- if ( ':' == now_playing[2] )
- return &now_playing[3];
+ if ( ':' == buf[1] ) {
+ strcpy(now_playing, &buf[2]);
+ return now_playing;
+ }
else {
- now_playing[0]='/';
+ snprintf(now_playing, MAX_PATH+1, "%s/%s", dirname, buf);
return now_playing;
}
}
@@ -116,7 +121,7 @@ void play_list(char *dir, char *file)
lcd_puts(0,0,"Playing... ");
lcd_update();
/* also make the first song get playing */
- mpeg_play(playlist_next(0));
+ mpeg_play(playlist_next(0, dir));
sleep(HZ);
}
@@ -172,7 +177,7 @@ void add_indices_to_playlist( playlist_info_t *playlist )
}
else if(store_index)
{
-
+
/* Store a new entry */
playlist->indices[ playlist->amount ] = i+count;
playlist->amount++;
diff --git a/apps/playlist.h b/apps/playlist.h
index 273a612..f352cb8 100644
--- a/apps/playlist.h
+++ b/apps/playlist.h
@@ -38,7 +38,7 @@ extern playlist_info_t playlist;
extern bool playlist_shuffle;
void play_list(char *dir, char *file);
-char* playlist_next(int steps);
+char* playlist_next(int steps, char *dirname);
void randomise_playlist( playlist_info_t *playlist, unsigned int seed );
void empty_playlist( playlist_info_t *playlist );
void add_indices_to_playlist( playlist_info_t *playlist );
diff --git a/apps/tree.c b/apps/tree.c
index 0d583a7..0e56a2c 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -245,7 +245,7 @@ char* peek_next_track(int steps)
case 2:
/* playlist mode */
- return playlist_next(steps);
+ return playlist_next(steps, currdir);
}
return NULL;