summaryrefslogtreecommitdiffstats
path: root/private/crt32/iostream/istrlong.cxx
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/crt32/iostream/istrlong.cxx
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/crt32/iostream/istrlong.cxx')
-rw-r--r--private/crt32/iostream/istrlong.cxx63
1 files changed, 63 insertions, 0 deletions
diff --git a/private/crt32/iostream/istrlong.cxx b/private/crt32/iostream/istrlong.cxx
new file mode 100644
index 000000000..1a701da0b
--- /dev/null
+++ b/private/crt32/iostream/istrlong.cxx
@@ -0,0 +1,63 @@
+/***
+* istrlong.cxx - definitions for istream class operator>>(long) member function
+*
+* Copyright (c) 1991-1992, Microsoft Corporation. All rights reserved.
+*
+*Purpose:
+* Definitions of operator>>(long) member function(s) for istream class.
+* [AT&T C++]
+*
+*Revision History:
+* 09-26-91 KRS Created. Split off from istream.cxx for granularity.
+* 01-06-92 KRS Added check of errno.
+* 12-30-92 KRS Fix indirection problem with **endptr.
+*
+*******************************************************************************/
+
+#include <cruntime.h>
+#include <internal.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <errno.h>
+#include <iostream.h>
+#pragma hdrstop
+
+// CONSIDER: validify this maximum length
+#define MAXLONGSIZ 16
+
+/***
+*istream& istream::operator>>(long& n) - extract long
+*
+*Purpose:
+* Extract long value from stream
+*
+*Entry:
+* n = value to update
+*
+*Exit:
+* n updated, or ios::failbit & n=LONG_MAX/LONG_MIN on overflow/underflow
+*
+*Exceptions:
+* Stream error on entry or value out of range
+*
+*******************************************************************************/
+istream& istream::operator>>(long& n)
+{
+_WINSTATIC char ibuffer[MAXLONGSIZ];
+ char ** endptr = (char**)NULL;
+ if (ipfx(0)) {
+ n = strtol(ibuffer, endptr, getint(ibuffer));
+ if (errno==ERANGE)
+ {
+ state |= ios::failbit;
+ }
+#if 0
+ if (**endptr)
+ {
+ //UNDONE: put back any unread characters, if possible
+ }
+#endif
+ isfx();
+ }
+return *this;
+}