summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-04-19 17:59:13 +0000
committerJeremy Allison <jra@samba.org>2002-04-19 17:59:13 +0000
commit16e1ff4f3a09a1207e5c7b1d26c0fbe961de76d1 (patch)
tree14ad3aa75b6ac388815dba00d8d7af56b4487c23
parent4f4d25d3e14a297f8ee31917f4307667f7b8a46b (diff)
downloadsamba-16e1ff4f3a09a1207e5c7b1d26c0fbe961de76d1.tar.gz
samba-16e1ff4f3a09a1207e5c7b1d26c0fbe961de76d1.tar.bz2
samba-16e1ff4f3a09a1207e5c7b1d26c0fbe961de76d1.zip
Added Martin's lpq parse fixes from 2.2.
Jeremy. (This used to be commit 3853234c2649c501e9876f940f802be86cb6383d)
-rw-r--r--source3/include/safe_string.h3
-rw-r--r--source3/printing/lpq_parse.c32
2 files changed, 15 insertions, 20 deletions
diff --git a/source3/include/safe_string.h b/source3/include/safe_string.h
index 1ee97833c5..118c2302bd 100644
--- a/source3/include/safe_string.h
+++ b/source3/include/safe_string.h
@@ -53,6 +53,9 @@
#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
#define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
+#define fstrterminate(d) (((d)[sizeof(fstring)-1]) = '\0')
+#define pstrterminate(d) (((d)[sizeof(pstring)-1]) = '\0')
+
#define wpstrcpy(d,s) safe_strcpy_w((d),(s),sizeof(wpstring))
#define wpstrcat(d,s) safe_strcat_w((d),(s),sizeof(wpstring))
#define wfstrcpy(d,s) safe_strcpy_w((d),(s),sizeof(wfstring))
diff --git a/source3/printing/lpq_parse.c b/source3/printing/lpq_parse.c
index 13b87045cd..9d8b1cc2aa 100644
--- a/source3/printing/lpq_parse.c
+++ b/source3/printing/lpq_parse.c
@@ -149,21 +149,17 @@ static BOOL parse_lpq_bsd(char *line,print_queue_struct *buf,BOOL first)
StrnCpy(buf->fs_file,tok[FILETOK],sizeof(buf->fs_file)-1);
if ((FILETOK + 1) != TOTALTOK) {
- int bufsize;
int i;
- bufsize = sizeof(buf->fs_file) - strlen(buf->fs_file) - 1;
-
for (i = (FILETOK + 1); i < TOTALTOK; i++) {
- safe_strcat(buf->fs_file," ",bufsize);
- safe_strcat(buf->fs_file,tok[i],bufsize - 1);
- bufsize = sizeof(buf->fs_file) - strlen(buf->fs_file) - 1;
- if (bufsize <= 0) {
- break;
- }
+ /* FIXME: Using fstrcat rather than other means is a bit
+ * inefficient; this might be a problem for enormous queues with
+ * many fields. */
+ fstrcat(buf->fs_file, " ");
+ fstrcat(buf->fs_file, tok[i]);
}
/* Ensure null termination. */
- buf->fs_file[sizeof(buf->fs_file)-1] = '\0';
+ fstrterminate(buf->fs_file);
}
#ifdef PRIOTOK
@@ -282,21 +278,17 @@ static BOOL parse_lpq_lprng(char *line,print_queue_struct *buf,BOOL first)
StrnCpy(buf->fs_file,tokarr[LPRNG_FILETOK],sizeof(buf->fs_file)-1);
if ((LPRNG_FILETOK + 1) != LPRNG_TOTALTOK) {
- int bufsize;
int i;
- bufsize = sizeof(buf->fs_file) - strlen(buf->fs_file) - 1;
-
for (i = (LPRNG_FILETOK + 1); i < LPRNG_TOTALTOK; i++) {
- safe_strcat(buf->fs_file," ",bufsize);
- safe_strcat(buf->fs_file,tokarr[i],bufsize - 1);
- bufsize = sizeof(buf->fs_file) - strlen(buf->fs_file) - 1;
- if (bufsize <= 0) {
- break;
- }
+ /* FIXME: Using fstrcat rather than other means is a bit
+ * inefficient; this might be a problem for enormous queues with
+ * many fields. */
+ fstrcat(buf->fs_file, " ");
+ fstrcat(buf->fs_file, tokarr[i]);
}
/* Ensure null termination. */
- buf->fs_file[sizeof(buf->fs_file)-1] = '\0';
+ fstrterminate(buf->fs_file);
}
return(True);