Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
5643706a
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5643706a
编写于
1月 24, 2014
作者:
G
Gerd Hoffmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
console: add head to index to qemu consoles.
Signed-off-by:
N
Gerd Hoffmann
<
kraxel@redhat.com
>
上级
5c07d00f
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
52 addition
and
31 deletion
+52
-31
hw/arm/musicpal.c
hw/arm/musicpal.c
+1
-1
hw/display/blizzard.c
hw/display/blizzard.c
+1
-1
hw/display/cg3.c
hw/display/cg3.c
+1
-1
hw/display/cirrus_vga.c
hw/display/cirrus_vga.c
+2
-2
hw/display/exynos4210_fimd.c
hw/display/exynos4210_fimd.c
+1
-1
hw/display/g364fb.c
hw/display/g364fb.c
+1
-1
hw/display/jazz_led.c
hw/display/jazz_led.c
+1
-1
hw/display/milkymist-vgafb.c
hw/display/milkymist-vgafb.c
+1
-1
hw/display/omap_lcdc.c
hw/display/omap_lcdc.c
+1
-1
hw/display/pl110.c
hw/display/pl110.c
+1
-1
hw/display/pxa2xx_lcd.c
hw/display/pxa2xx_lcd.c
+1
-1
hw/display/qxl.c
hw/display/qxl.c
+2
-2
hw/display/sm501.c
hw/display/sm501.c
+1
-1
hw/display/ssd0303.c
hw/display/ssd0303.c
+1
-1
hw/display/ssd0323.c
hw/display/ssd0323.c
+1
-1
hw/display/tc6393xb.c
hw/display/tc6393xb.c
+1
-1
hw/display/tcx.c
hw/display/tcx.c
+2
-2
hw/display/vga-isa-mm.c
hw/display/vga-isa-mm.c
+1
-1
hw/display/vga-isa.c
hw/display/vga-isa.c
+1
-1
hw/display/vga-pci.c
hw/display/vga-pci.c
+1
-1
hw/display/vmware_vga.c
hw/display/vmware_vga.c
+1
-1
hw/unicore32/puv3.c
hw/unicore32/puv3.c
+1
-1
include/ui/console.h
include/ui/console.h
+3
-2
ui/console.c
ui/console.c
+24
-4
未找到文件。
hw/arm/musicpal.c
浏览文件 @
5643706a
...
...
@@ -630,7 +630,7 @@ static int musicpal_lcd_init(SysBusDevice *sbd)
"musicpal-lcd"
,
MP_LCD_SIZE
);
sysbus_init_mmio
(
sbd
,
&
s
->
iomem
);
s
->
con
=
graphic_console_init
(
dev
,
&
musicpal_gfx_ops
,
s
);
s
->
con
=
graphic_console_init
(
dev
,
0
,
&
musicpal_gfx_ops
,
s
);
qemu_console_resize
(
s
->
con
,
128
*
3
,
64
*
3
);
qdev_init_gpio_in
(
dev
,
musicpal_lcd_gpio_brightness_in
,
3
);
...
...
hw/display/blizzard.c
浏览文件 @
5643706a
...
...
@@ -956,7 +956,7 @@ void *s1d13745_init(qemu_irq gpio_int)
s
->
fb
=
g_malloc
(
0x180000
);
s
->
con
=
graphic_console_init
(
NULL
,
&
blizzard_ops
,
s
);
s
->
con
=
graphic_console_init
(
NULL
,
0
,
&
blizzard_ops
,
s
);
surface
=
qemu_console_surface
(
s
->
con
);
switch
(
surface_bits_per_pixel
(
surface
))
{
...
...
hw/display/cg3.c
浏览文件 @
5643706a
...
...
@@ -306,7 +306,7 @@ static void cg3_realizefn(DeviceState *dev, Error **errp)
sysbus_init_irq
(
sbd
,
&
s
->
irq
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
cg3_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
cg3_ops
,
s
);
qemu_console_resize
(
s
->
con
,
s
->
width
,
s
->
height
);
}
...
...
hw/display/cirrus_vga.c
浏览文件 @
5643706a
...
...
@@ -2917,7 +2917,7 @@ static void isa_cirrus_vga_realizefn(DeviceState *dev, Error **errp)
cirrus_init_common
(
&
d
->
cirrus_vga
,
OBJECT
(
dev
),
CIRRUS_ID_CLGD5430
,
0
,
isa_address_space
(
isadev
),
isa_address_space_io
(
isadev
));
s
->
con
=
graphic_console_init
(
dev
,
s
->
hw_ops
,
s
);
s
->
con
=
graphic_console_init
(
dev
,
0
,
s
->
hw_ops
,
s
);
rom_add_vga
(
VGABIOS_CIRRUS_FILENAME
);
/* XXX ISA-LFB support */
/* FIXME not qdev yet */
...
...
@@ -2963,7 +2963,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
vga_common_init
(
&
s
->
vga
,
OBJECT
(
dev
));
cirrus_init_common
(
s
,
OBJECT
(
dev
),
device_id
,
1
,
pci_address_space
(
dev
),
pci_address_space_io
(
dev
));
s
->
vga
.
con
=
graphic_console_init
(
DEVICE
(
dev
),
s
->
vga
.
hw_ops
,
&
s
->
vga
);
s
->
vga
.
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
s
->
vga
.
hw_ops
,
&
s
->
vga
);
/* setup PCI */
...
...
hw/display/exynos4210_fimd.c
浏览文件 @
5643706a
...
...
@@ -1917,7 +1917,7 @@ static int exynos4210_fimd_init(SysBusDevice *dev)
memory_region_init_io
(
&
s
->
iomem
,
OBJECT
(
s
),
&
exynos4210_fimd_mmio_ops
,
s
,
"exynos4210.fimd"
,
FIMD_REGS_SIZE
);
sysbus_init_mmio
(
dev
,
&
s
->
iomem
);
s
->
console
=
graphic_console_init
(
DEVICE
(
dev
),
&
exynos4210_fimd_ops
,
s
);
s
->
console
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
exynos4210_fimd_ops
,
s
);
return
0
;
}
...
...
hw/display/g364fb.c
浏览文件 @
5643706a
...
...
@@ -484,7 +484,7 @@ static void g364fb_init(DeviceState *dev, G364State *s)
{
s
->
vram
=
g_malloc0
(
s
->
vram_size
);
s
->
con
=
graphic_console_init
(
dev
,
&
g364fb_ops
,
s
);
s
->
con
=
graphic_console_init
(
dev
,
0
,
&
g364fb_ops
,
s
);
memory_region_init_io
(
&
s
->
mem_ctrl
,
NULL
,
&
g364fb_ctrl_ops
,
s
,
"ctrl"
,
0x180000
);
memory_region_init_ram_ptr
(
&
s
->
mem_vram
,
NULL
,
"vram"
,
...
...
hw/display/jazz_led.c
浏览文件 @
5643706a
...
...
@@ -271,7 +271,7 @@ static int jazz_led_init(SysBusDevice *dev)
memory_region_init_io
(
&
s
->
iomem
,
OBJECT
(
s
),
&
led_ops
,
s
,
"led"
,
1
);
sysbus_init_mmio
(
dev
,
&
s
->
iomem
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
jazz_led_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
jazz_led_ops
,
s
);
return
0
;
}
...
...
hw/display/milkymist-vgafb.c
浏览文件 @
5643706a
...
...
@@ -290,7 +290,7 @@ static int milkymist_vgafb_init(SysBusDevice *dev)
"milkymist-vgafb"
,
R_MAX
*
4
);
sysbus_init_mmio
(
dev
,
&
s
->
regs_region
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
vgafb_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
vgafb_ops
,
s
);
return
0
;
}
...
...
hw/display/omap_lcdc.c
浏览文件 @
5643706a
...
...
@@ -406,7 +406,7 @@ struct omap_lcd_panel_s *omap_lcdc_init(MemoryRegion *sysmem,
memory_region_init_io
(
&
s
->
iomem
,
NULL
,
&
omap_lcdc_ops
,
s
,
"omap.lcdc"
,
0x100
);
memory_region_add_subregion
(
sysmem
,
base
,
&
s
->
iomem
);
s
->
con
=
graphic_console_init
(
NULL
,
&
omap_ops
,
s
);
s
->
con
=
graphic_console_init
(
NULL
,
0
,
&
omap_ops
,
s
);
return
s
;
}
hw/display/pl110.c
浏览文件 @
5643706a
...
...
@@ -464,7 +464,7 @@ static int pl110_initfn(SysBusDevice *sbd)
sysbus_init_mmio
(
sbd
,
&
s
->
iomem
);
sysbus_init_irq
(
sbd
,
&
s
->
irq
);
qdev_init_gpio_in
(
dev
,
pl110_mux_ctrl_set
,
1
);
s
->
con
=
graphic_console_init
(
dev
,
&
pl110_gfx_ops
,
s
);
s
->
con
=
graphic_console_init
(
dev
,
0
,
&
pl110_gfx_ops
,
s
);
return
0
;
}
...
...
hw/display/pxa2xx_lcd.c
浏览文件 @
5643706a
...
...
@@ -1013,7 +1013,7 @@ PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem,
"pxa2xx-lcd-controller"
,
0x00100000
);
memory_region_add_subregion
(
sysmem
,
base
,
&
s
->
iomem
);
s
->
con
=
graphic_console_init
(
NULL
,
&
pxa2xx_ops
,
s
);
s
->
con
=
graphic_console_init
(
NULL
,
0
,
&
pxa2xx_ops
,
s
);
surface
=
qemu_console_surface
(
s
->
con
);
switch
(
surface_bits_per_pixel
(
surface
))
{
...
...
hw/display/qxl.c
浏览文件 @
5643706a
...
...
@@ -2069,7 +2069,7 @@ static int qxl_init_primary(PCIDevice *dev)
portio_list_set_flush_coalesced
(
qxl_vga_port_list
);
portio_list_add
(
qxl_vga_port_list
,
pci_address_space_io
(
dev
),
0x3b0
);
vga
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
qxl_ops
,
qxl
);
vga
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
qxl_ops
,
qxl
);
qemu_spice_display_init_common
(
&
qxl
->
ssd
);
rc
=
qxl_init_common
(
qxl
);
...
...
@@ -2094,7 +2094,7 @@ static int qxl_init_secondary(PCIDevice *dev)
qxl
->
vga
.
vram_size
);
vmstate_register_ram
(
&
qxl
->
vga
.
vram
,
&
qxl
->
pci
.
qdev
);
qxl
->
vga
.
vram_ptr
=
memory_region_get_ram_ptr
(
&
qxl
->
vga
.
vram
);
qxl
->
vga
.
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
qxl_ops
,
qxl
);
qxl
->
vga
.
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
qxl_ops
,
qxl
);
return
qxl_init_common
(
qxl
);
}
...
...
hw/display/sm501.c
浏览文件 @
5643706a
...
...
@@ -1449,5 +1449,5 @@ void sm501_init(MemoryRegion *address_space_mem, uint32_t base,
}
/* create qemu graphic console */
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
sm501_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
sm501_ops
,
s
);
}
hw/display/ssd0303.c
浏览文件 @
5643706a
...
...
@@ -299,7 +299,7 @@ static int ssd0303_init(I2CSlave *i2c)
{
ssd0303_state
*
s
=
SSD0303
(
i2c
);
s
->
con
=
graphic_console_init
(
DEVICE
(
i2c
),
&
ssd0303_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
i2c
),
0
,
&
ssd0303_ops
,
s
);
qemu_console_resize
(
s
->
con
,
96
*
MAGNIFY
,
16
*
MAGNIFY
);
return
0
;
}
...
...
hw/display/ssd0323.c
浏览文件 @
5643706a
...
...
@@ -342,7 +342,7 @@ static int ssd0323_init(SSISlave *dev)
s
->
col_end
=
63
;
s
->
row_end
=
79
;
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
ssd0323_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
ssd0323_ops
,
s
);
qemu_console_resize
(
s
->
con
,
128
*
MAGNIFY
,
64
*
MAGNIFY
);
qdev_init_gpio_in
(
&
dev
->
qdev
,
ssd0323_cd
,
1
);
...
...
hw/display/tc6393xb.c
浏览文件 @
5643706a
...
...
@@ -587,7 +587,7 @@ TC6393xbState *tc6393xb_init(MemoryRegion *sysmem, uint32_t base, qemu_irq irq)
memory_region_add_subregion
(
sysmem
,
base
+
0x100000
,
&
s
->
vram
);
s
->
scr_width
=
480
;
s
->
scr_height
=
640
;
s
->
con
=
graphic_console_init
(
NULL
,
&
tc6393xb_gfx_ops
,
s
);
s
->
con
=
graphic_console_init
(
NULL
,
0
,
&
tc6393xb_gfx_ops
,
s
);
return
s
;
}
hw/display/tcx.c
浏览文件 @
5643706a
...
...
@@ -602,14 +602,14 @@ static int tcx_init1(SysBusDevice *dev)
&
s
->
vram_mem
,
vram_offset
,
size
);
sysbus_init_mmio
(
dev
,
&
s
->
vram_cplane
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
tcx24_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
tcx24_ops
,
s
);
}
else
{
/* THC 8 bit (dummy) */
memory_region_init_io
(
&
s
->
thc8
,
OBJECT
(
s
),
&
dummy_ops
,
s
,
"tcx.thc8"
,
TCX_THC_NREGS_8
);
sysbus_init_mmio
(
dev
,
&
s
->
thc8
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
&
tcx_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
&
tcx_ops
,
s
);
}
qemu_console_resize
(
s
->
con
,
s
->
width
,
s
->
height
);
...
...
hw/display/vga-isa-mm.c
浏览文件 @
5643706a
...
...
@@ -135,7 +135,7 @@ int isa_vga_mm_init(hwaddr vram_base,
vga_common_init
(
&
s
->
vga
,
NULL
);
vga_mm_init
(
s
,
vram_base
,
ctrl_base
,
it_shift
,
address_space
);
s
->
vga
.
con
=
graphic_console_init
(
NULL
,
s
->
vga
.
hw_ops
,
s
);
s
->
vga
.
con
=
graphic_console_init
(
NULL
,
0
,
s
->
vga
.
hw_ops
,
s
);
vga_init_vbe
(
&
s
->
vga
,
NULL
,
address_space
);
return
0
;
...
...
hw/display/vga-isa.c
浏览文件 @
5643706a
...
...
@@ -67,7 +67,7 @@ static void vga_isa_realizefn(DeviceState *dev, Error **errp)
isa_mem_base
+
0x000a0000
,
vga_io_memory
,
1
);
memory_region_set_coalescing
(
vga_io_memory
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
s
->
hw_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
s
->
hw_ops
,
s
);
vga_init_vbe
(
s
,
OBJECT
(
dev
),
isa_address_space
(
isadev
));
/* ROM BIOS */
...
...
hw/display/vga-pci.c
浏览文件 @
5643706a
...
...
@@ -151,7 +151,7 @@ static int pci_std_vga_initfn(PCIDevice *dev)
vga_init
(
s
,
OBJECT
(
dev
),
pci_address_space
(
dev
),
pci_address_space_io
(
dev
),
true
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
s
->
hw_ops
,
s
);
s
->
con
=
graphic_console_init
(
DEVICE
(
dev
),
0
,
s
->
hw_ops
,
s
);
/* XXX: VGA_RAM_SIZE must be a power of two */
pci_register_bar
(
&
d
->
dev
,
0
,
PCI_BASE_ADDRESS_MEM_PREFETCH
,
&
s
->
vram
);
...
...
hw/display/vmware_vga.c
浏览文件 @
5643706a
...
...
@@ -1199,7 +1199,7 @@ static void vmsvga_init(DeviceState *dev, struct vmsvga_state_s *s,
s
->
scratch_size
=
SVGA_SCRATCH_SIZE
;
s
->
scratch
=
g_malloc
(
s
->
scratch_size
*
4
);
s
->
vga
.
con
=
graphic_console_init
(
dev
,
&
vmsvga_ops
,
s
);
s
->
vga
.
con
=
graphic_console_init
(
dev
,
0
,
&
vmsvga_ops
,
s
);
s
->
fifo_size
=
SVGA_FIFO_SIZE
;
memory_region_init_ram
(
&
s
->
fifo_ram
,
NULL
,
"vmsvga.fifo"
,
s
->
fifo_size
);
...
...
hw/unicore32/puv3.c
浏览文件 @
5643706a
...
...
@@ -98,7 +98,7 @@ static void puv3_load_kernel(const char *kernel_filename)
}
/* cheat curses that we have a graphic console, only under ocd console */
graphic_console_init
(
NULL
,
&
no_ops
,
NULL
);
graphic_console_init
(
NULL
,
0
,
&
no_ops
,
NULL
);
}
static
void
puv3_init
(
QEMUMachineInitArgs
*
args
)
...
...
include/ui/console.h
浏览文件 @
5643706a
...
...
@@ -268,7 +268,7 @@ typedef struct GraphicHwOps {
void
(
*
update_interval
)(
void
*
opaque
,
uint64_t
interval
);
}
GraphicHwOps
;
QemuConsole
*
graphic_console_init
(
DeviceState
*
dev
,
QemuConsole
*
graphic_console_init
(
DeviceState
*
dev
,
uint32_t
head
,
const
GraphicHwOps
*
ops
,
void
*
opaque
);
...
...
@@ -277,11 +277,12 @@ void graphic_hw_invalidate(QemuConsole *con);
void
graphic_hw_text_update
(
QemuConsole
*
con
,
console_ch_t
*
chardata
);
QemuConsole
*
qemu_console_lookup_by_index
(
unsigned
int
index
);
QemuConsole
*
qemu_console_lookup_by_device
(
DeviceState
*
dev
);
QemuConsole
*
qemu_console_lookup_by_device
(
DeviceState
*
dev
,
uint32_t
head
);
bool
qemu_console_is_visible
(
QemuConsole
*
con
);
bool
qemu_console_is_graphic
(
QemuConsole
*
con
);
bool
qemu_console_is_fixedsize
(
QemuConsole
*
con
);
int
qemu_console_get_index
(
QemuConsole
*
con
);
uint32_t
qemu_console_get_head
(
QemuConsole
*
con
);
int
qemu_console_get_width
(
QemuConsole
*
con
,
int
fallback
);
int
qemu_console_get_height
(
QemuConsole
*
con
,
int
fallback
);
...
...
ui/console.c
浏览文件 @
5643706a
...
...
@@ -124,6 +124,7 @@ struct QemuConsole {
/* Graphic console state. */
Object
*
device
;
uint32_t
head
;
const
GraphicHwOps
*
hw_ops
;
void
*
hw
;
...
...
@@ -1179,6 +1180,8 @@ static QemuConsole *new_console(DisplayState *ds, console_type_t console_type)
s
=
QEMU_CONSOLE
(
obj
);
object_property_add_link
(
obj
,
"device"
,
TYPE_DEVICE
,
(
Object
**
)
&
s
->
device
,
&
local_err
);
object_property_add_uint32_ptr
(
obj
,
"head"
,
&
s
->
head
,
&
local_err
);
if
(
!
active_console
||
((
active_console
->
console_type
!=
GRAPHIC_CONSOLE
)
&&
(
console_type
==
GRAPHIC_CONSOLE
)))
{
...
...
@@ -1569,7 +1572,7 @@ DisplayState *init_displaystate(void)
return
display_state
;
}
QemuConsole
*
graphic_console_init
(
DeviceState
*
dev
,
QemuConsole
*
graphic_console_init
(
DeviceState
*
dev
,
uint32_t
head
,
const
GraphicHwOps
*
hw_ops
,
void
*
opaque
)
{
...
...
@@ -1587,6 +1590,8 @@ QemuConsole *graphic_console_init(DeviceState *dev,
if
(
dev
)
{
object_property_set_link
(
OBJECT
(
s
),
OBJECT
(
dev
),
"device"
,
&
local_err
);
object_property_set_int
(
OBJECT
(
s
),
head
,
"head"
,
&
local_err
);
}
s
->
surface
=
qemu_create_displaysurface
(
width
,
height
);
...
...
@@ -1601,10 +1606,11 @@ QemuConsole *qemu_console_lookup_by_index(unsigned int index)
return
consoles
[
index
];
}
QemuConsole
*
qemu_console_lookup_by_device
(
DeviceState
*
dev
)
QemuConsole
*
qemu_console_lookup_by_device
(
DeviceState
*
dev
,
uint32_t
head
)
{
Error
*
local_err
=
NULL
;
Object
*
obj
;
uint32_t
h
;
int
i
;
for
(
i
=
0
;
i
<
nb_consoles
;
i
++
)
{
...
...
@@ -1613,9 +1619,15 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev)
}
obj
=
object_property_get_link
(
OBJECT
(
consoles
[
i
]),
"device"
,
&
local_err
);
if
(
DEVICE
(
obj
)
==
dev
)
{
return
consoles
[
i
];
if
(
DEVICE
(
obj
)
!=
dev
)
{
continue
;
}
h
=
object_property_get_int
(
OBJECT
(
consoles
[
i
]),
"head"
,
&
local_err
);
if
(
h
!=
head
)
{
continue
;
}
return
consoles
[
i
];
}
return
NULL
;
}
...
...
@@ -1649,6 +1661,14 @@ int qemu_console_get_index(QemuConsole *con)
return
con
?
con
->
index
:
-
1
;
}
uint32_t
qemu_console_get_head
(
QemuConsole
*
con
)
{
if
(
con
==
NULL
)
{
con
=
active_console
;
}
return
con
?
con
->
head
:
-
1
;
}
int
qemu_console_get_width
(
QemuConsole
*
con
,
int
fallback
)
{
if
(
con
==
NULL
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录