diff options
author | Jeremy Allison <jra@samba.org> | 2002-04-19 17:59:13 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-04-19 17:59:13 +0000 |
commit | 16e1ff4f3a09a1207e5c7b1d26c0fbe961de76d1 (patch) | |
tree | 14ad3aa75b6ac388815dba00d8d7af56b4487c23 /source3 | |
parent | 4f4d25d3e14a297f8ee31917f4307667f7b8a46b (diff) | |
download | samba-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)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/safe_string.h | 3 | ||||
-rw-r--r-- | source3/printing/lpq_parse.c | 32 |
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); |