diff --git a/src/nsmd.cpp b/src/nsmd.cpp index b38aa94..f9fb671 100644 --- a/src/nsmd.cpp +++ b/src/nsmd.cpp @@ -433,6 +433,23 @@ path_is_valid ( const char *path ) 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 mkpath ( const char *path, bool create_final_directory ) { @@ -1590,6 +1607,17 @@ OSC_HANDLER( duplicate ) 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(); if ( clients_have_errors() ) @@ -1636,6 +1664,7 @@ OSC_HANDLER( duplicate ) ERR_NO_SUCH_FILE, "No such file." ); free(spath); + pending_operation = COMMAND_NONE; return -1; } @@ -1678,7 +1707,19 @@ OSC_HANDLER( new ) 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();