Cut down on gotos

This commit is contained in:
libretroadmin 2025-07-22 14:16:31 +02:00
parent 341f6d3df4
commit 327621938b
20 changed files with 342 additions and 402 deletions

View File

@ -2237,8 +2237,7 @@ bool video_shader_load_preset_into_shader(const char *path,
if (!root_conf)
{
RARCH_WARN("[Shaders] Could not read root preset: \"%s\".\n", path);
ret = false;
goto end;
return false;
}
/* Check if the root preset is a valid shader chain
@ -2345,7 +2344,6 @@ bool video_shader_load_preset_into_shader(const char *path,
#endif
end:
path_linked_list_free(override_paths_list);
config_file_free(conf);
config_file_free(root_conf);
@ -2842,7 +2840,7 @@ static bool video_shader_load_shader_preset_internal(
*
* Returns: false if there was an error or no action was performed.
*/
static bool video_shader_load_auto_shader_preset(
static size_t video_shader_load_auto_shader_preset(
const char *video_shader_directory,
const char *menu_config_directory,
const char *core_name,
@ -2897,7 +2895,7 @@ static bool video_shader_load_auto_shader_preset(
sizeof(shader_path),
dirs[i], core_name,
game_name))
goto success;
return strlcpy(s, shader_path, len);
/* Folder-specific shader preset found? */
if (video_shader_load_shader_preset_internal(
@ -2905,7 +2903,7 @@ static bool video_shader_load_auto_shader_preset(
sizeof(shader_path),
dirs[i], core_name,
content_dir_name))
goto success;
return strlcpy(s, shader_path, len);
}
/* Core-specific shader preset found? */
@ -2914,7 +2912,7 @@ static bool video_shader_load_auto_shader_preset(
sizeof(shader_path),
dirs[i], core_name,
core_name))
goto success;
return strlcpy(s, shader_path, len);
/* Global shader preset found? */
if (video_shader_load_shader_preset_internal(
@ -2922,14 +2920,10 @@ static bool video_shader_load_auto_shader_preset(
sizeof(shader_path),
dirs[i], NULL,
"global"))
goto success;
return strlcpy(s, shader_path, len);
}
return false;
success:
/* Shader preset exists, load it. */
strlcpy(s, shader_path, len);
return true;
return 0;
}
bool video_shader_combine_preset_and_apply(

View File

@ -1139,7 +1139,10 @@ static void thread_set_texture_frame(void *data, const void *frame,
void *tmp_frame = realloc(thr->texture.frame, required);
if (!tmp_frame)
goto end;
{
slock_unlock(thr->frame.lock);
return;
}
thr->texture.frame = tmp_frame;
thr->texture.frame_cap = required;
@ -1153,7 +1156,6 @@ static void thread_set_texture_frame(void *data, const void *frame,
thr->texture.alpha = alpha;
thr->texture.frame_updated = true;
end:
slock_unlock(thr->frame.lock);
}

View File

@ -1347,24 +1347,21 @@ static bool input_remote_init_network(input_remote_t *handle,
RARCH_LOG("[Network] Bringing up remote interface on port %hu.\n",
(unsigned short)port);
if ((fd = socket_init((void**)&res, port, NULL, SOCKET_TYPE_DATAGRAM, AF_INET)) < 0)
goto error;
handle->net_fd[user] = fd;
if (!socket_nonblock(handle->net_fd[user]))
goto error;
if (!socket_bind(handle->net_fd[user], res))
if ((fd = socket_init((void**)&res, port, NULL, SOCKET_TYPE_DATAGRAM, AF_INET)) >= 0)
{
RARCH_ERR("%s\n", msg_hash_to_str(MSG_FAILED_TO_BIND_SOCKET));
goto error;
handle->net_fd[user] = fd;
if (socket_nonblock(handle->net_fd[user]))
{
if (socket_bind(handle->net_fd[user], res))
{
freeaddrinfo_retro(res);
return true;
}
RARCH_ERR("%s\n", msg_hash_to_str(MSG_FAILED_TO_BIND_SOCKET));
}
}
freeaddrinfo_retro(res);
return true;
error:
if (res)
freeaddrinfo_retro(res);
return false;
@ -3442,11 +3439,14 @@ static void input_overlay_update_pointer_coords(
/* Need multi-touch coordinates for pointer only */
if ( ptr_st->count
&& !(ptr_st->device_mask & (1 << RETRO_DEVICE_POINTER)))
goto finish;
{
ptr_st->count++;
return;
}
/* Need viewport pointers for pointer and lightgun */
if (ptr_st->device_mask &
((1 << RETRO_DEVICE_LIGHTGUN) | (1 << RETRO_DEVICE_POINTER)))
if ( ptr_st->device_mask
& ((1 << RETRO_DEVICE_LIGHTGUN) | (1 << RETRO_DEVICE_POINTER)))
{
ptr_st->ptr[ptr_st->count].x = current_input->input_state(
input_data, NULL, NULL, NULL, NULL, true, 0,
@ -3478,7 +3478,6 @@ static void input_overlay_update_pointer_coords(
RETRO_DEVICE_ID_POINTER_Y);
}
finish:
ptr_st->count++;
}
@ -6375,8 +6374,8 @@ void bsv_movie_read_next_events(bsv_movie_t *handle)
else if (next_frame_type == REPLAY_TOKEN_CHECKPOINT2_FRAME)
{
uint8_t compression, encoding;
if (intfstream_read(handle->file, &(compression), sizeof(uint8_t)) != sizeof(uint8_t) ||
intfstream_read(handle->file, &(encoding), sizeof(uint8_t)) != sizeof(uint8_t))
if ( intfstream_read(handle->file, &(compression), sizeof(uint8_t)) != sizeof(uint8_t)
|| intfstream_read(handle->file, &(encoding), sizeof(uint8_t)) != sizeof(uint8_t))
{
/* Unexpected EOF */
RARCH_ERR("[Replay] Replay checkpoint truncated.\n");
@ -6533,7 +6532,7 @@ bool replay_check_same_timeline(bsv_movie_t *movie, uint8_t *other_movie, int64_
{
int64_t i;
/* no choice but to memcmp the whole stream against the other */
for (i = 0; ret && i < check_limit; i+=check_cap)
for (i = 0; ret && i < check_limit; i += check_cap)
{
int64_t read_end = MIN(check_limit - i, check_cap);
int64_t read1 = intfstream_read(movie->file, buf1, read_end);
@ -6547,7 +6546,7 @@ bool replay_check_same_timeline(bsv_movie_t *movie, uint8_t *other_movie, int64_
}
goto exit;
}
while(intfstream_tell(movie->file) < check_limit && intfstream_tell(check_stream) < check_limit)
while (intfstream_tell(movie->file) < check_limit && intfstream_tell(check_stream) < check_limit)
{
if (intfstream_tell(movie->file) < 0 || intfstream_tell(check_stream) < 0)
{
@ -6555,25 +6554,28 @@ bool replay_check_same_timeline(bsv_movie_t *movie, uint8_t *other_movie, int64_
ret = false;
goto exit;
}
if (intfstream_read(movie->file, &keycount1, 1) < 1 ||
intfstream_read(check_stream, &keycount2, 1) < 1 ||
keycount1 != keycount2)
if ( intfstream_read(movie->file, &keycount1, 1) < 1
|| intfstream_read(check_stream, &keycount2, 1) < 1
|| keycount1 != keycount2)
{
RARCH_ERR("[Replay] Replay checkpoints disagree on key count, %d vs %d\n", keycount1, keycount2);
ret = false;
goto exit;
}
if ((uint64_t)intfstream_read(movie->file, buf1, keycount1*sizeof(bsv_key_data_t)) < keycount1*sizeof(bsv_key_data_t) ||
(uint64_t)intfstream_read(check_stream, buf2, keycount2*sizeof(bsv_key_data_t)) < keycount2*sizeof(bsv_key_data_t) ||
memcmp(buf1, buf2, keycount1*sizeof(bsv_key_data_t)) != 0)
if (
(uint64_t)intfstream_read(movie->file, buf1, keycount1*sizeof(bsv_key_data_t))
< keycount1*sizeof(bsv_key_data_t)
|| (uint64_t)intfstream_read(check_stream, buf2, keycount2*sizeof(bsv_key_data_t))
< keycount2*sizeof(bsv_key_data_t)
|| memcmp(buf1, buf2, keycount1*sizeof(bsv_key_data_t)) != 0)
{
RARCH_ERR("[Replay] Replay checkpoints disagree on key data\n");
ret = false;
goto exit;
}
if (intfstream_read(movie->file, &btncount1, 2) < 2 ||
intfstream_read(check_stream, &btncount2, 2) < 2 ||
btncount1 != btncount2)
if ( intfstream_read(movie->file, &btncount1, 2) < 2
|| intfstream_read(check_stream, &btncount2, 2) < 2
|| btncount1 != btncount2)
{
RARCH_ERR("[Replay] Replay checkpoints disagree on input count\n");
ret = false;
@ -6581,17 +6583,19 @@ bool replay_check_same_timeline(bsv_movie_t *movie, uint8_t *other_movie, int64_
}
btncount1 = swap_if_big16(btncount1);
btncount2 = swap_if_big16(btncount2);
if ((uint64_t)intfstream_read(movie->file, buf1, btncount1*sizeof(bsv_input_data_t)) < btncount1*sizeof(bsv_input_data_t) ||
(uint64_t)intfstream_read(check_stream, buf2, btncount2*sizeof(bsv_input_data_t)) < btncount2*sizeof(bsv_input_data_t) ||
memcmp(buf1, buf2, btncount1*sizeof(bsv_input_data_t)) != 0)
if ( (uint64_t)intfstream_read(movie->file, buf1, btncount1*sizeof(bsv_input_data_t))
< btncount1*sizeof(bsv_input_data_t)
|| (uint64_t)intfstream_read(check_stream, buf2, btncount2*sizeof(bsv_input_data_t))
< btncount2*sizeof(bsv_input_data_t)
|| memcmp(buf1, buf2, btncount1*sizeof(bsv_input_data_t)) != 0)
{
RARCH_ERR("[Replay] Replay checkpoints disagree on input data\n");
ret = false;
goto exit;
}
if (intfstream_read(movie->file, &frametok1, 1) < 1 ||
intfstream_read(check_stream, &frametok2, 1) < 1 ||
frametok1 != frametok2)
if ( intfstream_read(movie->file, &frametok1, 1) < 1
|| intfstream_read(check_stream, &frametok2, 1) < 1
|| frametok1 != frametok2)
{
RARCH_ERR("[Replay] Replay checkpoints disagree on frame token\n");
ret = false;
@ -6606,9 +6610,9 @@ bool replay_check_same_timeline(bsv_movie_t *movie, uint8_t *other_movie, int64_
case REPLAY_TOKEN_REGULAR_FRAME:
break;
case REPLAY_TOKEN_CHECKPOINT_FRAME:
if ((uint64_t)intfstream_read(movie->file, &size1, sizeof(uint64_t)) < sizeof(uint64_t) ||
(uint64_t)intfstream_read(check_stream, &size2, sizeof(uint64_t)) < sizeof(uint64_t) ||
size1 != size2)
if ( (uint64_t)intfstream_read(movie->file, &size1, sizeof(uint64_t)) < sizeof(uint64_t)
|| (uint64_t)intfstream_read(check_stream, &size2, sizeof(uint64_t)) < sizeof(uint64_t)
|| size1 != size2)
{
RARCH_ERR("[Replay] Replay checkpoints disagree on size or scheme\n");
ret = false;

View File

@ -338,7 +338,6 @@ bool file_archive_extract_file(
char *s, size_t len)
{
struct archive_extract_userdata userdata;
bool ret = true;
struct string_list *list = string_split(valid_exts, "|");
userdata.archive_path[0] = '\0';
@ -353,37 +352,22 @@ bool file_archive_extract_file(
userdata.transfer = NULL;
userdata.dec = NULL;
if (!list)
if ( list
&& file_archive_walk(archive_path, valid_exts,
file_archive_extract_cb, &userdata)
&& userdata.found_file
)
{
ret = false;
goto end;
if (!string_is_empty(userdata.first_extracted_file_path))
strlcpy(s, userdata.first_extracted_file_path, len);
return true;
}
if (!file_archive_walk(archive_path, valid_exts,
file_archive_extract_cb, &userdata))
{
/* Parsing file archive failed. */
ret = false;
goto end;
}
if (!userdata.found_file)
{
/* Didn't find any file that matched valid extensions
* for libretro implementation. */
ret = false;
goto end;
}
if (!string_is_empty(userdata.first_extracted_file_path))
strlcpy(s, userdata.first_extracted_file_path, len);
end:
if (userdata.first_extracted_file_path)
free(userdata.first_extracted_file_path);
if (list)
string_list_free(list);
return ret;
return false;
}
/* Warning: 'list' must zero initialised before
@ -533,7 +517,10 @@ static struct string_list *file_archive_filename_split(const char *path)
{
/* add archive path to list first */
if (!string_list_append_n(list, path, (unsigned)(delim - path), attr))
goto error;
{
string_list_free(list);
return NULL;
}
/* now add the path within the archive */
delim++;
@ -541,18 +528,22 @@ static struct string_list *file_archive_filename_split(const char *path)
if (*delim)
{
if (!string_list_append(list, delim, attr))
goto error;
{
string_list_free(list);
return NULL;
}
}
}
else
{
if (!string_list_append(list, path, attr))
goto error;
{
string_list_free(list);
return NULL;
}
}
return list;
error:
string_list_free(list);
return NULL;
}
/* Generic compressed file loader.

View File

@ -99,12 +99,12 @@ static bool zlib_stream_decompress_data_to_file_init(
void *context, file_archive_file_handle_t *handle,
const uint8_t *cdata, unsigned cmode, uint32_t csize, uint32_t size)
{
zip_context_t *zip_context = (zip_context_t *)context;
struct file_archive_transfer *state = zip_context->state;
uint8_t local_header_buf[4];
int64_t offsetData;
uint8_t *local_header;
uint32_t offsetNL, offsetEL;
int64_t offsetData;
uint8_t local_header_buf[4];
zip_context_t *zip_context = (zip_context_t *)context;
struct file_archive_transfer *state = zip_context->state;
/* free previous data and stream if left unfinished */
zip_context_free_stream(zip_context, false);
@ -118,7 +118,10 @@ static bool zlib_stream_decompress_data_to_file_init(
{
filestream_seek(state->archive_file, (int64_t)(size_t)cdata + 26, RETRO_VFS_SEEK_POSITION_START);
if (filestream_read(state->archive_file, local_header_buf, 4) != 4)
goto error;
{
zip_context_free_stream(zip_context, false);
return false;
}
local_header = local_header_buf;
}
@ -156,34 +159,31 @@ static bool zlib_stream_decompress_data_to_file_init(
{
free(zip_context->zstream);
zip_context->zstream = NULL;
goto error;
zip_context_free_stream(zip_context, false);
return false;
}
}
return true;
error:
zip_context_free_stream(zip_context, false);
return false;
}
static int zlib_stream_decompress_data_to_file_iterate(
void *context, file_archive_file_handle_t *handle)
{
int64_t rd;
zip_context_t *zip_context = (zip_context_t *)context;
struct file_archive_transfer *state = zip_context->state;
int64_t rd;
if (zip_context->cmode == ZIP_MODE_STORED)
{
#ifdef HAVE_MMAP
#ifdef HAVE_MMAP
/* Simply copy the data to the output buffer */
if (zip_context->state->archive_mmap_data)
memcpy(zip_context->decompressed_data,
zip_context->state->archive_mmap_data + (size_t)zip_context->fdoffset,
zip_context->usize);
zip_context->state->archive_mmap_data + (size_t)zip_context->fdoffset,
zip_context->usize);
else
#endif
#endif
{
/* Read the entire file to memory */
filestream_seek(state->archive_file, zip_context->fdoffset, RETRO_VFS_SEEK_POSITION_START);
@ -204,7 +204,7 @@ static int zlib_stream_decompress_data_to_file_iterate(
if (!zip_context->zstream)
return 1;
#ifdef HAVE_MMAP
#ifdef HAVE_MMAP
if (state->archive_mmap_data)
{
/* Decompress from the mapped file */
@ -212,7 +212,7 @@ static int zlib_stream_decompress_data_to_file_iterate(
rd = to_read;
}
else
#endif
#endif
{
/* Read some compressed data from file to the temp buffer */
filestream_seek(state->archive_file,

View File

@ -634,20 +634,21 @@ static bool config_file_parse_line(config_file_t *conf,
if (*line != '=')
{
list->value = NULL;
goto error;
list->key = NULL;
free(key);
return false;
}
line++;
if (!(list->value = config_file_extract_value(line)))
goto error;
{
list->key = NULL;
free(key);
return false;
}
return true;
error:
list->key = NULL;
free(key);
return false;
}
static int config_file_from_string_internal(

View File

@ -805,7 +805,11 @@ char *path_resolve_realpath(char *s, size_t len, bool resolve_symlinks)
tmp[t++] = '/';
if (string_is_empty(s))
goto end;
{
tmp[t] = '\0';
strlcpy(s, tmp, len);
return s;
}
p = s;
}
@ -851,10 +855,8 @@ char *path_resolve_realpath(char *s, size_t len, bool resolve_symlinks)
while (p <= next)
tmp[t++] = *p++;
}
}while(next < buf_end);
} while(next < buf_end);
end:
tmp[t] = '\0';
strlcpy(s, tmp, len);
return s;

View File

@ -113,12 +113,15 @@ static void *nbio_stdio_open(const char * filename, unsigned mode)
if (!f)
return NULL;
handle = (struct nbio_stdio_t*)malloc(sizeof(struct nbio_stdio_t));
handle = (struct nbio_stdio_t*)malloc(sizeof(struct nbio_stdio_t));
if (!handle)
goto error;
{
fclose(f);
return NULL;
}
handle->f = f;
handle->f = f;
switch (mode)
{
@ -143,7 +146,11 @@ static void *nbio_stdio_open(const char * filename, unsigned mode)
#endif
if (len && !buf)
goto error;
{
free(handle);
fclose(f);
return NULL;
}
handle->data = buf;
handle->len = len;
@ -151,12 +158,6 @@ static void *nbio_stdio_open(const char * filename, unsigned mode)
handle->op = -2;
return handle;
error:
if (handle)
free(handle);
fclose(f);
return NULL;
}
static void nbio_stdio_begin_read(void *data)

View File

@ -199,21 +199,26 @@ static bool image_texture_load_internal(
unsigned g_shift, unsigned b_shift)
{
int ret;
bool success = false;
void *img = image_transfer_new(type);
if (!img)
goto end;
return false;
image_transfer_set_buffer_ptr(img, type, (uint8_t*)ptr, len);
if (!image_transfer_start(img, type))
goto end;
{
image_transfer_free(img, type);
return false;
}
while (image_transfer_iterate(img, type));
if (!image_transfer_is_valid(img, type))
goto end;
{
image_transfer_free(img, type);
return false;
}
do
{
@ -223,7 +228,10 @@ static bool image_texture_load_internal(
} while (ret == IMAGE_PROCESS_NEXT);
if (ret == IMAGE_PROCESS_ERROR || ret == IMAGE_PROCESS_ERROR_END)
goto end;
{
image_transfer_free(img, type);
return false;
}
image_texture_color_convert(r_shift, g_shift, b_shift,
a_shift, out_img);
@ -232,17 +240,13 @@ static bool image_texture_load_internal(
if (!image_texture_internal_gx_convert_texture32(out_img))
{
image_texture_free(out_img);
goto end;
image_transfer_free(img, type);
return false;
}
#endif
success = true;
end:
if (img)
image_transfer_free(img, type);
return success;
image_transfer_free(img, type);
return true;
}
void image_texture_free(struct texture_image *img)
@ -269,9 +273,7 @@ bool image_texture_load_buffer(struct texture_image *out_img,
if (image_texture_load_internal(
type, buffer, buffer_len, out_img,
a_shift, r_shift, g_shift, b_shift))
{
return true;
}
}
out_img->supports_rgba = false;
@ -285,49 +287,44 @@ bool image_texture_load_buffer(struct texture_image *out_img,
bool image_texture_load(struct texture_image *out_img,
const char *path)
{
unsigned r_shift, g_shift, b_shift, a_shift;
size_t file_len = 0;
struct nbio_t *handle = NULL;
void *ptr = NULL;
enum image_type_enum type = image_texture_get_type(path);
image_texture_set_color_shifts(&r_shift, &g_shift, &b_shift,
&a_shift, out_img);
if (type != IMAGE_TYPE_NONE)
{
handle = (struct nbio_t*)nbio_open(path, NBIO_READ);
if (!handle)
goto error;
nbio_begin_read(handle);
struct nbio_t *handle = (struct nbio_t*)
nbio_open(path, NBIO_READ);
if (handle)
{
void *ptr = NULL;
size_t file_len = 0;
while (!nbio_iterate(handle));
nbio_begin_read(handle);
ptr = nbio_get_ptr(handle, &file_len);
while (!nbio_iterate(handle));
if (!ptr)
goto error;
if ((ptr = nbio_get_ptr(handle, &file_len)))
{
unsigned r_shift, g_shift, b_shift, a_shift;
image_texture_set_color_shifts(&r_shift,
&g_shift, &b_shift, &a_shift, out_img);
if (image_texture_load_internal(
type,
ptr, file_len, out_img,
a_shift, r_shift, g_shift, b_shift))
goto success;
if (image_texture_load_internal(
type,
ptr, file_len, out_img,
a_shift, r_shift, g_shift, b_shift))
{
nbio_free(handle);
return true;
}
}
nbio_free(handle);
}
}
error:
out_img->supports_rgba = false;
out_img->pixels = NULL;
out_img->width = 0;
out_img->height = 0;
if (handle)
nbio_free(handle);
return false;
success:
if (handle)
nbio_free(handle);
return true;
}

View File

@ -155,8 +155,13 @@ static int dir_list_read(const char *dir,
{
struct RDIR *entry = retro_opendir_include_hidden(dir, include_hidden);
if (!entry || retro_dirent_error(entry))
goto error;
if (!entry)
return -1;
if (retro_dirent_error(entry))
{
retro_closedir(entry);
return -1;
}
while (retro_readdir(entry))
{
@ -193,7 +198,10 @@ static int dir_list_read(const char *dir,
{
attr.i = RARCH_PLAIN_FILE;
if (!string_list_append(list, file_path, attr))
goto error;
{
retro_closedir(entry);
return -1;
}
continue;
}
#endif
@ -234,17 +242,15 @@ static int dir_list_read(const char *dir,
}
if (!string_list_append(list, file_path, attr))
goto error;
{
retro_closedir(entry);
return -1;
}
}
retro_closedir(entry);
return 0;
error:
if (entry)
retro_closedir(entry);
return -1;
}
/**

View File

@ -128,28 +128,29 @@ struct hostent *gethostbyname(const char *name)
XNetDnsLookup(name, event, &dns);
if (!dns)
goto done;
{
WSACloseEvent(event);
return NULL;
}
WaitForSingleObject((HANDLE)event, INFINITE);
if (dns->iStatus)
goto done;
if (!dns->iStatus)
{
memcpy(&addr, dns->aina, sizeof(addr));
memcpy(&addr, dns->aina, sizeof(addr));
he.h_name = NULL;
he.h_aliases = NULL;
he.h_addrtype = AF_INET;
he.h_length = sizeof(addr);
he.h_addr_list = &he.h_addr;
he.h_addr = (char*)&addr;
he.h_name = NULL;
he.h_aliases = NULL;
he.h_addrtype = AF_INET;
he.h_length = sizeof(addr);
he.h_addr_list = &he.h_addr;
he.h_addr = (char*)&addr;
ret = &he;
}
ret = &he;
done:
WSACloseEvent(event);
if (dns)
XNetDnsRelease(dns);
XNetDnsRelease(dns);
return ret;
}

View File

@ -373,27 +373,31 @@ struct http_connection_t *net_http_connection_new(const char *url,
conn->contentlength = strlen(data);
}
if (!(conn->url = strdup(url)))
goto error;
if (!strncmp(url, "http://", STRLEN_CONST("http://")))
conn->scan = conn->url + STRLEN_CONST("http://");
else if (!strncmp(url, "https://", STRLEN_CONST("https://")))
if ((conn->url = strdup(url)))
{
conn->scan = conn->url + STRLEN_CONST("https://");
conn->ssl = true;
if (!strncmp(url, "http://", STRLEN_CONST("http://")))
{
conn->scan = conn->url + STRLEN_CONST("http://");
if (!string_is_empty(conn->scan))
{
conn->domain = conn->scan;
return conn;
}
}
else if (!strncmp(url, "https://", STRLEN_CONST("https://")))
{
conn->scan = conn->url + STRLEN_CONST("https://");
conn->ssl = true;
if (!string_is_empty(conn->scan))
{
conn->domain = conn->scan;
return conn;
}
}
}
else
goto error;
if (string_is_empty(conn->scan))
goto error;
conn->domain = conn->scan;
return conn;
error:
if (conn->url)
free(conn->url);
if (conn->method)

View File

@ -364,25 +364,28 @@ scond_t *scond_new(void)
*
* Note: We might could simplify this using vista+ condition variables,
* but we wanted an XP compatible solution. */
if (!(cond->event = CreateEvent(NULL, FALSE, FALSE, NULL)))
goto error;
if (!(cond->event = CreateEvent(NULL, FALSE, FALSE, NULL)))
{
free(cond);
return NULL;
}
if (!(cond->hot_potato = CreateEvent(NULL, FALSE, FALSE, NULL)))
{
CloseHandle(cond->event);
goto error;
free(cond);
return NULL;
}
InitializeCriticalSection(&cond->cs);
#else
if (pthread_cond_init(&cond->cond, NULL) != 0)
goto error;
{
free(cond);
return NULL;
}
#endif
return cond;
error:
free(cond);
return NULL;
}
void scond_free(scond_t *cond)

View File

@ -547,15 +547,13 @@ int filestream_putc(RFILE *stream, int c)
int filestream_vprintf(RFILE *stream, const char* format, va_list args)
{
static char buffer[8 * 1024];
int64_t num_chars = vsnprintf(buffer, sizeof(buffer),
int _len = vsnprintf(buffer, sizeof(buffer),
format, args);
if (num_chars < 0)
if (_len < 0)
return -1;
else if (num_chars == 0)
else if (_len == 0)
return 0;
return (int)filestream_write(stream, buffer, num_chars);
return (int)filestream_write(stream, buffer, _len);
}
int filestream_printf(RFILE *stream, const char* format, ...)

View File

@ -218,12 +218,10 @@ void *intfstream_init(intfstream_info_t *info)
{
intfstream_internal_t *intf = NULL;
if (!info)
goto error;
return NULL;
intf = (intfstream_internal_t*)malloc(sizeof(*intf));
if (!intf)
goto error;
if (!(intf = (intfstream_internal_t*)malloc(sizeof(*intf))))
return NULL;
intf->type = info->type;
intf->file.fp = NULL;
@ -246,25 +244,24 @@ void *intfstream_init(intfstream_info_t *info)
case INTFSTREAM_MEMORY:
intf->memory.writable = info->memory.writable;
if (!intfstream_resize(intf, info))
goto error;
{
free(intf);
return NULL;
}
break;
case INTFSTREAM_CHD:
#ifdef HAVE_CHD
intf->chd.track = info->chd.track;
break;
#else
goto error;
free(intf);
return NULL;
#endif
case INTFSTREAM_RZIP:
break;
}
return intf;
error:
if (intf)
free(intf);
return NULL;
}
int64_t intfstream_seek(
@ -699,17 +696,11 @@ intfstream_t* intfstream_open_file(const char *path,
if (!fd)
return NULL;
if (!intfstream_open(fd, path, mode, hints))
goto error;
if (intfstream_open(fd, path, mode, hints))
return fd;
return fd;
error:
if (fd)
{
intfstream_close(fd);
free(fd);
}
intfstream_close(fd);
free(fd);
return NULL;
}
@ -724,21 +715,14 @@ intfstream_t *intfstream_open_memory(void *data,
info.memory.buf.size = size;
info.memory.writable = false;
fd = (intfstream_t*)intfstream_init(&info);
if (!fd)
if (!(fd = (intfstream_t*)intfstream_init(&info)))
return NULL;
if (!intfstream_open(fd, NULL, mode, hints))
goto error;
if (intfstream_open(fd, NULL, mode, hints))
return fd;
return fd;
error:
if (fd)
{
intfstream_close(fd);
free(fd);
}
intfstream_close(fd);
free(fd);
return NULL;
}
@ -753,21 +737,14 @@ intfstream_t *intfstream_open_writable_memory(void *data,
info.memory.buf.size = size;
info.memory.writable = true;
fd = (intfstream_t*)intfstream_init(&info);
if (!fd)
if (!(fd = (intfstream_t*)intfstream_init(&info)))
return NULL;
if (!intfstream_open(fd, NULL, mode, hints))
goto error;
if (intfstream_open(fd, NULL, mode, hints))
return fd;
return fd;
error:
if (fd)
{
intfstream_close(fd);
free(fd);
}
intfstream_close(fd);
free(fd);
return NULL;
}
@ -780,22 +757,14 @@ intfstream_t *intfstream_open_chd_track(const char *path,
info.type = INTFSTREAM_CHD;
info.chd.track = track;
fd = (intfstream_t*)intfstream_init(&info);
if (!fd)
if (!(fd = (intfstream_t*)intfstream_init(&info)))
return NULL;
if (!intfstream_open(fd, path, mode, hints))
goto error;
if (intfstream_open(fd, path, mode, hints))
return fd;
return fd;
error:
if (fd)
{
intfstream_close(fd);
free(fd);
}
intfstream_close(fd);
free(fd);
return NULL;
}
@ -811,16 +780,10 @@ intfstream_t* intfstream_open_rzip_file(const char *path,
if (!fd)
return NULL;
if (!intfstream_open(fd, path, mode, RETRO_VFS_FILE_ACCESS_HINT_NONE))
goto error;
if (intfstream_open(fd, path, mode, RETRO_VFS_FILE_ACCESS_HINT_NONE))
return fd;
return fd;
error:
if (fd)
{
intfstream_close(fd);
free(fd);
}
intfstream_close(fd);
free(fd);
return NULL;
}

View File

@ -88,7 +88,8 @@ static bool rzipstream_read_file_header(rzipstream_t *stream)
header_bytes[i] = 0;
/* Attempt to read header bytes */
if ((length = filestream_read(stream->file, header_bytes, sizeof(header_bytes))) <= 0)
if ((length = filestream_read(stream->file,
header_bytes, sizeof(header_bytes))) <= 0)
return false;
/* If file length is less than header size
@ -116,21 +117,23 @@ static bool rzipstream_read_file_header(rzipstream_t *stream)
}
/* Get uncompressed chunk size - next 4 bytes */
if ((stream->chunk_size = ((uint32_t)header_bytes[11] << 24) |
((uint32_t)header_bytes[10] << 16) |
((uint32_t)header_bytes[9] << 8) |
(uint32_t)header_bytes[8]) == 0)
if ((stream->chunk_size = (
(uint32_t)header_bytes[11] << 24)
| ((uint32_t)header_bytes[10] << 16)
| ((uint32_t)header_bytes[9] << 8)
| (uint32_t)header_bytes[8]) == 0)
return false;
/* Get total uncompressed data size - next 8 bytes */
if ((stream->size = ((uint64_t)header_bytes[19] << 56) |
((uint64_t)header_bytes[18] << 48) |
((uint64_t)header_bytes[17] << 40) |
((uint64_t)header_bytes[16] << 32) |
((uint64_t)header_bytes[15] << 24) |
((uint64_t)header_bytes[14] << 16) |
((uint64_t)header_bytes[13] << 8) |
(uint64_t)header_bytes[12]) == 0)
if ((stream->size = (
(uint64_t)header_bytes[19] << 56)
| ((uint64_t)header_bytes[18] << 48)
| ((uint64_t)header_bytes[17] << 40)
| ((uint64_t)header_bytes[16] << 32)
| ((uint64_t)header_bytes[15] << 24)
| ((uint64_t)header_bytes[14] << 16)
| ((uint64_t)header_bytes[13] << 8)
| (uint64_t)header_bytes[12]) == 0)
return false;
stream->is_compressed = true;
@ -391,8 +394,8 @@ rzipstream_t* rzipstream_open(const char *path, unsigned mode)
return NULL;
/* If opening in read mode, ensure file exists */
if ((mode == RETRO_VFS_FILE_ACCESS_READ) &&
!path_is_valid(path))
if ( (mode == RETRO_VFS_FILE_ACCESS_READ)
&& !path_is_valid(path))
return NULL;
/* Allocate stream object */
@ -454,10 +457,10 @@ static bool rzipstream_read_chunk(rzipstream_t *stream)
return false;
/* Get size of next compressed chunk */
compressed_chunk_size = ((uint32_t)chunk_header_bytes[3] << 24) |
((uint32_t)chunk_header_bytes[2] << 16) |
((uint32_t)chunk_header_bytes[1] << 8) |
(uint32_t)chunk_header_bytes[0];
compressed_chunk_size = ( (uint32_t)chunk_header_bytes[3] << 24)
| ((uint32_t)chunk_header_bytes[2] << 16)
| ((uint32_t)chunk_header_bytes[1] << 8)
| (uint32_t)chunk_header_bytes[0];
if (compressed_chunk_size == 0)
return false;
@ -523,7 +526,7 @@ static bool rzipstream_read_chunk(rzipstream_t *stream)
* the event of an error */
int64_t rzipstream_read(rzipstream_t *stream, void *data, int64_t len)
{
int64_t data_len = len;
int64_t _len = len;
uint8_t *data_ptr = (uint8_t *)data;
int64_t data_read = 0;
@ -536,7 +539,7 @@ int64_t rzipstream_read(rzipstream_t *stream, void *data, int64_t len)
return filestream_read(stream->file, data, len);
/* Process input data */
while (data_len > 0)
while (_len > 0)
{
int64_t read_size = 0;
@ -556,8 +559,8 @@ int64_t rzipstream_read(rzipstream_t *stream, void *data, int64_t len)
* > i.e. minimum of remaining output buffer
* occupancy and remaining 'read data' size */
if ((read_size = stream->out_buf_occupancy - stream->out_buf_ptr) >
data_len)
read_size = data_len;
_len)
read_size = _len;
/* Copy as much cached data as possible into
* the read buffer */
@ -566,7 +569,7 @@ int64_t rzipstream_read(rzipstream_t *stream, void *data, int64_t len)
/* Increment pointers and remaining length */
stream->out_buf_ptr += read_size;
data_ptr += read_size;
data_len -= read_size;
_len -= read_size;
stream->virtual_ptr += read_size;
@ -784,14 +787,14 @@ static bool rzipstream_write_chunk(rzipstream_t *stream)
* in the event of an error */
int64_t rzipstream_write(rzipstream_t *stream, const void *data, int64_t len)
{
int64_t data_len = len;
int64_t _len = len;
const uint8_t *data_ptr = (const uint8_t *)data;
if (!stream || !stream->is_writing || !data)
return -1;
/* Process input data */
while (data_len > 0)
while (_len > 0)
{
int64_t cache_size = 0;
@ -803,8 +806,8 @@ int64_t rzipstream_write(rzipstream_t *stream, const void *data, int64_t len)
/* Get amount of data to cache during this loop
* > i.e. minimum of space remaining in input buffer
* and remaining 'write data' size */
if ((cache_size = stream->in_buf_size - stream->in_buf_ptr) > data_len)
cache_size = data_len;
if ((cache_size = stream->in_buf_size - stream->in_buf_ptr) > _len)
cache_size = _len;
/* Copy as much data as possible into
* the input buffer */
@ -813,7 +816,7 @@ int64_t rzipstream_write(rzipstream_t *stream, const void *data, int64_t len)
/* Increment pointers and remaining length */
stream->in_buf_ptr += cache_size;
data_ptr += cache_size;
data_len -= cache_size;
_len -= cache_size;
stream->size += cache_size;
stream->virtual_ptr += cache_size;
@ -831,12 +834,10 @@ int64_t rzipstream_write(rzipstream_t *stream, const void *data, int64_t len)
int rzipstream_putc(rzipstream_t *stream, int c)
{
char c_char = (char)c;
if (!stream || !stream->is_writing)
return EOF;
return (rzipstream_write(stream, &c_char, 1) == 1) ?
(int)(unsigned char)c : EOF;
if ( stream && stream->is_writing
&& (rzipstream_write(stream, &c_char, 1) == 1))
return (int)(unsigned char)c;
return EOF;
}
/* Writes a variable argument list to an RZIP file.
@ -847,15 +848,13 @@ int rzipstream_putc(rzipstream_t *stream, int c)
int rzipstream_vprintf(rzipstream_t *stream, const char* format, va_list args)
{
static char buffer[8 * 1024] = {0};
int64_t num_chars = vsnprintf(buffer,
int _len = vsnprintf(buffer,
sizeof(buffer), format, args);
if (num_chars < 0)
if (_len < 0)
return -1;
else if (num_chars == 0)
else if (_len == 0)
return 0;
return (int)rzipstream_write(stream, buffer, num_chars);
return (int)rzipstream_write(stream, buffer, _len);
}
/* Writes formatted output to an RZIP file.
@ -1050,20 +1049,17 @@ int rzipstream_close(rzipstream_t *stream)
* disk and update file header */
if (stream->is_writing)
{
if (stream->in_buf_ptr > 0)
if (!rzipstream_write_chunk(stream))
goto error;
if (!rzipstream_write_file_header(stream))
goto error;
if ( ((stream->in_buf_ptr > 0)
&& !rzipstream_write_chunk(stream))
|| !rzipstream_write_file_header(stream))
{
/* Stream must be free()'d regardless */
rzipstream_free_stream(stream);
return -1;
}
}
/* Free stream
* > This also closes the file */
return rzipstream_free_stream(stream);
error:
/* Stream must be free()'d regardless */
rzipstream_free_stream(stream);
return -1;
}

View File

@ -681,7 +681,7 @@ static struct buffer query_parse_table(
buff = query_expect_char(s, len, buff, '{', error);
if (*error)
goto clean;
return buff;
buff = query_chomp(buff);
@ -798,13 +798,12 @@ static struct buffer query_parse_method_call(
invocation->func = NULL;
buff = query_get_ident(s, len,
buff, &func_name, &_len, error);
buff = query_get_ident(s, len, buff, &func_name, &_len, error);
if (*error)
goto clean;
return buff;
buff = query_chomp(buff);
buff = query_expect_char(s, len, buff, '(', error);
buff = query_chomp(buff);
buff = query_expect_char(s, len, buff, '(', error);
if (*error)
goto clean;

View File

@ -422,12 +422,6 @@ int rmsgpack_dom_read_into(intfstream_t *fd, ...)
int rv;
va_list ap;
struct rmsgpack_dom_value map;
struct rmsgpack_dom_value key;
int64_t *int_value;
uint64_t *uint_value;
int *bool_value;
char *buff_value;
uint64_t min_len;
va_start(ap, fd);
@ -439,13 +433,20 @@ int rmsgpack_dom_read_into(intfstream_t *fd, ...)
if (map.type == RDT_MAP)
{
int *bool_value;
char *buff_value;
uint64_t min_len;
int64_t *int_value;
uint64_t *uint_value;
struct rmsgpack_dom_value key;
for (;;)
{
struct rmsgpack_dom_value *value;
const char *key_name = va_arg(ap, const char *);
if (!key_name)
goto clean;
break;
key.type = RDT_STRING;
key.val.string.len = (uint32_t)strlen(key_name);
@ -486,12 +487,13 @@ int rmsgpack_dom_read_into(intfstream_t *fd, ...)
memcpy(buff_value, value->val.string.buff, (size_t)min_len);
break;
default:
goto clean;
va_end(ap);
rmsgpack_dom_value_free(&map);
return 0;
}
}
}
clean:
va_end(ap);
rmsgpack_dom_value_free(&map);
return 0;

View File

@ -519,15 +519,10 @@ enum manual_content_scan_playlist_refresh_status
system_name_type = MANUAL_CONTENT_SCAN_SYSTEM_NAME_CONTENT_DIR;
enum manual_content_scan_core_type
core_type = MANUAL_CONTENT_SCAN_CORE_DETECT;
enum manual_content_scan_playlist_refresh_status
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_OK;
char system_name[NAME_MAX_LENGTH];
if (!playlist_scan_refresh_enabled(playlist))
{
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_MISSING_CONFIG;
goto end;
}
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_MISSING_CONFIG;
/* Read scan parameters from playlist */
playlist_path = playlist_get_conf_path(playlist);
@ -543,31 +538,22 @@ enum manual_content_scan_playlist_refresh_status
/* Determine system name (playlist basename
* without extension) */
/* Cannot happen, but would constitute a
* 'system name' error */
if (string_is_empty(playlist_path))
{
/* Cannot happen, but would constitute a
* 'system name' error */
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_SYSTEM_NAME;
goto end;
}
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_SYSTEM_NAME;
fill_pathname(system_name, path_basename(playlist_path),
"", sizeof(system_name));
/* Cannot happen, but would constitute a
* 'system name' error */
if (string_is_empty(system_name))
{
/* Cannot happen, but would constitute a
* 'system name' error */
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_SYSTEM_NAME;
goto end;
}
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_SYSTEM_NAME;
/* Set content directory */
if (!manual_content_scan_set_menu_content_dir(content_dir))
{
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_CONTENT_DIR;
goto end;
}
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_CONTENT_DIR;
/* Set system name */
#ifdef HAVE_LIBRETRODB
@ -630,10 +616,7 @@ enum manual_content_scan_playlist_refresh_status
if (!manual_content_scan_set_menu_system_name(
system_name_type, system_name))
{
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_SYSTEM_NAME;
goto end;
}
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_SYSTEM_NAME;
/* Set core path/name */
if ( !string_is_empty(core_name)
@ -642,10 +625,7 @@ enum manual_content_scan_playlist_refresh_status
if (!manual_content_scan_set_menu_core_name(
core_type, core_name))
{
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_CORE;
goto end;
}
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_CORE;
/* Set custom file extensions */
if (string_is_empty(file_exts))
@ -679,11 +659,9 @@ enum manual_content_scan_playlist_refresh_status
switch (manual_content_scan_validate_dat_file_path())
{
case MANUAL_CONTENT_SCAN_DAT_FILE_INVALID:
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_DAT_FILE;
goto end;
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_INVALID_DAT_FILE;
case MANUAL_CONTENT_SCAN_DAT_FILE_TOO_LARGE:
playlist_status = MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_DAT_FILE_TOO_LARGE;
goto end;
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_DAT_FILE_TOO_LARGE;
default:
/* No action required */
break;
@ -700,8 +678,7 @@ enum manual_content_scan_playlist_refresh_status
* existing file */
scan_settings.validate_entries = true;
end:
return playlist_status;
return MANUAL_CONTENT_SCAN_PLAYLIST_REFRESH_OK;
}
/* Menu getters */
@ -1096,9 +1073,9 @@ struct string_list *manual_content_scan_get_content_list(
/* Sanity check */
if (!task_config)
goto error;
return NULL;
if (string_is_empty(task_config->content_dir))
goto error;
return NULL;
/* Check whether files should be filtered by
* extension */
@ -1187,7 +1164,7 @@ static bool manual_content_scan_get_playlist_content_path(
/* Get archive file contents */
if (!(archive_list = file_archive_get_file_list(
content_path, filter_exts ? task_config->file_exts : NULL)))
goto error;
return false;
if (archive_list->size < 1)
goto error;

View File

@ -164,7 +164,6 @@ static void handle_discord_join_cb(retro_task_t *task, void *task_data,
goto done;
if (data->status != 200)
goto done;
if (!(room_data = (char*)malloc(data->len + 1)))
goto done;
memcpy(room_data, data->data, data->len);