Error checking and "find" command
This commit is contained in:
parent
470fd27fbb
commit
58010c8a07
52
src/sfxd.c
52
src/sfxd.c
|
@ -151,6 +151,8 @@ void ipc_loop(void) {
|
||||||
if (params != NULL) {
|
if (params != NULL) {
|
||||||
*params = '\0';
|
*params = '\0';
|
||||||
params++;
|
params++;
|
||||||
|
} else {
|
||||||
|
params = "";
|
||||||
}
|
}
|
||||||
execute_command((struct msg_target) { 0, ipc.sock_fd, sa_client, sl_client }, command, params);
|
execute_command((struct msg_target) { 0, ipc.sock_fd, sa_client, sl_client }, command, params);
|
||||||
SOFT_EXPECT(sendto(ipc.sock_fd, "", 0, 0, sa_client, sl_client), == 0,);
|
SOFT_EXPECT(sendto(ipc.sock_fd, "", 0, 0, sa_client, sl_client), == 0,);
|
||||||
|
@ -195,8 +197,16 @@ void execute_command(struct msg_target tgt, const char *command, const char *par
|
||||||
send_txt((struct msg_target){ stdout, 0, 0, 0 }, "INF: Received '%s' with '%s'\n", command, params);
|
send_txt((struct msg_target){ stdout, 0, 0, 0 }, "INF: Received '%s' with '%s'\n", command, params);
|
||||||
|
|
||||||
if (0 == strcmp(command, "load")) {
|
if (0 == strcmp(command, "load")) {
|
||||||
|
if (strlen(params) == 0) {
|
||||||
|
send_txt(tgt, "ERR: argument required: KEY\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
const char *key = params;
|
const char *key = params;
|
||||||
char *path = strchr(params, ' ');
|
char *path = strchr(params, ' ');
|
||||||
|
if (path == NULL) {
|
||||||
|
send_txt(tgt, "ERR: argument required: PATH\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
*path = '\0';
|
*path = '\0';
|
||||||
path++;
|
path++;
|
||||||
|
|
||||||
|
@ -216,9 +226,13 @@ void execute_command(struct msg_target tgt, const char *command, const char *par
|
||||||
send_txt(tgt, "OK: Loaded as %08x\n", adler32(key, strlen(key)));
|
send_txt(tgt, "OK: Loaded as %08x\n", adler32(key, strlen(key)));
|
||||||
}
|
}
|
||||||
} else if (0 == strcmp(command, "play")) {
|
} else if (0 == strcmp(command, "play")) {
|
||||||
|
if (strlen(params) == 0) {
|
||||||
|
send_txt(tgt, "ERR: argument required: KEY\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
struct sfx_pool_item *sound = sfx_pool_lookup(params);
|
struct sfx_pool_item *sound = sfx_pool_lookup(params);
|
||||||
if (!sound) {
|
if (!sound) {
|
||||||
send_txt(tgt, "No such sound: '%s'\n", params);
|
send_txt(tgt, "ERR: No such sound: '%s'\n", params);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,6 +243,10 @@ void execute_command(struct msg_target tgt, const char *command, const char *par
|
||||||
ma_sound_set_volume(sfx, sound->volume);
|
ma_sound_set_volume(sfx, sound->volume);
|
||||||
ma_sound_start(sfx);
|
ma_sound_start(sfx);
|
||||||
} else if (0 == strcmp(command, "play:rs")) {
|
} else if (0 == strcmp(command, "play:rs")) {
|
||||||
|
if (strlen(params) == 0) {
|
||||||
|
send_txt(tgt, "ERR: argument required: KEY\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
struct sfx_pool_item *sound = sfx_pool_lookup(params);
|
struct sfx_pool_item *sound = sfx_pool_lookup(params);
|
||||||
if (!sound) {
|
if (!sound) {
|
||||||
send_txt(tgt, "ERR: No such sound: '%s'\n", params);
|
send_txt(tgt, "ERR: No such sound: '%s'\n", params);
|
||||||
|
@ -245,7 +263,11 @@ void execute_command(struct msg_target tgt, const char *command, const char *par
|
||||||
} else if (0 == strcmp(command, "set:pitch")) {
|
} else if (0 == strcmp(command, "set:pitch")) {
|
||||||
float min, max;
|
float min, max;
|
||||||
char *key;
|
char *key;
|
||||||
sscanf(params, "%ms %f %f", &key, &min, &max);
|
int retval = sscanf(params, "%ms %f %f", &key, &min, &max);
|
||||||
|
if (retval != 3) {
|
||||||
|
send_txt(tgt, "ERR: not enough arguments: KEY MIN MAX needed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
struct sfx_pool_item *sound = sfx_pool_lookup(key);
|
struct sfx_pool_item *sound = sfx_pool_lookup(key);
|
||||||
if (!sound) {
|
if (!sound) {
|
||||||
|
@ -271,7 +293,11 @@ void execute_command(struct msg_target tgt, const char *command, const char *par
|
||||||
} else if (0 == strcmp(command, "set:volume")) {
|
} else if (0 == strcmp(command, "set:volume")) {
|
||||||
float vol;
|
float vol;
|
||||||
char *key;
|
char *key;
|
||||||
sscanf(params, "%ms %f", &key, &vol);
|
int retval = sscanf(params, "%ms %f", &key, &vol);
|
||||||
|
if (retval != 2) {
|
||||||
|
send_txt(tgt, "ERR: not enough arguments: KEY VOLUME\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
struct sfx_pool_item *sound = sfx_pool_lookup(key);
|
struct sfx_pool_item *sound = sfx_pool_lookup(key);
|
||||||
if (!sound) {
|
if (!sound) {
|
||||||
|
@ -284,7 +310,23 @@ void execute_command(struct msg_target tgt, const char *command, const char *par
|
||||||
}
|
}
|
||||||
|
|
||||||
sound->volume = vol;
|
sound->volume = vol;
|
||||||
|
} else if (0 == strcmp(command, "find")) {
|
||||||
|
if (strlen(params) == 0) {
|
||||||
|
send_txt(tgt, "ERR: argument required: QUERY\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < sounds_pool.cap; i++) {
|
||||||
|
struct sfx_pool_item item = sounds_pool.sounds[i];
|
||||||
|
if (item.key[0] != '\0' && strcasestr(item.key, params)) {
|
||||||
|
send_txt(tgt, "%s\n", item.key);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (0 == strcmp(command, "source")) {
|
} else if (0 == strcmp(command, "source")) {
|
||||||
|
if (strlen(params) == 0) {
|
||||||
|
send_txt(tgt, "ERR: argument required: PATH\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
execute_file(tgt, params, 0);
|
execute_file(tgt, params, 0);
|
||||||
} else if (0 == strcmp(command, "help")) {
|
} else if (0 == strcmp(command, "help")) {
|
||||||
send_help(tgt);
|
send_help(tgt);
|
||||||
|
@ -439,6 +481,7 @@ void sfx_pool_grow(int size) {
|
||||||
|
|
||||||
struct sfx_pool_item *sfx_pool_lookup(const char *key) {
|
struct sfx_pool_item *sfx_pool_lookup(const char *key) {
|
||||||
if (key == NULL) return NULL;
|
if (key == NULL) return NULL;
|
||||||
|
if (strlen(key) == 0) return NULL;
|
||||||
uint32_t hash = adler32(key, strlen(key));
|
uint32_t hash = adler32(key, strlen(key));
|
||||||
global_counters.pool_read++;
|
global_counters.pool_read++;
|
||||||
for (int offset = 0; offset < sounds_pool.cap; offset++) {
|
for (int offset = 0; offset < sounds_pool.cap; offset++) {
|
||||||
|
@ -457,6 +500,8 @@ struct sfx_pool_item *sfx_pool_lookup(const char *key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sfx_pool_item *sfx_pool_find_place_for(const char *key) {
|
struct sfx_pool_item *sfx_pool_find_place_for(const char *key) {
|
||||||
|
if (key == NULL) return NULL;
|
||||||
|
if (strlen(key) == 0) return NULL;
|
||||||
uint32_t hash = adler32(key, strlen(key));
|
uint32_t hash = adler32(key, strlen(key));
|
||||||
global_counters.pool_write++;
|
global_counters.pool_write++;
|
||||||
for (int offset = 0; offset < sounds_pool.cap; offset++) {
|
for (int offset = 0; offset < sounds_pool.cap; offset++) {
|
||||||
|
@ -476,6 +521,7 @@ struct sfx_pool_item *sfx_pool_find_place_for(const char *key) {
|
||||||
|
|
||||||
struct sfx_pool_item *sfx_pool_load(const char *key, const char *path) {
|
struct sfx_pool_item *sfx_pool_load(const char *key, const char *path) {
|
||||||
if (key == NULL || path == NULL) return NULL;
|
if (key == NULL || path == NULL) return NULL;
|
||||||
|
if (strlen(key) == 0 || strlen(path) == 0) return NULL;
|
||||||
|
|
||||||
struct sfx_pool_item *sound = sfx_pool_find_place_for(key);
|
struct sfx_pool_item *sound = sfx_pool_find_place_for(key);
|
||||||
SOFT_EXPECT(sound == NULL, == false, NULL);
|
SOFT_EXPECT(sound == NULL, == false, NULL);
|
||||||
|
|
Loading…
Reference in New Issue