struct floor flbuf;
struct visit vbuf;
- lprintf(CTDL_DEBUG, "create_room(%s)\n", new_room_name);
+ lprintf(CTDL_DEBUG, "create_room(name=%s, type=%d, view=%d)\n",
+ new_room_name, new_room_type, new_room_view);
+
if (getroom(&qrbuf, new_room_name) == 0) {
lprintf(CTDL_DEBUG, "%s already exists.\n", new_room_name);
- return (0); /* already exists */
+ return(0);
}
-
memset(&qrbuf, 0, sizeof(struct ctdlroom));
safestrncpy(qrbuf.QRpasswd, new_room_pass, sizeof qrbuf.QRpasswd);
qrbuf.QRflags = QR_INUSE;
struct CitContext *t_context;
int retval;
- unbuffer_output();
-
if (!(CC->logged_in)) {
cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
return;
CC->cs_flags = CC->cs_flags | CS_CHAT;
cprintf("%d Entering chat mode (type '/help' for available commands)\n",
START_CHAT_MODE);
+ unbuffer_output();
MyLastMsg = ChatLastMsg;
char roomname[ROOMNAMELEN];
int floornum;
int flags;
- int newroomtype;
+ int newroomtype = 0;
+ int newroomview = 0;
if (strchr(parms[2], '\\') != NULL) {
cprintf("%s NO Invalid character in folder name\r\n",
}
if (flags & IR_MAILBOX) {
- newroomtype = 4; /* private mailbox */
+ newroomtype = 4; /* private mailbox */
+ newroomview = VIEW_MAILBOX;
} else {
- newroomtype = 0; /* public folder */
+ newroomtype = 0; /* public folder */
+ newroomview = VIEW_BBS;
}
lprintf(CTDL_INFO, "Create new room <%s> on floor <%d> with type <%d>\n",
roomname, floornum, newroomtype);
- ret = create_room(roomname, newroomtype, "", floornum, 1, 0, VIEW_BBS);
+ ret = create_room(roomname, newroomtype, "", floornum, 1, 0, newroomview);
if (ret == 0) {
cprintf
("%s NO Mailbox already exists, or create failed\r\n",
sigaddset(&set, SIGHUP);
sigaddset(&set, SIGTERM);
sigaddset(&set, SIGSEGV);
+ sigaddset(&set, SIGILL);
+ sigaddset(&set, SIGBUS);
sigprocmask(SIG_UNBLOCK, &set, NULL);
signal(SIGINT, signal_cleanup);
signal(SIGQUIT, signal_cleanup);
signal(SIGHUP, signal_cleanup);
signal(SIGTERM, signal_cleanup);
signal(SIGSEGV, signal_cleanup);
+ signal(SIGILL, signal_cleanup);
+ signal(SIGBUS, signal_cleanup);
/*
* Do not shut down the server on broken pipe signals, otherwise the
return(-1);
}
+ /* set to nonblock - we need this for some obscure situations */
+ if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) {
+ lprintf(CTDL_EMERG, "citserver: Can't set socket to non-blocking: %s\n",
+ strerror(errno));
+ close(s);
+ return(-1);
+ }
+
if (listen(s, actual_queue_len) < 0) {
lprintf(CTDL_EMERG, "citserver: Can't listen: %s\n", strerror(errno));
close(s);
return(-1);
}
+ /* set to nonblock - we need this for some obscure situations */
+ if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) {
+ lprintf(CTDL_EMERG, "citserver: Can't set socket to non-blocking: %s\n",
+ strerror(errno));
+ close(s);
+ return(-1);
+ }
+
if (listen(s, actual_queue_len) < 0) {
lprintf(CTDL_EMERG, "citserver: Can't listen: %s\n", strerror(errno));
return(-1);
}
end_critical_section(S_SESSION_TABLE);
- if (bind_me) goto SKIP_SELECT;
+ if (bind_me) {
+ goto SKIP_SELECT;
+ }
/* If we got this far, it means that there are no sessions
* which a previous thread marked for attention, so we go