mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-11 00:36:20 +02:00
64 lines
1.2 KiB
C++
64 lines
1.2 KiB
C++
|
#include "shared.hh"
|
||
|
#include "local-store.hh"
|
||
|
#include "util.hh"
|
||
|
|
||
|
using namespace nix;
|
||
|
|
||
|
|
||
|
/* !!! Mostly cut&pasted from util/archive.hh */
|
||
|
/* Use buffered reads. */
|
||
|
static unsigned int readInt(int fd)
|
||
|
{
|
||
|
unsigned char buf[8];
|
||
|
readFull(fd, buf, sizeof(buf));
|
||
|
if (buf[4] || buf[5] || buf[6] || buf[7])
|
||
|
throw Error("implementation cannot deal with > 32-bit integers");
|
||
|
return
|
||
|
buf[0] |
|
||
|
(buf[1] << 8) |
|
||
|
(buf[2] << 16) |
|
||
|
(buf[3] << 24);
|
||
|
}
|
||
|
|
||
|
|
||
|
void processConnection(int fdFrom, int fdTo)
|
||
|
{
|
||
|
store = openStore();
|
||
|
|
||
|
unsigned int magic = readInt(fdFrom);
|
||
|
if (magic != 0x6e697864) throw Error("protocol mismatch");
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void run(Strings args)
|
||
|
{
|
||
|
bool slave = false;
|
||
|
bool daemon = false;
|
||
|
|
||
|
for (Strings::iterator i = args.begin(); i != args.end(); ) {
|
||
|
string arg = *i++;
|
||
|
if (arg == "--slave") slave = true;
|
||
|
}
|
||
|
|
||
|
if (slave)
|
||
|
processConnection(STDIN_FILENO, STDOUT_FILENO);
|
||
|
|
||
|
else if (daemon)
|
||
|
throw Error("daemon mode not implemented");
|
||
|
|
||
|
else
|
||
|
throw Error("must be run in either --slave or --daemon mode");
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void printHelp()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
string programId = "nix-store";
|