//
// aegis - project change supervisor
// Copyright (C) 1994, 1999, 2001, 2003-2006, 2008 Peter Miller
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// .
//
#include
#include
#include
#include
#include
#include
input_env::~input_env()
{
}
static const char *
safe_getenv(const char *s)
{
const char *cp = getenv(s);
return (cp ? cp : "");
}
input_env::input_env(const nstring &arg) :
gname(arg),
base(safe_getenv(arg.c_str())),
pos(0)
{
}
input
input_env_open(const char *name)
{
//
// You need the CRLF filter, otherwise bizzare things happen on
// DOS (or DOS-like) operating systems.
//
input temp(new input_env(name));
return new input_crlf(temp);
}
long
input_env::read_inner(void *data, size_t len)
{
if (pos >= base.size())
return 0;
size_t nbytes = base.size() - pos;
if (nbytes > len)
nbytes = len;
memcpy(data, base.c_str() + pos, nbytes);
pos += nbytes;
return nbytes;
}
long
input_env::ftell_inner()
{
return pos;
}
nstring
input_env::name()
{
return gname;
}
long
input_env::length()
{
return base.size();
}