From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001
From: Daniel Baumann <daniel.baumann@progress-linux.org>
Date: Sun, 7 Apr 2024 21:33:14 +0200
Subject: Adding upstream version 115.7.0esr.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
---
 nsprpub/lib/prstreams/prstrms.h | 154 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 154 insertions(+)
 create mode 100644 nsprpub/lib/prstreams/prstrms.h

(limited to 'nsprpub/lib/prstreams/prstrms.h')

diff --git a/nsprpub/lib/prstreams/prstrms.h b/nsprpub/lib/prstreams/prstrms.h
new file mode 100644
index 0000000000..113a41627e
--- /dev/null
+++ b/nsprpub/lib/prstreams/prstrms.h
@@ -0,0 +1,154 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Robin J. Maxwell 11-22-96
+ * Fredrik Roubert <roubert@google.com> 2010-07-23
+ * Matt Austern <austern@google.com> 2010-07-23
+ */
+
+#ifndef _PRSTRMS_H
+#define _PRSTRMS_H
+
+#include <cstddef>
+#include <istream>
+#include <ostream>
+#include <streambuf>
+
+#include "prio.h"
+
+#ifdef _MSC_VER
+// http://support.microsoft.com/kb/q168958/
+class PR_IMPLEMENT(std::_Mutex);
+class PR_IMPLEMENT(std::ios_base);
+#endif
+
+
+class PR_IMPLEMENT(PRfilebuf): public std::streambuf
+{
+public:
+    PRfilebuf();
+    PRfilebuf(PRFileDesc *fd);
+    PRfilebuf(PRFileDesc *fd, char_type *ptr, std::streamsize len);
+    virtual ~PRfilebuf();
+
+    bool is_open() const {
+        return _fd != NULL;
+    }
+
+    PRfilebuf *open(
+        const char *name,
+        std::ios_base::openmode flags,
+        PRIntn mode);
+    PRfilebuf *attach(PRFileDesc *fd);
+    PRfilebuf *close();
+
+protected:
+    virtual std::streambuf *setbuf(char_type *ptr, std::streamsize len);
+    virtual pos_type seekoff(
+        off_type offset,
+        std::ios_base::seekdir dir,
+        std::ios_base::openmode flags);
+    virtual pos_type seekpos(
+        pos_type pos,
+        std::ios_base::openmode flags) {
+        return seekoff(pos, std::ios_base::beg, flags);
+    }
+    virtual int sync();
+    virtual int_type underflow();
+    virtual int_type overflow(int_type c = traits_type::eof());
+
+    // TODO: Override pbackfail(), showmanyc(), uflow(), xsgetn(), and xsputn().
+
+private:
+    bool allocate();
+    void setb(char_type *buf_base, char_type *buf_end, bool user_buf);
+
+    PRFileDesc *_fd;
+    bool _opened;
+    bool _allocated;
+    bool _unbuffered;
+    bool _user_buf;
+    char_type *_buf_base;
+    char_type *_buf_end;
+};
+
+
+class PR_IMPLEMENT(PRifstream): public std::istream
+{
+public:
+    PRifstream();
+    PRifstream(PRFileDesc *fd);
+    PRifstream(PRFileDesc *fd, char_type *ptr, std::streamsize len);
+    PRifstream(const char *name, openmode flags = in, PRIntn mode = 0);
+    virtual ~PRifstream();
+
+    PRfilebuf *rdbuf() const {
+        return &_filebuf;
+    }
+    bool is_open() const {
+        return _filebuf.is_open();
+    }
+
+    void open(const char *name, openmode flags = in, PRIntn mode = 0);
+    void attach(PRFileDesc *fd);
+    void close();
+
+private:
+    mutable PRfilebuf _filebuf;
+};
+
+
+class PR_IMPLEMENT(PRofstream): public std::ostream
+{
+public:
+    PRofstream();
+    PRofstream(PRFileDesc *fd);
+    PRofstream(PRFileDesc *fd, char_type *ptr, std::streamsize len);
+    PRofstream(const char *name, openmode flags = out, PRIntn mode = 0);
+    virtual ~PRofstream();
+
+    PRfilebuf *rdbuf() const {
+        return &_filebuf;
+    }
+    bool is_open() const {
+        return _filebuf.is_open();
+    }
+
+    void open(const char *name, openmode flags = out, PRIntn mode = 0);
+    void attach(PRFileDesc *fd);
+    void close();
+
+private:
+    mutable PRfilebuf _filebuf;
+};
+
+
+class PR_IMPLEMENT(PRfstream): public std::iostream
+{
+public:
+    PRfstream();
+    PRfstream(PRFileDesc *fd);
+    PRfstream(PRFileDesc *fd, char_type *ptr, std::streamsize len);
+    PRfstream(const char *name, openmode flags = in | out, PRIntn mode = 0);
+    virtual ~PRfstream();
+
+    PRfilebuf *rdbuf() const {
+        return &_filebuf;
+    }
+    bool is_open() const {
+        return _filebuf.is_open();
+    }
+
+    void open(const char *name, openmode flags = in | out, PRIntn mode = 0);
+    void attach(PRFileDesc *fd);
+    void close();
+
+private:
+    mutable PRfilebuf _filebuf;
+};
+
+
+#endif /* _PRSTRMS_H */
-- 
cgit v1.2.3