server: Remove no longer needed server-side console input ioctls.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
2e74000537
commit
c2e319ed20
275
server/console.c
275
server/console.c
|
@ -888,105 +888,6 @@ static void propagate_console_signal( struct console_input *console,
|
|||
enum_processes(propagate_console_signal_cb, &csi);
|
||||
}
|
||||
|
||||
/* retrieve a pointer to the console input records */
|
||||
static int read_console_input( struct console_input *console, struct async *async, int flush )
|
||||
{
|
||||
struct iosb *iosb = async_get_iosb( async );
|
||||
data_size_t count;
|
||||
|
||||
count = min( iosb->out_size / sizeof(INPUT_RECORD), console->recnum );
|
||||
if (count)
|
||||
{
|
||||
if (!(iosb->out_data = malloc( count * sizeof(INPUT_RECORD) )))
|
||||
{
|
||||
set_error( STATUS_NO_MEMORY );
|
||||
release_object( iosb );
|
||||
return 0;
|
||||
}
|
||||
iosb->out_size = iosb->result = count * sizeof(INPUT_RECORD);
|
||||
memcpy( iosb->out_data, console->records, iosb->result );
|
||||
iosb->status = STATUS_SUCCESS;
|
||||
async_terminate( async, STATUS_ALERTED );
|
||||
}
|
||||
else
|
||||
{
|
||||
async_terminate( async, STATUS_SUCCESS );
|
||||
}
|
||||
|
||||
release_object( iosb );
|
||||
|
||||
if (flush && count)
|
||||
{
|
||||
if (console->recnum > count)
|
||||
{
|
||||
INPUT_RECORD *new_rec;
|
||||
memmove( console->records, console->records + count, (console->recnum - count) * sizeof(*console->records) );
|
||||
console->recnum -= count;
|
||||
new_rec = realloc( console->records, console->recnum * sizeof(*console->records) );
|
||||
if (new_rec) console->records = new_rec;
|
||||
}
|
||||
else
|
||||
{
|
||||
console->recnum = 0;
|
||||
free( console->records );
|
||||
console->records = NULL;
|
||||
reset_event( console->event );
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* add input events to a console input queue */
|
||||
static int write_console_input( struct console_input* console, int count,
|
||||
const INPUT_RECORD *records )
|
||||
{
|
||||
INPUT_RECORD *new_rec;
|
||||
struct async *async;
|
||||
|
||||
if (!count) return 1;
|
||||
if (!(new_rec = realloc( console->records,
|
||||
(console->recnum + count) * sizeof(INPUT_RECORD) )))
|
||||
{
|
||||
set_error( STATUS_NO_MEMORY );
|
||||
return 0;
|
||||
}
|
||||
console->records = new_rec;
|
||||
memcpy( new_rec + console->recnum, records, count * sizeof(INPUT_RECORD) );
|
||||
|
||||
if (console->mode & ENABLE_PROCESSED_INPUT)
|
||||
{
|
||||
int i = 0;
|
||||
while (i < count)
|
||||
{
|
||||
if (records[i].EventType == KEY_EVENT &&
|
||||
records[i].Event.KeyEvent.uChar.UnicodeChar == 'C' - 64 &&
|
||||
!(records[i].Event.KeyEvent.dwControlKeyState & ENHANCED_KEY))
|
||||
{
|
||||
if (i != count - 1)
|
||||
memcpy( &console->records[console->recnum + i],
|
||||
&console->records[console->recnum + i + 1],
|
||||
(count - i - 1) * sizeof(INPUT_RECORD) );
|
||||
count--;
|
||||
if (records[i].Event.KeyEvent.bKeyDown)
|
||||
{
|
||||
/* send SIGINT to all processes attached to this console */
|
||||
propagate_console_signal( console, CTRL_C_EVENT, 0 );
|
||||
}
|
||||
}
|
||||
else i++;
|
||||
}
|
||||
}
|
||||
console->recnum += count;
|
||||
while (console->recnum && (async = find_pending_async( &console->read_q )))
|
||||
{
|
||||
read_console_input( console, async, 1 );
|
||||
release_object( async );
|
||||
}
|
||||
if (console->recnum) set_event( console->event );
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* dumb dump */
|
||||
static void console_input_dump( struct object *obj, int verbose )
|
||||
{
|
||||
|
@ -1219,182 +1120,6 @@ static int console_input_ioctl( struct fd *fd, ioctl_code_t code, struct async *
|
|||
|
||||
switch (code)
|
||||
{
|
||||
case IOCTL_CONDRV_GET_MODE:
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (get_reply_max_size() != sizeof(console->mode))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
return set_reply_data( &console->mode, sizeof(console->mode) ) != NULL;
|
||||
|
||||
case IOCTL_CONDRV_SET_MODE:
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (get_req_data_size() != sizeof(console->mode))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
console->mode = *(unsigned int *)get_req_data();
|
||||
return 1;
|
||||
|
||||
case IOCTL_CONDRV_READ_INPUT:
|
||||
{
|
||||
int blocking = 0;
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (get_reply_max_size() % sizeof(INPUT_RECORD))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
if (get_req_data_size())
|
||||
{
|
||||
if (get_req_data_size() != sizeof(int))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
blocking = *(int *)get_req_data();
|
||||
}
|
||||
set_error( STATUS_PENDING );
|
||||
if (blocking && !console->recnum)
|
||||
{
|
||||
queue_async( &console->read_q, async );
|
||||
return 1;
|
||||
}
|
||||
return read_console_input( console, async, 1 );
|
||||
}
|
||||
|
||||
case IOCTL_CONDRV_WRITE_INPUT:
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
return write_console_input( console, get_req_data_size() / sizeof(INPUT_RECORD), get_req_data() );
|
||||
|
||||
case IOCTL_CONDRV_PEEK:
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (get_reply_max_size() % sizeof(INPUT_RECORD))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
set_error( STATUS_PENDING );
|
||||
return read_console_input( console, async, 0 );
|
||||
|
||||
case IOCTL_CONDRV_GET_INPUT_INFO:
|
||||
{
|
||||
struct condrv_input_info info;
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (get_reply_max_size() != sizeof(info))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
info.input_cp = console->input_cp;
|
||||
info.output_cp = console->output_cp;
|
||||
info.history_mode = console->history_mode;
|
||||
info.history_size = console->history_size;
|
||||
info.history_index = console->history_index;
|
||||
info.edition_mode = console->edition_mode;
|
||||
info.input_count = console->recnum;
|
||||
info.win = console->win;
|
||||
return set_reply_data( &info, sizeof(info) ) != NULL;
|
||||
}
|
||||
|
||||
case IOCTL_CONDRV_SET_INPUT_INFO:
|
||||
{
|
||||
const struct condrv_input_info_params *params = get_req_data();
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (get_req_data_size() != sizeof(*params))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
if (params->mask & SET_CONSOLE_INPUT_INFO_HISTORY_MODE)
|
||||
{
|
||||
console->history_mode = params->info.history_mode;
|
||||
}
|
||||
if ((params->mask & SET_CONSOLE_INPUT_INFO_HISTORY_SIZE) &&
|
||||
console->history_size != params->info.history_size)
|
||||
{
|
||||
struct history_line **mem = NULL;
|
||||
int i, delta;
|
||||
|
||||
if (params->info.history_size)
|
||||
{
|
||||
if (!(mem = mem_alloc( params->info.history_size * sizeof(*mem) ))) return 0;
|
||||
memset( mem, 0, params->info.history_size * sizeof(*mem) );
|
||||
}
|
||||
|
||||
delta = (console->history_index > params->info.history_size) ?
|
||||
(console->history_index - params->info.history_size) : 0;
|
||||
|
||||
for (i = delta; i < console->history_index; i++)
|
||||
{
|
||||
mem[i - delta] = console->history[i];
|
||||
console->history[i] = NULL;
|
||||
}
|
||||
console->history_index -= delta;
|
||||
|
||||
for (i = 0; i < console->history_size; i++)
|
||||
free( console->history[i] );
|
||||
free( console->history );
|
||||
console->history = mem;
|
||||
console->history_size = params->info.history_size;
|
||||
}
|
||||
if (params->mask & SET_CONSOLE_INPUT_INFO_EDITION_MODE)
|
||||
{
|
||||
console->edition_mode = params->info.edition_mode;
|
||||
}
|
||||
if (params->mask & SET_CONSOLE_INPUT_INFO_INPUT_CODEPAGE)
|
||||
{
|
||||
console->input_cp = params->info.input_cp;
|
||||
}
|
||||
if (params->mask & SET_CONSOLE_INPUT_INFO_OUTPUT_CODEPAGE)
|
||||
{
|
||||
console->output_cp = params->info.output_cp;
|
||||
}
|
||||
if (params->mask & SET_CONSOLE_INPUT_INFO_WIN)
|
||||
{
|
||||
console->win = params->info.win;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
case IOCTL_CONDRV_GET_TITLE:
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (!console->title_len) return 1;
|
||||
return set_reply_data( console->title, min( console->title_len, get_reply_max_size() )) != NULL;
|
||||
|
||||
case IOCTL_CONDRV_SET_TITLE:
|
||||
{
|
||||
data_size_t len = get_req_data_size();
|
||||
struct condrv_renderer_event evt;
|
||||
WCHAR *title = NULL;
|
||||
|
||||
if (console->server)
|
||||
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
|
||||
if (len % sizeof(WCHAR))
|
||||
{
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (len && !(title = memdup( get_req_data(), len ))) return 0;
|
||||
free( console->title );
|
||||
console->title = title;
|
||||
console->title_len = len;
|
||||
evt.event = CONSOLE_RENDERER_TITLE_EVENT;
|
||||
console_input_events_append( console, &evt );
|
||||
return 1;
|
||||
}
|
||||
|
||||
case IOCTL_CONDRV_CTRL_EVENT:
|
||||
{
|
||||
const struct condrv_ctrl_event *event = get_req_data();
|
||||
|
|
Loading…
Reference in New Issue