Commit 56bd194b authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds

uml: driver formatting fixes

Fix a bunch of formatting violations in the drivers:
	return(n) -> return n
	whitespace fixes
	emacs formatting comment removal
	breaking if(foo) return(n) into two lines

There are also a couple of errno use bugs:
	using errno in a printk when the failure put errno into a local variable
	saving errno after a printk, which can change it
Signed-off-by: default avatarJeff Dike <jdike@linux.intel.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b47d2deb
...@@ -158,7 +158,7 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out) ...@@ -158,7 +158,7 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out)
*/ */
err = run_helper_thread(winch_thread, &data, CLONE_FILES, &stack, 0); err = run_helper_thread(winch_thread, &data, CLONE_FILES, &stack, 0);
if(err < 0){ if(err < 0){
printk("fork of winch_thread failed - errno = %d\n", errno); printk("fork of winch_thread failed - errno = %d\n", err);
goto out_close; goto out_close;
} }
......
...@@ -39,11 +39,11 @@ static struct sockaddr_un *new_addr(void *name, int len) ...@@ -39,11 +39,11 @@ static struct sockaddr_un *new_addr(void *name, int len)
sun = um_kmalloc(sizeof(struct sockaddr_un)); sun = um_kmalloc(sizeof(struct sockaddr_un));
if(sun == NULL){ if(sun == NULL){
printk("new_addr: allocation of sockaddr_un failed\n"); printk("new_addr: allocation of sockaddr_un failed\n");
return(NULL); return NULL;
} }
sun->sun_family = AF_UNIX; sun->sun_family = AF_UNIX;
memcpy(sun->sun_path, name, len); memcpy(sun->sun_path, name, len);
return(sun); return sun;
} }
static int connect_to_switch(struct daemon_data *pri) static int connect_to_switch(struct daemon_data *pri)
...@@ -112,7 +112,7 @@ static int connect_to_switch(struct daemon_data *pri) ...@@ -112,7 +112,7 @@ static int connect_to_switch(struct daemon_data *pri)
} }
pri->data_addr = sun; pri->data_addr = sun;
return(fd); return fd;
out_free: out_free:
kfree(sun); kfree(sun);
...@@ -120,7 +120,7 @@ static int connect_to_switch(struct daemon_data *pri) ...@@ -120,7 +120,7 @@ static int connect_to_switch(struct daemon_data *pri)
os_close_file(fd); os_close_file(fd);
out: out:
os_close_file(pri->control); os_close_file(pri->control);
return(err); return err;
} }
static void daemon_user_init(void *data, void *dev) static void daemon_user_init(void *data, void *dev)
...@@ -152,7 +152,7 @@ static void daemon_user_init(void *data, void *dev) ...@@ -152,7 +152,7 @@ static void daemon_user_init(void *data, void *dev)
static int daemon_open(void *data) static int daemon_open(void *data)
{ {
struct daemon_data *pri = data; struct daemon_data *pri = data;
return(pri->fd); return pri->fd;
} }
static void daemon_remove(void *data) static void daemon_remove(void *data)
...@@ -176,12 +176,12 @@ int daemon_user_write(int fd, void *buf, int len, struct daemon_data *pri) ...@@ -176,12 +176,12 @@ int daemon_user_write(int fd, void *buf, int len, struct daemon_data *pri)
{ {
struct sockaddr_un *data_addr = pri->data_addr; struct sockaddr_un *data_addr = pri->data_addr;
return(net_sendto(fd, buf, len, data_addr, sizeof(*data_addr))); return net_sendto(fd, buf, len, data_addr, sizeof(*data_addr));
} }
static int daemon_set_mtu(int mtu, void *data) static int daemon_set_mtu(int mtu, void *data)
{ {
return(mtu); return mtu;
} }
const struct net_user_info daemon_user_info = { const struct net_user_info daemon_user_info = {
...@@ -194,14 +194,3 @@ const struct net_user_info daemon_user_info = { ...@@ -194,14 +194,3 @@ const struct net_user_info daemon_user_info = {
.delete_address = NULL, .delete_address = NULL,
.max_packet = MAX_PACKET - ETH_HEADER_OTHER .max_packet = MAX_PACKET - ETH_HEADER_OTHER
}; };
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
...@@ -34,12 +34,12 @@ static struct sockaddr_in *new_addr(char *addr, unsigned short port) ...@@ -34,12 +34,12 @@ static struct sockaddr_in *new_addr(char *addr, unsigned short port)
sin = um_kmalloc(sizeof(struct sockaddr_in)); sin = um_kmalloc(sizeof(struct sockaddr_in));
if(sin == NULL){ if(sin == NULL){
printk("new_addr: allocation of sockaddr_in failed\n"); printk("new_addr: allocation of sockaddr_in failed\n");
return(NULL); return NULL;
} }
sin->sin_family = AF_INET; sin->sin_family = AF_INET;
sin->sin_addr.s_addr = in_aton(addr); sin->sin_addr.s_addr = in_aton(addr);
sin->sin_port = htons(port); sin->sin_port = htons(port);
return(sin); return sin;
} }
static void mcast_user_init(void *data, void *dev) static void mcast_user_init(void *data, void *dev)
...@@ -107,8 +107,8 @@ static int mcast_open(void *data) ...@@ -107,8 +107,8 @@ static int mcast_open(void *data)
err = -errno; err = -errno;
printk("mcast_open : data bind failed, errno = %d\n", errno); printk("mcast_open : data bind failed, errno = %d\n", errno);
goto out_close; goto out_close;
} }
/* subscribe to the multicast group */ /* subscribe to the multicast group */
mreq.imr_multiaddr.s_addr = sin->sin_addr.s_addr; mreq.imr_multiaddr.s_addr = sin->sin_addr.s_addr;
mreq.imr_interface.s_addr = 0; mreq.imr_interface.s_addr = 0;
...@@ -153,12 +153,12 @@ int mcast_user_write(int fd, void *buf, int len, struct mcast_data *pri) ...@@ -153,12 +153,12 @@ int mcast_user_write(int fd, void *buf, int len, struct mcast_data *pri)
{ {
struct sockaddr_in *data_addr = pri->mcast_addr; struct sockaddr_in *data_addr = pri->mcast_addr;
return(net_sendto(fd, buf, len, data_addr, sizeof(*data_addr))); return net_sendto(fd, buf, len, data_addr, sizeof(*data_addr));
} }
static int mcast_set_mtu(int mtu, void *data) static int mcast_set_mtu(int mtu, void *data)
{ {
return(mtu); return mtu;
} }
const struct net_user_info mcast_user_info = { const struct net_user_info mcast_user_info = {
......
...@@ -42,39 +42,39 @@ static int pcap_open(void *data) ...@@ -42,39 +42,39 @@ static int pcap_open(void *data)
int err; int err;
if(pri->pcap == NULL) if(pri->pcap == NULL)
return(-ENODEV); return -ENODEV;
if(pri->filter != NULL){ if(pri->filter != NULL){
err = dev_netmask(pri->dev, &netmask); err = dev_netmask(pri->dev, &netmask);
if(err < 0){ if(err < 0){
printk("pcap_open : dev_netmask failed\n"); printk("pcap_open : dev_netmask failed\n");
return(-EIO); return -EIO;
} }
pri->compiled = um_kmalloc(sizeof(struct bpf_program)); pri->compiled = um_kmalloc(sizeof(struct bpf_program));
if(pri->compiled == NULL){ if(pri->compiled == NULL){
printk("pcap_open : kmalloc failed\n"); printk("pcap_open : kmalloc failed\n");
return(-ENOMEM); return -ENOMEM;
} }
err = pcap_compile(pri->pcap, err = pcap_compile(pri->pcap,
(struct bpf_program *) pri->compiled, (struct bpf_program *) pri->compiled,
pri->filter, pri->optimize, netmask); pri->filter, pri->optimize, netmask);
if(err < 0){ if(err < 0){
printk("pcap_open : pcap_compile failed - '%s'\n", printk("pcap_open : pcap_compile failed - '%s'\n",
pcap_geterr(pri->pcap)); pcap_geterr(pri->pcap));
return(-EIO); return -EIO;
} }
err = pcap_setfilter(pri->pcap, pri->compiled); err = pcap_setfilter(pri->pcap, pri->compiled);
if(err < 0){ if(err < 0){
printk("pcap_open : pcap_setfilter failed - '%s'\n", printk("pcap_open : pcap_setfilter failed - '%s'\n",
pcap_geterr(pri->pcap)); pcap_geterr(pri->pcap));
return(-EIO); return -EIO;
} }
} }
return(PCAP_FD(pri->pcap)); return PCAP_FD(pri->pcap);
} }
static void pcap_remove(void *data) static void pcap_remove(void *data)
...@@ -114,11 +114,11 @@ int pcap_user_read(int fd, void *buffer, int len, struct pcap_data *pri) ...@@ -114,11 +114,11 @@ int pcap_user_read(int fd, void *buffer, int len, struct pcap_data *pri)
n = pcap_dispatch(pri->pcap, 1, handler, (u_char *) &hdata); n = pcap_dispatch(pri->pcap, 1, handler, (u_char *) &hdata);
if(n < 0){ if(n < 0){
printk("pcap_dispatch failed - %s\n", pcap_geterr(pri->pcap)); printk("pcap_dispatch failed - %s\n", pcap_geterr(pri->pcap));
return(-EIO); return -EIO;
} }
else if(n == 0) else if(n == 0)
return(0); return 0;
return(hdata.len); return hdata.len;
} }
const struct net_user_info pcap_user_info = { const struct net_user_info pcap_user_info = {
...@@ -131,14 +131,3 @@ const struct net_user_info pcap_user_info = { ...@@ -131,14 +131,3 @@ const struct net_user_info pcap_user_info = {
.delete_address = NULL, .delete_address = NULL,
.max_packet = MAX_PACKET - ETH_HEADER_OTHER .max_packet = MAX_PACKET - ETH_HEADER_OTHER
}; };
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
...@@ -47,8 +47,8 @@ int start_io_thread(unsigned long sp, int *fd_out) ...@@ -47,8 +47,8 @@ int start_io_thread(unsigned long sp, int *fd_out)
pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM | SIGCHLD, pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM | SIGCHLD,
NULL); NULL);
if(pid < 0){ if(pid < 0){
printk("start_io_thread - clone failed : errno = %d\n", errno);
err = -errno; err = -errno;
printk("start_io_thread - clone failed : errno = %d\n", errno);
goto out_close; goto out_close;
} }
...@@ -60,16 +60,5 @@ int start_io_thread(unsigned long sp, int *fd_out) ...@@ -60,16 +60,5 @@ int start_io_thread(unsigned long sp, int *fd_out)
kernel_fd = -1; kernel_fd = -1;
*fd_out = -1; *fd_out = -1;
out: out:
return(err); return err;
} }
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
...@@ -121,7 +121,7 @@ static int etap_tramp(char *dev, char *gate, int control_me, ...@@ -121,7 +121,7 @@ static int etap_tramp(char *dev, char *gate, int control_me,
n = os_read_file(control_me, &c, sizeof(c)); n = os_read_file(control_me, &c, sizeof(c));
if(n != sizeof(c)){ if(n != sizeof(c)){
printk("etap_tramp : read of status failed, err = %d\n", -n); printk("etap_tramp : read of status failed, err = %d\n", -n);
return(-EINVAL); return -EINVAL;
} }
if(c != 1){ if(c != 1){
printk("etap_tramp : uml_net failed\n"); printk("etap_tramp : uml_net failed\n");
...@@ -132,7 +132,7 @@ static int etap_tramp(char *dev, char *gate, int control_me, ...@@ -132,7 +132,7 @@ static int etap_tramp(char *dev, char *gate, int control_me,
else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 1)) else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 1))
printk("uml_net didn't exit with status 1\n"); printk("uml_net didn't exit with status 1\n");
} }
return(err); return err;
} }
static int etap_open(void *data) static int etap_open(void *data)
...@@ -142,20 +142,21 @@ static int etap_open(void *data) ...@@ -142,20 +142,21 @@ static int etap_open(void *data)
int data_fds[2], control_fds[2], err, output_len; int data_fds[2], control_fds[2], err, output_len;
err = tap_open_common(pri->dev, pri->gate_addr); err = tap_open_common(pri->dev, pri->gate_addr);
if(err) return(err); if(err)
return err;
err = os_pipe(data_fds, 0, 0); err = os_pipe(data_fds, 0, 0);
if(err < 0){ if(err < 0){
printk("data os_pipe failed - err = %d\n", -err); printk("data os_pipe failed - err = %d\n", -err);
return(err); return err;
} }
err = os_pipe(control_fds, 1, 0); err = os_pipe(control_fds, 1, 0);
if(err < 0){ if(err < 0){
printk("control os_pipe failed - err = %d\n", -err); printk("control os_pipe failed - err = %d\n", -err);
return(err); return err;
} }
err = etap_tramp(pri->dev_name, pri->gate_addr, control_fds[0], err = etap_tramp(pri->dev_name, pri->gate_addr, control_fds[0],
control_fds[1], data_fds[0], data_fds[1]); control_fds[1], data_fds[0], data_fds[1]);
output_len = page_size(); output_len = page_size();
...@@ -171,13 +172,13 @@ static int etap_open(void *data) ...@@ -171,13 +172,13 @@ static int etap_open(void *data)
if(err < 0){ if(err < 0){
printk("etap_tramp failed - err = %d\n", -err); printk("etap_tramp failed - err = %d\n", -err);
return(err); return err;
} }
pri->data_fd = data_fds[0]; pri->data_fd = data_fds[0];
pri->control_fd = control_fds[0]; pri->control_fd = control_fds[0];
iter_addresses(pri->dev, etap_open_addr, &pri->control_fd); iter_addresses(pri->dev, etap_open_addr, &pri->control_fd);
return(data_fds[0]); return data_fds[0];
} }
static void etap_close(int fd, void *data) static void etap_close(int fd, void *data)
...@@ -195,7 +196,7 @@ static void etap_close(int fd, void *data) ...@@ -195,7 +196,7 @@ static void etap_close(int fd, void *data)
static int etap_set_mtu(int mtu, void *data) static int etap_set_mtu(int mtu, void *data)
{ {
return(mtu); return mtu;
} }
static void etap_add_addr(unsigned char *addr, unsigned char *netmask, static void etap_add_addr(unsigned char *addr, unsigned char *netmask,
...@@ -204,7 +205,8 @@ static void etap_add_addr(unsigned char *addr, unsigned char *netmask, ...@@ -204,7 +205,8 @@ static void etap_add_addr(unsigned char *addr, unsigned char *netmask,
struct ethertap_data *pri = data; struct ethertap_data *pri = data;
tap_check_ips(pri->gate_addr, addr); tap_check_ips(pri->gate_addr, addr);
if(pri->control_fd == -1) return; if(pri->control_fd == -1)
return;
etap_open_addr(addr, netmask, &pri->control_fd); etap_open_addr(addr, netmask, &pri->control_fd);
} }
...@@ -213,7 +215,8 @@ static void etap_del_addr(unsigned char *addr, unsigned char *netmask, ...@@ -213,7 +215,8 @@ static void etap_del_addr(unsigned char *addr, unsigned char *netmask,
{ {
struct ethertap_data *pri = data; struct ethertap_data *pri = data;
if(pri->control_fd == -1) return; if(pri->control_fd == -1)
return;
etap_close_addr(addr, netmask, &pri->control_fd); etap_close_addr(addr, netmask, &pri->control_fd);
} }
...@@ -227,14 +230,3 @@ const struct net_user_info ethertap_user_info = { ...@@ -227,14 +230,3 @@ const struct net_user_info ethertap_user_info = {
.delete_address = etap_del_addr, .delete_address = etap_del_addr,
.max_packet = MAX_PACKET - ETH_HEADER_ETHERTAP .max_packet = MAX_PACKET - ETH_HEADER_ETHERTAP
}; };
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
...@@ -37,7 +37,8 @@ static void tuntap_add_addr(unsigned char *addr, unsigned char *netmask, ...@@ -37,7 +37,8 @@ static void tuntap_add_addr(unsigned char *addr, unsigned char *netmask,
struct tuntap_data *pri = data; struct tuntap_data *pri = data;
tap_check_ips(pri->gate_addr, addr); tap_check_ips(pri->gate_addr, addr);
if((pri->fd == -1) || pri->fixed_config) return; if((pri->fd == -1) || pri->fixed_config)
return;
open_addr(addr, netmask, pri->dev_name); open_addr(addr, netmask, pri->dev_name);
} }
...@@ -46,7 +47,8 @@ static void tuntap_del_addr(unsigned char *addr, unsigned char *netmask, ...@@ -46,7 +47,8 @@ static void tuntap_del_addr(unsigned char *addr, unsigned char *netmask,
{ {
struct tuntap_data *pri = data; struct tuntap_data *pri = data;
if((pri->fd == -1) || pri->fixed_config) return; if((pri->fd == -1) || pri->fixed_config)
return;
close_addr(addr, netmask, pri->dev_name); close_addr(addr, netmask, pri->dev_name);
} }
...@@ -58,7 +60,7 @@ struct tuntap_pre_exec_data { ...@@ -58,7 +60,7 @@ struct tuntap_pre_exec_data {
static void tuntap_pre_exec(void *arg) static void tuntap_pre_exec(void *arg)
{ {
struct tuntap_pre_exec_data *data = arg; struct tuntap_pre_exec_data *data = arg;
dup2(data->stdout, 1); dup2(data->stdout, 1);
os_close_file(data->close_me); os_close_file(data->close_me);
} }
...@@ -83,7 +85,8 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote, ...@@ -83,7 +85,8 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote,
pid = run_helper(tuntap_pre_exec, &data, argv, NULL); pid = run_helper(tuntap_pre_exec, &data, argv, NULL);
if(pid < 0) return(-pid); if(pid < 0)
return -pid;
os_close_file(remote); os_close_file(remote);
...@@ -114,16 +117,16 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote, ...@@ -114,16 +117,16 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote,
cmsg = CMSG_FIRSTHDR(&msg); cmsg = CMSG_FIRSTHDR(&msg);
if(cmsg == NULL){ if(cmsg == NULL){
printk("tuntap_open_tramp : didn't receive a message\n"); printk("tuntap_open_tramp : didn't receive a message\n");
return(-EINVAL); return -EINVAL;
} }
if((cmsg->cmsg_level != SOL_SOCKET) || if((cmsg->cmsg_level != SOL_SOCKET) ||
(cmsg->cmsg_type != SCM_RIGHTS)){ (cmsg->cmsg_type != SCM_RIGHTS)){
printk("tuntap_open_tramp : didn't receive a descriptor\n"); printk("tuntap_open_tramp : didn't receive a descriptor\n");
return(-EINVAL); return -EINVAL;
} }
*fd_out = ((int *) CMSG_DATA(cmsg))[0]; *fd_out = ((int *) CMSG_DATA(cmsg))[0];
os_set_exec_close(*fd_out, 1); os_set_exec_close(*fd_out, 1);
return(0); return 0;
} }
static int tuntap_open(void *data) static int tuntap_open(void *data)
...@@ -135,7 +138,7 @@ static int tuntap_open(void *data) ...@@ -135,7 +138,7 @@ static int tuntap_open(void *data)
err = tap_open_common(pri->dev, pri->gate_addr); err = tap_open_common(pri->dev, pri->gate_addr);
if(err < 0) if(err < 0)
return(err); return err;
if(pri->fixed_config){ if(pri->fixed_config){
pri->fd = os_open_file("/dev/net/tun", pri->fd = os_open_file("/dev/net/tun",
...@@ -143,7 +146,7 @@ static int tuntap_open(void *data) ...@@ -143,7 +146,7 @@ static int tuntap_open(void *data)
if(pri->fd < 0){ if(pri->fd < 0){
printk("Failed to open /dev/net/tun, err = %d\n", printk("Failed to open /dev/net/tun, err = %d\n",
-pri->fd); -pri->fd);
return(pri->fd); return pri->fd;
} }
memset(&ifr, 0, sizeof(ifr)); memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TAP | IFF_NO_PI; ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
...@@ -160,7 +163,7 @@ static int tuntap_open(void *data) ...@@ -160,7 +163,7 @@ static int tuntap_open(void *data)
if(err < 0){ if(err < 0){
printk("tuntap_open : os_pipe failed - err = %d\n", printk("tuntap_open : os_pipe failed - err = %d\n",
-err); -err);
return(err); return err;
} }
buffer = get_output_buffer(&len); buffer = get_output_buffer(&len);
...@@ -175,7 +178,7 @@ static int tuntap_open(void *data) ...@@ -175,7 +178,7 @@ static int tuntap_open(void *data)
printk("%s", output); printk("%s", output);
free_output_buffer(buffer); free_output_buffer(buffer);
printk("tuntap_open_tramp failed - err = %d\n", -err); printk("tuntap_open_tramp failed - err = %d\n", -err);
return(err); return err;
} }
pri->dev_name = uml_strdup(buffer); pri->dev_name = uml_strdup(buffer);
...@@ -187,7 +190,7 @@ static int tuntap_open(void *data) ...@@ -187,7 +190,7 @@ static int tuntap_open(void *data)
iter_addresses(pri->dev, open_addr, pri->dev_name); iter_addresses(pri->dev, open_addr, pri->dev_name);
} }
return(pri->fd); return pri->fd;
} }
static void tuntap_close(int fd, void *data) static void tuntap_close(int fd, void *data)
...@@ -202,7 +205,7 @@ static void tuntap_close(int fd, void *data) ...@@ -202,7 +205,7 @@ static void tuntap_close(int fd, void *data)
static int tuntap_set_mtu(int mtu, void *data) static int tuntap_set_mtu(int mtu, void *data)
{ {
return(mtu); return mtu;
} }
const struct net_user_info tuntap_user_info = { const struct net_user_info tuntap_user_info = {
...@@ -215,14 +218,3 @@ const struct net_user_info tuntap_user_info = { ...@@ -215,14 +218,3 @@ const struct net_user_info tuntap_user_info = {
.delete_address = tuntap_del_addr, .delete_address = tuntap_del_addr,
.max_packet = MAX_PACKET .max_packet = MAX_PACKET
}; };
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment