diff --git a/apps/buffering.c b/apps/buffering.c index 9c0ad138f7..1482d6790b 100644 --- a/apps/buffering.c +++ b/apps/buffering.c @@ -1012,7 +1012,11 @@ int bufopen(const char *file, size_t offset, enum data_type type, return h->id; } - +#ifdef APPLICATION + /* loading code from memory is not supported in application builds */ + else if (type == TYPE_CODEC) + return ERR_UNSUPPORTED_TYPE; +#endif /* Other cases: there is a little more work. */ int fd = open(file, O_RDONLY); if (fd < 0) diff --git a/apps/buffering.h b/apps/buffering.h index 6e17b65d8c..c3a9f928d1 100644 --- a/apps/buffering.h +++ b/apps/buffering.h @@ -44,6 +44,7 @@ enum data_type { #define ERR_INVALID_VALUE -3 #define ERR_FILE_ERROR -4 #define ERR_HANDLE_NOT_DONE -5 +#define ERR_UNSUPPORTED_TYPE -6 /* Initialise the buffering subsystem */ diff --git a/apps/playback.c b/apps/playback.c index 9030161f4a..3a7faa3d8d 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1066,7 +1066,7 @@ static bool audio_release_tracks(void) static bool audio_loadcodec(bool start_play) { - int prev_track; + int prev_track, hid; char codec_path[MAX_PATH]; /* Full path to codec */ const struct mp3entry *id3, *prev_id3; @@ -1121,11 +1121,18 @@ static bool audio_loadcodec(bool start_play) codec_get_full_path(codec_path, codec_fn); - tracks[track_widx].codec_hid = bufopen(codec_path, 0, TYPE_CODEC, NULL); - if (tracks[track_widx].codec_hid < 0) + hid = tracks[track_widx].codec_hid = bufopen(codec_path, 0, TYPE_CODEC, NULL); + + /* not an error if codec load it supported, will load it from disk + * application builds don't support it + */ + if (hid < 0 && hid != ERR_UNSUPPORTED_TYPE) return false; - logf("Loaded codec"); + if (hid > 0) + logf("Loaded codec"); + else + logf("Buffering codec unsupported, load later from disk"); return true; } diff --git a/firmware/load_code.c b/firmware/load_code.c index 2337ee5cad..59eb7ac0f7 100644 --- a/firmware/load_code.c +++ b/firmware/load_code.c @@ -134,6 +134,16 @@ void * _lc_open(const _lc_open_char *filename, unsigned char *buf, size_t buf_si void *lc_open_from_mem(void *addr, size_t blob_size) { +#ifndef SIMULATOR + (void)addr; + (void)blob_size; + /* we don't support loading code from memory on application builds, + * it doesn't make sense (since it means writing the blob to disk again and + * then falling back to load from disk) and requires the ability to write + * to an executable directory */ + return NULL; +#else + /* support it in the sim for the sake of simulating */ int fd, i; char temp_filename[MAX_PATH]; @@ -143,17 +153,8 @@ void *lc_open_from_mem(void *addr, size_t blob_size) to find an unused filename */ for (i = 0; i < 10; i++) { -#if (CONFIG_PLATFORM & PLATFORM_ANDROID) - /* we need that path fixed, since _get_user_file_path() - * gives us the folder on the sdcard where we cannot load libraries - * from (no exec permissions) - */ - snprintf(temp_filename, sizeof(temp_filename), - "/data/data/org.rockbox/app_rockbox/libtemp_binary_%d.so", i); -#else snprintf(temp_filename, sizeof(temp_filename), ROCKBOX_DIR "/libtemp_binary_%d.dll", i); -#endif fd = open(temp_filename, O_WRONLY|O_CREAT|O_TRUNC, 0700); if (fd >= 0) break; /* Created a file ok */ @@ -175,6 +176,7 @@ void *lc_open_from_mem(void *addr, size_t blob_size) close(fd); return lc_open(temp_filename, NULL, 0); +#endif }