nsprpub/pr/src/cplus/rcfileio.h

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /*
     7 ** Class definitions for normal and special file I/O (ref: prio.h)
     8 */
    10 #if defined(_RCFILEIO_H)
    11 #else
    12 #define _RCFILEIO_H
    14 #include "rcio.h"
    15 #include "rctime.h"
    17 /*
    18 ** One would normally create a concrete class, such as RCFileIO, but then
    19 ** pass around more generic references, ie., RCIO.
    20 **
    21 ** This subclass of RCIO hides (makes private) the methods that are not
    22 ** applicable to normal files.
    23 */
    25 class RCFileInfo;
    27 class PR_IMPLEMENT(RCFileIO): public RCIO
    28 {
    29 public:
    30     RCFileIO();
    31     virtual ~RCFileIO();
    33     virtual PRInt64     Available();
    34     virtual PRStatus    Close();
    35     static  PRStatus    Delete(const char *name);
    36     virtual PRStatus    FileInfo(RCFileInfo* info) const;
    37     static  PRStatus    FileInfo(const char *name, RCFileInfo* info);
    38     virtual PRStatus    Fsync();
    39     virtual PRStatus    Open(const char *name, PRIntn flags, PRIntn mode);
    40     virtual PRInt32     Read(void *buf, PRSize amount);
    41     virtual PRInt64     Seek(PRInt64 offset, RCIO::Whence how);
    42     virtual PRInt32     Write(const void *buf, PRSize amount);
    43     virtual PRInt32     Writev(
    44                             const PRIOVec *iov, PRSize size,
    45                             const RCInterval& timeout);
    47 private:
    49     /* These methods made private are unavailable for this object */
    50     RCFileIO(const RCFileIO&);
    51     void operator=(const RCFileIO&);
    53     RCIO*       Accept(RCNetAddr* addr, const RCInterval& timeout);
    54     PRInt32     AcceptRead(
    55                     RCIO **newfd, RCNetAddr **address, void *buffer,
    56                     PRSize amount, const RCInterval& timeout);
    57     PRStatus    Bind(const RCNetAddr& addr);
    58     PRStatus    Connect(const RCNetAddr& addr, const RCInterval& timeout);
    59     PRStatus    GetLocalName(RCNetAddr *addr) const;
    60     PRStatus    GetPeerName(RCNetAddr *addr) const;
    61     PRStatus    GetSocketOption(PRSocketOptionData *data) const;
    62     PRStatus    Listen(PRIntn backlog);
    63     PRInt16     Poll(PRInt16 in_flags, PRInt16 *out_flags);
    64     PRInt32     Recv(
    65                     void *buf, PRSize amount, PRIntn flags,
    66                     const RCInterval& timeout);
    67     PRInt32     Recvfrom(
    68                     void *buf, PRSize amount, PRIntn flags,
    69                     RCNetAddr* addr, const RCInterval& timeout);
    70     PRInt32     Send(
    71                     const void *buf, PRSize amount, PRIntn flags,
    72                     const RCInterval& timeout);
    73     PRInt32     Sendto(
    74                     const void *buf, PRSize amount, PRIntn flags,
    75                     const RCNetAddr& addr,
    76                     const RCInterval& timeout);
    77     PRStatus    SetSocketOption(const PRSocketOptionData *data);
    78     PRStatus    Shutdown(RCIO::ShutdownHow how);
    79     PRInt32     TransmitFile(
    80                     RCIO *source, const void *headers,
    81                     PRSize hlen, RCIO::FileDisposition flags,
    82                     const RCInterval& timeout);
    83 public:
    85     /*
    86     ** The following function return a valid normal file object,
    87     ** Such objects can be used for scanned input and console output.
    88     */
    89     typedef enum {
    90         input = PR_StandardInput,
    91         output = PR_StandardOutput,
    92         error = PR_StandardError
    93     } SpecialFile;
    95     static RCIO *GetSpecialFile(RCFileIO::SpecialFile special);
    97 };  /* RCFileIO */
    99 class PR_IMPLEMENT(RCFileInfo): public RCBase
   100 {
   101 public:
   102     typedef enum {
   103         file = PR_FILE_FILE,
   104         directory = PR_FILE_DIRECTORY,
   105         other = PR_FILE_OTHER
   106     } FileType;
   108 public:
   109     RCFileInfo();
   110     RCFileInfo(const RCFileInfo&);
   112     virtual ~RCFileInfo();
   114     PRInt64 Size() const;
   115     RCTime CreationTime() const;
   116     RCTime ModifyTime() const;
   117     RCFileInfo::FileType Type() const;
   119 friend PRStatus RCFileIO::FileInfo(RCFileInfo*) const;
   120 friend PRStatus RCFileIO::FileInfo(const char *name, RCFileInfo*);
   122 private:
   123     PRFileInfo64 info;
   124 };  /* RCFileInfo */
   126 inline RCFileInfo::RCFileInfo(): RCBase() { }
   127 inline PRInt64 RCFileInfo::Size() const { return info.size; }
   129 #endif /* defined(_RCFILEIO_H) */

mercurial