| @@ -433,6 +433,23 @@ path_is_valid ( const char *path ) | |||||
| return r; | return r; | ||||
| } | } | ||||
| int | |||||
| session_already_exists ( const char * session_name) | |||||
| { | |||||
| //A session is defined as a path with the file session.nsm | |||||
| struct stat st_session_exists_check; | |||||
| char * path; | |||||
| asprintf( &path, "%s/%s/session.nsm", session_root, session_name ); | |||||
| if ( stat (path, &st_session_exists_check) == 0) { | |||||
| free( path ); | |||||
| return 0; // Already exists | |||||
| } | |||||
| else { | |||||
| free( path ); | |||||
| return -1; // All good | |||||
| } | |||||
| } | |||||
| int | int | ||||
| mkpath ( const char *path, bool create_final_directory ) | mkpath ( const char *path, bool create_final_directory ) | ||||
| { | { | ||||
| @@ -1590,6 +1607,17 @@ OSC_HANDLER( duplicate ) | |||||
| goto done; | goto done; | ||||
| } | } | ||||
| if ( session_already_exists(&argv[0]->s) == 0) { | |||||
| osc_server->send( sender_addr, "/error", path, | |||||
| ERR_CREATE_FAILED, | |||||
| "Session name already exists." ); | |||||
| pending_operation = COMMAND_NONE; | |||||
| return 0; | |||||
| } | |||||
| command_all_clients_to_save(); | command_all_clients_to_save(); | ||||
| if ( clients_have_errors() ) | if ( clients_have_errors() ) | ||||
| @@ -1636,6 +1664,7 @@ OSC_HANDLER( duplicate ) | |||||
| ERR_NO_SUCH_FILE, | ERR_NO_SUCH_FILE, | ||||
| "No such file." ); | "No such file." ); | ||||
| free(spath); | free(spath); | ||||
| pending_operation = COMMAND_NONE; | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -1678,7 +1707,19 @@ OSC_HANDLER( new ) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| if ( session_path ) | |||||
| if ( session_already_exists(&argv[0]->s) == 0) { | |||||
| osc_server->send( sender_addr, "/error", path, | |||||
| ERR_CREATE_FAILED, | |||||
| "Session name already exists." ); | |||||
| pending_operation = COMMAND_NONE; | |||||
| return 0; | |||||
| } | |||||
| if ( session_path ) //Already a session running? | |||||
| { | { | ||||
| command_all_clients_to_save(); | command_all_clients_to_save(); | ||||