summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormcgreer%netscape.com <devnull@localhost>2000-10-11 00:56:32 +0000
committermcgreer%netscape.com <devnull@localhost>2000-10-11 00:56:32 +0000
commitd23ced6f90f7322252c90974149a0a8b08c2619f (patch)
tree5aa260499a535f673ff61722f253dc8977271e75
parentd640359cde873e30417590c7a45868aa169677e8 (diff)
downloadnss-hg-d23ced6f90f7322252c90974149a0a8b08c2619f.tar.gz
add a new function, SECU_TextFileToItem, for reading text files.
-rw-r--r--security/nss/cmd/lib/secutil.c43
-rw-r--r--security/nss/cmd/lib/secutil.h1
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