From 61ffc94c9242b77f82d7c95412dc8c82a5bb3e9d Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 21 Mar 2003 02:21:56 -0800 Subject: [PATCH] [PATCH] fix proc handling in sis, siimageand slc90e66 --- drivers/ide/pci/siimage.c | 7 ++++++- drivers/ide/pci/sis5513.c | 6 +++++- drivers/ide/pci/slc90e66.c | 9 +++++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index c3d39c9534854..e710a5e39d974 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c @@ -55,6 +55,7 @@ static char * print_siimage_get_info (char *buf, struct pci_dev *dev, int index) static int siimage_get_info (char *buffer, char **addr, off_t offset, int count) { char *p = buffer; + int len; u16 i; p += sprintf(p, "\n"); @@ -62,7 +63,11 @@ static int siimage_get_info (char *buffer, char **addr, off_t offset, int count) struct pci_dev *dev = siimage_devs[i]; p = print_siimage_get_info(p, dev, i); } - return p-buffer; /* => must be less than 4k! */ + /* p - buffer must be less than 4k! */ + len = (p - buffer) - offset; + *addr = buffer + offset; + + return len > count ? count : len; } #endif /* defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS) */ diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index a39f70ca6cdf2..f68cdd8d68841 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c @@ -424,6 +424,7 @@ static char* get_slaves_info(char* buffer) static int sis_get_info (char *buffer, char **addr, off_t offset, int count) { char *p = buffer; + int len; u8 reg; u16 reg2, reg3; @@ -494,7 +495,10 @@ static int sis_get_info (char *buffer, char **addr, off_t offset, int count) p = get_masters_info(p); p = get_slaves_info(p); - return p-buffer; + len = (p - buffer) - offset; + *addr = buffer + offset; + + return len > count ? count : len; } #endif /* defined(DISPLAY_SIS_TIMINGS) && defined(CONFIG_PROC_FS) */ diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index fb308546f89a6..c53108324468b 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c @@ -34,8 +34,9 @@ static struct pci_dev *bmide_dev; static int slc90e66_get_info (char *buffer, char **addr, off_t offset, int count) { char *p = buffer; + int len; unsigned long bibma = pci_resource_start(bmide_dev, 4); - u16 reg40 = 0, psitre = 0, reg42 = 0, ssitre = 0; + u16 reg40 = 0, psitre = 0, reg42 = 0, ssitre = 0; u8 c0 = 0, c1 = 0; u8 reg44 = 0, reg47 = 0, reg48 = 0, reg4a = 0, reg4b = 0; @@ -110,7 +111,11 @@ static int slc90e66_get_info (char *buffer, char **addr, off_t offset, int count * FIXME.... Add configuration junk data....blah blah...... */ - return p-buffer; /* => must be less than 4k! */ + /* p - buffer must be less than 4k! */ + len = (p - buffer) - offset; + *addr = buffer + offset; + + return len > count ? count : len; } #endif /* defined(DISPLAY_SLC90E66_TIMINGS) && defined(CONFIG_PROC_FS) */ -- 2.53.0