aboutsummaryrefslogtreecommitdiff
#pragma once

#include "types.hh"


namespace nix {


/* Abstract destination of binary data. */
struct Sink 
{
    virtual ~Sink() { }
    virtual void operator () (const unsigned char * data, size_t len) = 0;
};


/* A buffered abstract sink. */
struct BufferedSink : Sink
{
    size_t bufSize, bufPos;
    unsigned char * buffer;

    BufferedSink(size_t bufSize = 32 * 1024)
        : bufSize(bufSize), bufPos(0), buffer(0) { }
    ~BufferedSink();

    void operator () (const unsigned char * data, size_t len);
    
    void flush();
    
    virtual void write(const unsigned char * data, size_t len) = 0;
};


/* Abstract source of binary data. */
struct Source
{
    virtual ~Source() { }
    
    /* Store exactly ‘len’ bytes in the buffer pointed to by ‘data’.
       It blocks until all the requested data is available, or throws
       an error if it is not going to be available.   */
    void operator () (unsigned char * data, size_t len);

    /* Store up to ‘len’ in the buffer pointed to by ‘data’, and
       return the number of bytes stored.  If blocks until at least
       one byte is available. */
    virtual size_t read(unsigned char * data, size_t len) = 0;
};


/* A buffered abstract source. */
struct BufferedSource : Source
{
    size_t bufSize, bufPosIn, bufPosOut;
    unsigned char * buffer;

    BufferedSource(size_t bufSize = 32 * 1024)
        : bufSize(bufSize), bufPosIn(0), bufPosOut(0), buffer(0) { }
    ~BufferedSource();
    
    size_t read(unsigned char * data, size_t len);
    
    /* Underlying read call, to be overridden. */
    virtual size_t readUnbuffered(unsigned char * data, size_t len) = 0;

    bool hasData();
};


/* A sink that writes data to a file descriptor. */
struct FdSink : BufferedSink
{
    int fd;
    bool warn;
    size_t written;

    FdSink() : fd(-1), warn(false), written(0) { }
    FdSink(int fd) : fd(fd), warn(false), written(0) { }
    ~FdSink();
    
    void write(const unsigned char * data, size_t len);
};


/* A source that reads data from a file descriptor. */
struct FdSource : BufferedSource
{
    int fd;
    FdSource() : fd(-1) { }
    FdSource(int fd) : fd(fd) { }
    size_t readUnbuffered(unsigned char * data, size_t len);
};


/* A sink that writes data to a string. */
struct StringSink : Sink
{
    string s;
    void operator () (const unsigned char * data, size_t len);
};


/* A source that reads data from a string. */
struct StringSource : Source
{
    const string & s;
    size_t pos;
    StringSource(const string & _s) : s(_s), pos(0) { }
    size_t read(unsigned char * data, size_t len);    
};


void writePadding(size_t len, Sink & sink);
void writeInt(unsigned int n, Sink & sink);
void writeLongLong(unsigned long long n, Sink & sink);
void writeString(const unsigned char * buf, size_t len, Sink & sink);
void writeString(const string & s, Sink & sink);
template<class T> void writeStrings(const T & ss, Sink & sink);

void readPadding(size_t len, Source & source);
unsigned int readInt(Source & source);
unsigned long long readLongLong(Source & source);
size_t readString(unsigned char * buf, size_t max, Source & source);
string readString(Source & source);
template<class T> T readStrings(Source & source);


MakeError(SerialisationError, Error)


}
5d0b0ac80d93d8fc99087'>gnu: racket: Update to 8.14....* gnu/packages/racket.scm (%racket-version): Update to 8.14. (racket)[inputs]<compatibility, db, drracket, gui, htdp, math> <parser-tools, rackunit, redex, scribble, snip, typed-racket> <string-constants, web-server>: Update hashes. * gnu/packages/chez.scm (chez-scheme-for-racket): Fix comment. Change-Id: I1bcfd8b4db178e42b200077ab909af37907264d0 Signed-off-by: Christopher Baines <mail@cbaines.net> Philip McGrath 2024-07-09gnu: chez-scheme-for-racket: Fix building on riscv64-linux....* gnu/packages/chez.scm (target-chez-arch): When building for riscv64-linux return #f instead of the desired string, which isn't supported everywhere yet. Change-Id: Ie1b076ad4845129c5b98c3ae01f98a86784c13ad Efraim Flashner 2024-07-09gnu: chez-scheme: Backport test fix....The backported commit fixes crashes when signals are delivered to non-Scheme threads, including GC worker threads and threads created by foreign libraries. This appears to have been the cause of the intermittent test failures we have experienced. * gnu/packages/patches/chez-scheme-backport-signal.patch: New patch. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/chez-scheme.scm (chez-scheme)[source]<patches>: Use it. (chez-scheme-for-racket, chez-scheme): Enable tests. Change-Id: Ifd87ca0d1707ef6ad067d883772a5b42803ead94 Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Philip McGrath 2024-07-09gnu: racket: Update to 8.13....* gnu/packages/patches/racket-backport-8.12-chez-configure.patch: Delete obsolete patch. * gnu/local.mk (dist_patch_DATA): Remove it. * gnu/packages/racket.scm (%racket-origin)[patches]: Likewise. * gnu/packages/chez.scm (chez-scheme-for-racket): Update to 10.0.1-pre-release.1. * gnu/packages/racket.scm (%racket-version): Update to 8.13. (racket)[inputs]<data, deinprogramm, drracket, eopl, expeditor, gui> <htdp, math, net-cookies, option-contract, pict, plai, plot, rackunit> <redex, scribble, snip, typed-racket, srfi, web-server>: Update hashes. Change-Id: I2d7b6e79a5a4e775d9b918b39fb688b484bb9f93 Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Philip McGrath 2024-04-11gnu: chez-scheme: Bootstrap from source....* gnu/packages/chez.scm (chez-scheme)[source]<snippet>: Also unbundle pre-built boot files. (chez-scheme-bootstrap-bootfiles): Stop inheriting from 'chez-scheme'. [native-inputs]: Add 'zuo', 'chez-nanopass-bootstrap', and either 'chez-scheme-for-racket' or, for cross builds, 'chez-scheme'. [build-system]: Change to gnu-build-system. [arguments]: Change to run 'configure' and then bootstrap via `make re.boot` or, for cross builds, `make cross.boot` [synopsis, description]: Update accordingly. (chez-scheme-for-racket-bootstrap-bootfiles)[synopsis]: Write "boot files" as two words in prose. [description]: Likewise. * gnu/packages/racket.scm: Update comments. Change-Id: I55d9b57090ecaca0aa2ab19c2c3ebae2243a9173 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2024-04-11gnu: chez-scheme: Update and simplify machine-type handling....Since Chez Scheme 10.0.0 supports all of the backends added in Racket's branch, the complexity of '%chez-features-table' is no longer needed. Ideally, even more of this logic could be maintained upstream, but this change will simplify maintenance in the mean time. * gnu/packages/chez.scm (target-chez-arch): Recognize loongarch64. (chez-upsteam-features-for-system): Remove function. (%chez-features-table): Replace with ... (define-machine-types, %machine-types): ... this new macro and variable, using the list copied directly from the Chez Scheme source code. (nix-system->pbarch-machine-type): Update docstring, since pbarch machine types are supported upstream as of Chez Scheme 10.0.0. (racket-cs-native-supported-system?): Replace with ... (nix-system->native-chez-machine-type): ... this new function, implemented using '%machine-types'. (chez-scheme-for-racket): Update accordingly. (chez-scheme-for-racket-bootstrap-bootfiles): Likewise. * gnu/packages/racket.scm (racket-vm-cs): Likewise. Change-Id: I46efebaf48cce388075ab4873c16a6f5f9692bb7 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2024-04-11gnu: Fix uses of deprecated chez-scheme-for-system....(chez-srfi, chez-web, chez-sockets, chez-matchable, chez-irregex) (chez-fmt, chez-mit, chez-scmutils)[native-inputs]: Use 'chez-scheme' instead of 'chez-scheme-for-system'. * gnu/packages/emacs-xyz.scm (emacs-geiser-chez)[inputs]: Likewise. * gnu/packages/loko.scm (loko-scheme)[native-inputs]: Likewise. Change-Id: Ib4d713fecbb41cbbe75f67980b9e22cc9bd673dd Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2024-04-11gnu: Deprecate chez-scheme-for-system.in favor of chez-scheme....Chez Scheme 10.0.0 includes all of the additional platform support developed on the Racket branch. * gnu/packages/chez.scm (chez-scheme-for-system): Deprecate it. Change-Id: I7e11c8c4d95f41ff63e5c52be664a537556393c1 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2024-04-11gnu: chez-scheme: Update to 10.0.0....* gnu/packages/patches/chez-scheme-bin-sh.patch: Refresh patch. * gnu/packages/patches/chez-scheme-backport-configure.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/chez.scm (chez-scheme): Update to 10.0.0. Inherit from 'chez-scheme-for-racket'. [source]<patches>: Use "chez-scheme-backport-configure.patch". <snippet>: Also unbundle Zuo. [native-inputs, native-search-paths, outputs, arguments] [supported-systems]: Inherit from 'chez-scheme-for-racket'. [inputs]: Likewise, replacing the bootfile package and adding libx11. [description]: Update based on the User's Guide, release notes, man page, and README file. (chez-scheme-bootstrap-bootfiles)[supported-systems]: All systems are now supported. (chez-scheme-for-system): Return 'chez-scheme', since it now supports all systems. Change-Id: I287ff66f385f20e69c1411abcc94f19dd45870c5 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2024-04-11gnu: chez-scheme: Reorganize package definitions....A future commit will change 'chez-scheme' to inherit from 'chez-scheme-for-racket', so 'chez-scheme-for-racket' will need to be defined before 'chez-scheme'. In an attempt to produce better diffs, this commit re-orders the definitions while keeping their contents exactly the same. * gnu/packages/chez.scm (chez-scheme): Move below 'chez-scheme-for-racket'. (chez-scheme-bootstrap-bootfiles): Move below 'chez-scheme-for-racket-bootstrap-bootfiles'. Change-Id: Ie088abea2b44329f9d8399fbfb95c51d8912b05e Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2024-04-11gnu: racket: Update to 8.12....All of Racket's changes to Chez Scheme have been merged upstream. They are the basis for the Chez Scheme 10.0.0 release. For the forseeable future, Racket will continue to depend on a specific pre-release version of Chez Scheme as part of Racket's "ABI": see upstream discussion at <https://racket.discourse.group/t/2739/3>. * gnu/packages/chez.scm (chez-configure): Change to define a phase to run the Chez Scheme configure script, renaming the old definition to ... (configure-chezschemelibdirs): ... this new variable. (chez-srfi, chez-matchable, chez-irregex, chez-fmt, chez-mit) (chez-scmutils)[arguments]<#:phases>: Update accordingly. (unpack-nanopass+stex): Replace with ... (unpack-nanopass): ... this new variable. (chez-scheme)[arguments]<#:phases>: Inline old definition of 'unpack-nanopass+stex' to facilitate transition. (chez-scheme-for-racket): Stop inheriting from 'chez-scheme'. [version]: Update to 9.9.9-pre-release.23. [outputs]: Add "debug" output. [native-inputs]: Add 'texlive-enumitem' for native builds. For cross builds, omit TeX-related inputs and add this-package:doc. [inputs, native-search-paths, home-page]: Rewrite without inheritance. [arguments]: Likewise, and adjust for upstream changes. [synopsis, description]: Rewrite to reflect upstreaming of Racket's changes to Chez Scheme. (chez-scheme-for-racket-bootstrap-bootfiles): Stop inheriting from 'chez-scheme-bootstrap-bootfiles'. [arguments]: Rewrite without inheritance. Use `make cross.boot` instead of broken experimental script for cross builds. [home-page]: Use bootstrapping Racket package instead of archived Git repository. [description]: Rewrite to reflect upstreaming of Racket's changes to Chez Scheme. * gnu/packages/patches/racket-backport-8.11-layered-docs.patch: Delete file. * gnu/packages/patches/racket-backport-8.12-chez-configure.patch: New file. * gnu/local.mk (dist_patch_DATA): Update accordingly. * gnu/packages/racket.scm (%racket-origin)[patches]: Likewise. [snippet]: Also unbundle Zuo and potential pre-built boot files. (%racket-version): Update to 8.12. (racket-vm-cs)[arguments]<#:phases>: Use 'unpack-nanopass' instead of 'unpack-nanopass+stex'. (racket)[inputs]<data, deinprogramm, drracket, gui, htdp, net-cookies> <pict, plot, rackunit, redex, scribble, typed-racket, string-constants> <web-server>: Update hashes. <quickscript>: Likewise, and remove obsolete snippet. Change-Id: I11e7f44be37c60c91b03d246a50e75e418bd0672 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath