patch-2.4.27 linux-2.4.27/drivers/s390/net/ctcmain.c
Next file: linux-2.4.27/drivers/s390/net/netiucv.c
Previous file: linux-2.4.27/drivers/s390/char/tapechar.c
Back to the patch index
Back to the overall index
- Lines: 115
- Date:
2004-08-07 16:26:05.395377225 -0700
- Orig file:
linux-2.4.26/drivers/s390/net/ctcmain.c
- Orig date:
2004-02-18 05:36:31.000000000 -0800
diff -urN linux-2.4.26/drivers/s390/net/ctcmain.c linux-2.4.27/drivers/s390/net/ctcmain.c
@@ -2934,6 +2934,7 @@
file->private_data = kmalloc(CTRL_BUFSIZE, GFP_KERNEL);
if (file->private_data == NULL)
return -ENOMEM;
+ *(char *)file->private_data = '\0';
MOD_INC_USE_COUNT;
return 0;
}
@@ -2999,6 +3000,7 @@
ctc_priv *privptr;
ssize_t ret = 0;
char *p = sbuf;
+ loff_t pos = *off;
int l;
if (!(dev = find_netdev_by_ino(ino)))
@@ -3008,19 +3010,19 @@
privptr = (ctc_priv *)dev->priv;
- if (file->f_pos == 0)
+ if (!*sbuf || pos == 0)
sprintf(sbuf, "%d\n", privptr->channel[READ]->max_bufsize);
l = strlen(sbuf);
p = sbuf;
- if (file->f_pos < l) {
- p += file->f_pos;
+ if (pos == (unsigned)pos && pos < l) {
+ p += pos;
l = strlen(p);
ret = (count > l) ? l : count;
if (copy_to_user(buf, p, ret))
return -EFAULT;
+ *off = pos + ret;
}
- file->f_pos += ret;
return ret;
}
@@ -3084,6 +3086,7 @@
ctc_priv *privptr;
ssize_t ret = 0;
char *p = sbuf;
+ loff_t pos = *off;
int l;
if (!(dev = find_netdev_by_ino(ino)))
@@ -3093,19 +3096,19 @@
privptr = (ctc_priv *)dev->priv;
- if (file->f_pos == 0)
+ if (!*sbus || pos == 0)
sprintf(sbuf, "0x%02x\n", loglevel);
l = strlen(sbuf);
p = sbuf;
- if (file->f_pos < l) {
- p += file->f_pos;
+ if (pos == (unsigned)pos && pos < l) {
+ p += pos;
l = strlen(p);
ret = (count > l) ? l : count;
if (copy_to_user(buf, p, ret))
return -EFAULT;
+ *off = pos + ret;
}
- file->f_pos += ret;
return ret;
}
@@ -3116,6 +3119,7 @@
file->private_data = kmalloc(STATS_BUFSIZE, GFP_KERNEL);
if (file->private_data == NULL)
return -ENOMEM;
+ *(char *)file->private_data = '\0';
MOD_INC_USE_COUNT;
return 0;
}
@@ -3155,6 +3159,7 @@
ctc_priv *privptr;
ssize_t ret = 0;
char *p = sbuf;
+ loff_t pos = *off;
int l;
if (!(dev = find_netdev_by_ino(ino)))
@@ -3164,7 +3169,7 @@
privptr = (ctc_priv *)dev->priv;
- if (file->f_pos == 0) {
+ if (!*sbus || pos == 0) {
p += sprintf(p, "Device FSM state: %s\n",
fsm_getstate_str(privptr->fsm));
p += sprintf(p, "RX channel FSM state: %s\n",
@@ -3186,14 +3191,14 @@
}
l = strlen(sbuf);
p = sbuf;
- if (file->f_pos < l) {
- p += file->f_pos;
+ if (pos == (unsigned)pos && pos < l) {
+ p += pos;
l = strlen(p);
ret = (count > l) ? l : count;
if (copy_to_user(buf, p, ret))
return -EFAULT;
+ *off = pos + ret;
}
- file->f_pos += ret;
return ret;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)