Merge branch 'irixxxx'
authornotaz <notasas@gmail.com>
Sat, 10 Sep 2022 13:57:39 +0000 (16:57 +0300)
committernotaz <notasas@gmail.com>
Sat, 10 Sep 2022 13:57:39 +0000 (16:57 +0300)
linux/plat.c
linux/sndout_alsa.c
menu.c
plat_sdl.c
posix.h
readpng.c
sndout_sdl.c

index 45ae371..9109a32 100644 (file)
@@ -192,6 +192,10 @@ void *plat_mmap(unsigned long addr, size_t size, int need_exec, int is_fixed)
        */
        if (size >= HUGETLB_THRESHOLD)
                flags |= MAP_HUGETLB;
+#ifdef MAP_JIT
+       if (need_exec)
+               flags |= MAP_JIT;
+#endif
 
        ret = mmap(req, size, prot, flags, -1, 0);
        if (ret == MAP_FAILED && (flags & MAP_HUGETLB)) {
@@ -223,8 +227,11 @@ void *plat_mremap(void *ptr, size_t oldsize, size_t newsize)
 {
        void *ret;
 
+#ifdef MREMAP_MAYMOVE
        ret = mremap(ptr, oldsize, newsize, MREMAP_MAYMOVE);
-       if (ret == MAP_FAILED) {
+       if (ret == MAP_FAILED)
+#endif
+       {
                fprintf(stderr, "mremap %p %zd %zd: ",
                        ptr, oldsize, newsize);
                perror(NULL);
index f1d9ca3..9297967 100644 (file)
@@ -51,7 +51,7 @@ int sndout_alsa_start(int rate_, int stereo)
 
        ret  = snd_pcm_hw_params_any(handle, hwparams);
        ret |= snd_pcm_hw_params_set_access(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
-       ret |= snd_pcm_hw_params_set_format(handle, hwparams, SND_PCM_FORMAT_S16_LE);
+       ret |= snd_pcm_hw_params_set_format(handle, hwparams, SND_PCM_FORMAT_S16);
        ret |= snd_pcm_hw_params_set_channels(handle, hwparams, stereo ? 2 : 1);
        ret |= snd_pcm_hw_params_set_rate_near(handle, hwparams, &rate, 0);
        ret |= snd_pcm_hw_params_set_buffer_size_near(handle, hwparams, &buffer_size);
diff --git a/menu.c b/menu.c
index e91f84a..50138f3 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -207,10 +207,10 @@ static void smalltext_out16(int x, int y, const char *texto, int color)
 \r
        if (maxw < 0)\r
                return;\r
-\r
-       strncpy(buffer, texto, sizeof(buffer));\r
        if (maxw > sizeof(buffer) - 1)\r
                maxw = sizeof(buffer) - 1;\r
+\r
+       strncpy(buffer, texto, maxw);\r
        buffer[maxw] = 0;\r
 \r
        smalltext_out16_(x, y, buffer, color);\r
@@ -494,24 +494,12 @@ static int me_count(const menu_entry *ent)
 \r
 static unsigned int me_read_onoff(const menu_entry *ent)\r
 {\r
-       // guess var size based on mask to avoid reading too much\r
-       if (ent->mask & 0xffff0000)\r
-               return *(unsigned int *)ent->var & ent->mask;\r
-       else if (ent->mask & 0xff00)\r
-               return *(unsigned short *)ent->var & ent->mask;\r
-       else\r
-               return *(unsigned char *)ent->var & ent->mask;\r
+       return *(unsigned int *)ent->var & ent->mask;\r
 }\r
 \r
 static void me_toggle_onoff(menu_entry *ent)\r
 {\r
-       // guess var size based on mask to avoid reading too much\r
-       if (ent->mask & 0xffff0000)\r
-               *(unsigned int *)ent->var ^= ent->mask;\r
-       else if (ent->mask & 0xff00)\r
-               *(unsigned short *)ent->var ^= ent->mask;\r
-       else\r
-               *(unsigned char *)ent->var ^= ent->mask;\r
+       *(unsigned int *)ent->var ^= ent->mask;\r
 }\r
 \r
 static void me_draw(const menu_entry *entries, int sel, void (*draw_more)(void))\r
@@ -613,7 +601,7 @@ static void me_draw(const menu_entry *entries, int sel, void (*draw_more)(void))
                                name = ent->generate_name(ent->id, &offs);\r
                }\r
                if (name != NULL) {\r
-                       text_out16(x, y, name);\r
+                       text_out16(x, y, "%s", name);\r
                        leftname_end = x + (strlen(name) + 1) * me_mfont_w;\r
                }\r
 \r
@@ -621,7 +609,7 @@ static void me_draw(const menu_entry *entries, int sel, void (*draw_more)(void))
                case MB_NONE:\r
                        break;\r
                case MB_OPT_ONOFF:\r
-                       text_out16(x + col2_offs, y, me_read_onoff(ent) ? "ON" : "OFF");\r
+                       text_out16(x + col2_offs, y, "%s", me_read_onoff(ent) ? "ON" : "OFF");\r
                        break;\r
                case MB_OPT_RANGE:\r
                        text_out16(x + col2_offs, y, "%i", *(int *)ent->var);\r
@@ -642,10 +630,10 @@ static void me_draw(const menu_entry *entries, int sel, void (*draw_more)(void))
                                offs = x + col2_offs;\r
                                len = strlen(names[i]);\r
                                if (len > 10)\r
-                                       offs += (10 - len - 2) * me_mfont_w;\r
+                                       offs += (10 - len) * me_mfont_w;\r
                                if (offs < leftname_end)\r
                                        offs = leftname_end;\r
-                               if (i == *(unsigned char *)ent->var) {\r
+                               if (i == *(int *)ent->var) {\r
                                        text_out16(offs, y, "%s", names[i]);\r
                                        break;\r
                                }\r
@@ -662,7 +650,7 @@ static void me_draw(const menu_entry *entries, int sel, void (*draw_more)(void))
        h = (g_menuscreen_h - h) / 2; // bottom area height\r
        if (menu_error_msg[0] != 0) {\r
                if (h >= me_mfont_h + 4)\r
-                       text_out16(5, g_menuscreen_h - me_mfont_h - 4, menu_error_msg);\r
+                       text_out16(5, g_menuscreen_h - me_mfont_h - 4, "%s", menu_error_msg);\r
                else\r
                        lprintf("menu msg doesn't fit!\n");\r
 \r
@@ -710,11 +698,11 @@ static int me_process(menu_entry *entry, int is_next, int is_lr)
                        names = (const char **)entry->data;\r
                        for (c = 0; names[c] != NULL; c++)\r
                                ;\r
-                       *(signed char *)entry->var += is_next ? 1 : -1;\r
-                       if (*(signed char *)entry->var < 0)\r
-                               *(signed char *)entry->var = 0;\r
-                       if (*(signed char *)entry->var >= c)\r
-                               *(signed char *)entry->var = c - 1;\r
+                       *(int *)entry->var += is_next ? 1 : -1;\r
+                       if (*(int *)entry->var < 0)\r
+                               *(int *)entry->var = 0;\r
+                       if (*(int *)entry->var >= c)\r
+                               *(int *)entry->var = c - 1;\r
                        return 1;\r
                default:\r
                        return 0;\r
@@ -825,7 +813,7 @@ static void draw_menu_message(const char *msg, void (*draw_more)(void))
        menu_draw_begin(1, 0);\r
 \r
        for (p = msg; *p != 0 && y <= g_menuscreen_h - me_mfont_h; y += me_mfont_h) {\r
-               text_out16(x, y, p);\r
+               text_out16(x, y, "%s", p);\r
 \r
                for (; *p != 0 && *p != '\n'; p++)\r
                        ;\r
@@ -867,7 +855,7 @@ static void do_delete(const char *fpath, const char *fname)
        snprintf(tmp + len, sizeof(tmp) - len, "%s - cancel)", nm);\r
        len = strlen(tmp);\r
 \r
-       text_out16(mid - me_mfont_w * len / 2, 12 * me_mfont_h, tmp);\r
+       text_out16(mid - me_mfont_w * len / 2, 12 * me_mfont_h, "%s", tmp);\r
        menu_draw_end();\r
 \r
        while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MA2));\r
@@ -1437,13 +1425,13 @@ static void draw_key_config(const me_bind_action *opts, int opt_cnt, int player_
                snprintf(buff2, sizeof(buff2), "%s", in_get_key_name(-1, -PBTN_MOK));\r
                snprintf(buff, sizeof(buff), "%s - bind, %s - clear", buff2,\r
                                in_get_key_name(-1, -PBTN_MA2));\r
-               text_out16(x, g_menuscreen_h - 4 * me_mfont_h, buff);\r
+               text_out16(x, g_menuscreen_h - 4 * me_mfont_h, "%s", buff);\r
        }\r
        else\r
                text_out16(x, g_menuscreen_h - 4 * me_mfont_h, "Press a button to bind/unbind");\r
 \r
        if (dev_count > 1) {\r
-               text_out16(x, g_menuscreen_h - 3 * me_mfont_h, dev_name);\r
+               text_out16(x, g_menuscreen_h - 3 * me_mfont_h, "%s", dev_name);\r
                text_out16(x, g_menuscreen_h - 2 * me_mfont_h, "Press left/right for other devs");\r
        }\r
 \r
index 97e2d29..530a9d7 100644 (file)
@@ -125,7 +125,9 @@ int plat_sdl_change_video_mode(int w, int h, int force)
   if (plat_target.vout_method == 0) {
     SDL_PumpEvents();
 
-#if defined(SDL_TRIPLEBUF) && defined(SDL_BUFFER_3X)
+#if defined SDL_SURFACE_SW
+    plat_sdl_screen = SDL_SetVideoMode(w, h, 16, SDL_SWSURFACE);
+#elif defined(SDL_TRIPLEBUF) && defined(SDL_BUFFER_3X)
     plat_sdl_screen = SDL_SetVideoMode(w, h, 16, SDL_HWSURFACE | SDL_TRIPLEBUF);
 #else
     plat_sdl_screen = SDL_SetVideoMode(w, h, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
diff --git a/posix.h b/posix.h
index ca30edb..257c27f 100644 (file)
--- a/posix.h
+++ b/posix.h
@@ -2,7 +2,7 @@
 #define LIBPICOFE_POSIX_H
 
 /* define POSIX stuff: dirent, scandir, getcwd, mkdir */
-#if defined(__linux__) || defined(__MINGW32__)
+#if defined(__MACH__) || defined(__linux__) || defined(__MINGW32__)
 
 #include <dirent.h>
 #include <unistd.h>
index 83936ae..ac24dd4 100644 (file)
--- a/readpng.c
+++ b/readpng.c
@@ -80,12 +80,14 @@ int readpng(void *dest, const char *fname, readpng_what what, int req_w, int req
                        if (width > req_w) {
                                x_ofs = (width - req_w) / 2;
                                width = req_w;
-                       }
+                       } else
+                               dst += (req_w - width) / 2;
                        height = png_get_image_height(png_ptr, info_ptr);
                        if (height > req_h) {
                                y_ofs = (height - req_h) / 2;
                                height = req_h;
-                       }
+                       } else
+                               dst += (req_h - height) / 2 * req_w;
 
                        for (h = 0; h < height; h++)
                        {
index a7be5ed..c0c57ab 100644 (file)
@@ -62,7 +62,7 @@ int sndout_sdl_init(void)
 
 int sndout_sdl_start(int rate, int stereo)
 {
-       SDL_AudioSpec desired;
+       SDL_AudioSpec desired = { 0 };
        int samples, shift;
        int ret;
 
@@ -70,7 +70,7 @@ int sndout_sdl_start(int rate, int stereo)
                sndout_sdl_stop();
 
        desired.freq = rate;
-       desired.format = AUDIO_S16LSB;
+       desired.format = AUDIO_S16SYS;
        desired.channels = stereo ? 2 : 1;
        desired.callback = callback;
        desired.userdata = NULL;