diff options
author | mcgreer%netscape.com <devnull@localhost> | 2000-10-11 00:56:32 +0000 |
---|---|---|
committer | mcgreer%netscape.com <devnull@localhost> | 2000-10-11 00:56:32 +0000 |
commit | d23ced6f90f7322252c90974149a0a8b08c2619f (patch) | |
tree | 5aa260499a535f673ff61722f253dc8977271e75 | |
parent | d640359cde873e30417590c7a45868aa169677e8 (diff) | |
download | nss-hg-d23ced6f90f7322252c90974149a0a8b08c2619f.tar.gz |
add a new function, SECU_TextFileToItem, for reading text files.
-rw-r--r-- | security/nss/cmd/lib/secutil.c | 43 | ||||
-rw-r--r-- | security/nss/cmd/lib/secutil.h | 1 |
2 files changed, 39 insertions, 5 deletions
diff --git a/security/nss/cmd/lib/secutil.c b/security/nss/cmd/lib/secutil.c index 5e74afadf..3d27d5ca2 100644 --- a/security/nss/cmd/lib/secutil.c +++ b/security/nss/cmd/lib/secutil.c @@ -1031,6 +1031,40 @@ SECU_FileToItem(SECItem *dst, PRFileDesc *src) PRFileInfo info; PRInt32 numBytes; PRStatus prStatus; + + if (src == PR_STDIN) + return secu_StdinToItem(dst); + + prStatus = PR_GetOpenFileInfo(src, &info); + + if (prStatus != PR_SUCCESS) { + PORT_SetError(SEC_ERROR_IO); + return SECFailure; + } + + /* XXX workaround for 3.1, not all utils zero dst before sending */ + dst->data = 0; + if (!SECITEM_AllocItem(NULL, dst, info.size)) + goto loser; + + numBytes = PR_Read(src, dst->data, info.size); + if (numBytes != info.size) { + PORT_SetError(SEC_ERROR_IO); + goto loser; + } + + return SECSuccess; +loser: + SECITEM_FreeItem(dst, PR_FALSE); + return SECFailure; +} + +SECStatus +SECU_TextFileToItem(SECItem *dst, PRFileDesc *src) +{ + PRFileInfo info; + PRInt32 numBytes; + PRStatus prStatus; unsigned char *buf; if (src == PR_STDIN) @@ -1053,11 +1087,10 @@ SECU_FileToItem(SECItem *dst, PRFileDesc *src) goto loser; } - /* XXX workaround for 3.1, function needs to take a "chop" arg - while (buf[numBytes-1] == '\r' || - buf[numBytes-1] == '\n' || - buf[numBytes-1] == '\0') numBytes--; - */ + if (buf[numBytes-1] == '\n') numBytes--; +#ifdef _WINDOWS + if (buf[numBytes-1] == '\r') numBytes--; +#endif /* XXX workaround for 3.1, not all utils zero dst before sending */ dst->data = 0; diff --git a/security/nss/cmd/lib/secutil.h b/security/nss/cmd/lib/secutil.h index 17f22cc4c..b35bd8434 100644 --- a/security/nss/cmd/lib/secutil.h +++ b/security/nss/cmd/lib/secutil.h @@ -193,6 +193,7 @@ extern const char * SECU_Strerror(PRErrorCode errNum); /* Read the contents of a file into a SECItem */ extern SECStatus SECU_FileToItem(SECItem *dst, PRFileDesc *src); +extern SECStatus SECU_TextFileToItem(SECItem *dst, PRFileDesc *src); /* Read in a DER from a file, may be ascii */ extern SECStatus |