X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=vnc.c;h=41defc2b424d313559c178cc7fa70070efeb7a91;hb=db241f403213807a3ab9ea9eb88649dcbf71dba4;hp=7b1c227cef93d8be2afc13f54c73d2640e3b1675;hpb=bee1b01083b6adcf580fa30e65a2e59e7231af31;p=qemu diff --git a/vnc.c b/vnc.c index 7b1c227..41defc2 100644 --- a/vnc.c +++ b/vnc.c @@ -86,7 +86,6 @@ char *vnc_socket_local_addr(const char *format, int fd) { return addr_to_string(format, &sa, salen); } - char *vnc_socket_remote_addr(const char *format, int fd) { struct sockaddr_storage sa; socklen_t salen; @@ -366,17 +365,13 @@ static void vnc_resize(VncState *vs) memset(vs->guest.dirty, 0xFF, sizeof(vs->guest.dirty)); /* server surface */ - if (!vs->server.ds) { - vs->server.ds = default_allocator.create_displaysurface(ds_get_width(ds), - ds_get_height(ds)); - } else { - default_allocator.resize_displaysurface(vs->server.ds, - ds_get_width(ds), ds_get_height(ds)); - } - if (vs->server.ds->data == NULL) { - fprintf(stderr, "vnc: memory allocation failed\n"); - exit(1); - } + if (!vs->server.ds) + vs->server.ds = qemu_mallocz(sizeof(*vs->server.ds)); + if (vs->server.ds->data) + qemu_free(vs->server.ds->data); + *(vs->server.ds) = *(ds->surface); + vs->server.ds->data = qemu_mallocz(vs->server.ds->linesize * + vs->server.ds->height); memset(vs->server.dirty, 0xFF, sizeof(vs->guest.dirty)); } @@ -687,7 +682,7 @@ static int find_and_clear_dirty_height(struct VncSurface *s, { int h; - for (h = 1; h < (s->ds->height - y) && h < 1; h++) { + for (h = 1; h < (s->ds->height - y); h++) { int tmp_x; if (!vnc_get_bit(s->dirty[y + h], last_x)) break; @@ -859,7 +854,7 @@ static void audio_add(VncState *vs) ops.destroy = audio_capture_destroy; ops.capture = audio_capture; - vs->audio_cap = AUD_add_capture(NULL, &vs->as, &ops, vs); + vs->audio_cap = AUD_add_capture(&vs->as, &ops, vs); if (!vs->audio_cap) { monitor_printf(mon, "Failed to add audio capture\n"); } @@ -919,7 +914,8 @@ int vnc_client_io_error(VncState *vs, int ret, int last_errno) if (!vs->vd->clients) dcl->idle = 1; - default_allocator.free_displaysurface(vs->server.ds); + qemu_free(vs->server.ds->data); + qemu_free(vs->server.ds); qemu_free(vs->guest.ds); qemu_free(vs); @@ -1425,8 +1421,8 @@ static void framebuffer_update_request(VncState *vs, int incremental, int i; vs->need_update = 1; - vs->force_update = 1; if (!incremental) { + vs->force_update = 1; for (i = 0; i < h; i++) { vnc_set_bits(vs->guest.dirty[y_position + i], (ds_get_width(vs->ds) / 16), VNC_DIRTY_WORDS); @@ -2037,9 +2033,8 @@ static void vnc_listen_read(void *opaque) void vnc_display_init(DisplayState *ds) { - VncDisplay *vs; + VncDisplay *vs = qemu_mallocz(sizeof(*vs)); - vs = qemu_mallocz(sizeof(VncState)); dcl = qemu_mallocz(sizeof(DisplayChangeListener)); ds->opaque = vs; @@ -2104,6 +2099,13 @@ int vnc_display_password(DisplayState *ds, const char *password) return 0; } +char *vnc_display_local_addr(DisplayState *ds) +{ + VncDisplay *vs = ds ? (VncDisplay *)ds->opaque : vnc_display; + + return vnc_socket_local_addr("%s:%s", vs->lsock); +} + int vnc_display_open(DisplayState *ds, const char *display) { VncDisplay *vs = ds ? (VncDisplay *)ds->opaque : vnc_display;