#endif
int plat_get_root_dir(char *dst, int len)
{
-#if defined(__GP2X__) || defined(PANDORA)
- return plat_get_data_dir(dst, len);
-#else
- char *home = getenv("HOME");
- size_t nb = strlen(home);
+#if !defined(__GP2X__) && !defined(PANDORA)
+ const char *home = getenv("HOME");
+ int ret;
- memcpy(dst, home, nb);
- memcpy(dst + nb, PICO_HOME_DIR, sizeof PICO_HOME_DIR);
- mkdir(dst, 0755);
- return nb + sizeof(PICO_HOME_DIR) - 1;
+ if (home != NULL) {
+ ret = snprintf(dst, len, "%s%s", home, PICO_HOME_DIR);
+ if (ret >= len)
+ ret = len - 1;
+ mkdir(dst, 0755);
+ return ret;
+ }
#endif
+ return plat_get_data_dir(dst, len);
}
#ifdef __GP2X__
req = (void *)addr;
if (need_exec)
prot |= PROT_EXEC;
+ /* avoid MAP_FIXED, it overrides existing mappings..
if (is_fixed)
flags |= MAP_FIXED;
+ */
if (size >= HUGETLB_THRESHOLD)
flags |= MAP_HUGETLB;
if (ret == MAP_FAILED)
return NULL;
- if (req != NULL && ret != req)
- fprintf(stderr,
- "warning: mmaped to %p, requested %p\n", ret, req);
+ if (req != NULL && ret != req) {
+ fprintf(stderr, "%s: mmaped to %p, requested %p\n",
+ is_fixed ? "error" : "warning", ret, req);
+ if (is_fixed) {
+ munmap(ret, size);
+ return NULL;
+ }
+ }
return ret;
}