Ejemplo n.º 1
0
FILE *
SessionImpl::OpenBZip2File (/*[in]*/ const PathName & path)
{
    AutoBZ2 autoBz2 (BZ2_bzopen(path.Get(), "rb"));
    if (autoBz2.Get() == 0)
    {
        FATAL_MIKTEX_ERROR ("OpenBZip2File",
                            T_("BZ2_bzopen() failed for some."),
                            path.Get());
    }
    FILE * pFiles[2];
    Pipe (pFiles, PIPE_SIZE);
    try
    {
        auto_ptr<BZip2ReaderThreadArg> pArg (new BZip2ReaderThreadArg);
        pArg->bzin = autoBz2.Get();
        pArg->fileout = pFiles[1];
        auto_ptr<Thread> pThread (Thread::Start(BZip2ReaderThread, pArg.get()));
        pArg.release ();
        autoBz2.Detach ();
        return (pFiles[0]);
    }
    catch (const exception &)
    {
        if (pFiles[0] != 0)
        {
            fclose (pFiles[0]);
        }
        if (pFiles[1] != 0)
        {
            fclose (pFiles[1]);
        }
        throw;
    }
}
Ejemplo n.º 2
0
MIKTEXCALLBACK
GZipReaderThread (/*[in]*/ void * pv)
{
    try
    {
        auto_ptr<GZipReaderThreadArg>
        pArg (reinterpret_cast<GZipReaderThreadArg*>(pv));
        MIKTEX_ASSERT (pArg->gzin != 0);
        MIKTEX_ASSERT (pArg->fileout != 0);
        AutoGZ autoCloseGZip2Stream (pArg->gzin);
        FileStream autoCloseOutput (pArg->fileout);
        char buf[PIPE_SIZE];
        int len = 0;
        while (! ferror(pArg->fileout)
                && (len = gzread(pArg->gzin, buf, ARRAY_SIZE(buf))) > 0)
        {
            fwrite (buf, 1, len, pArg->fileout);
        }
        if (len < 0)
        {
            FATAL_MIKTEX_ERROR ("GZipReaderThread",
                                T_("gzread() failed for some reason."),
                                0);
        }
        if (ferror(pArg->fileout))
        {
            FATAL_CRT_ERROR ("fwrite", 0);
        }
    }
    catch (const exception &)
    {
    }
}
Ejemplo n.º 3
0
MIKTEXCALLBACK
BZip2ReaderThread (/*[in]*/ void * pv)
{
    try
    {
        auto_ptr<BZip2ReaderThreadArg>
        pArg (reinterpret_cast<BZip2ReaderThreadArg*>(pv));
        MIKTEX_ASSERT (pArg->bzin != 0);
        MIKTEX_ASSERT (pArg->fileout != 0);
        AutoBZ2 autoCloseBZip2Stream (pArg->bzin);
        FileStream autoCloseOutput (pArg->fileout);
        char buf[PIPE_SIZE];
        int len;
        while (! ferror(pArg->fileout)
                && (len = BZ2_bzread(pArg->bzin, buf, ARRAY_SIZE(buf))) > 0)
        {
            fwrite (buf, 1, len, pArg->fileout);
        }
        int bzerr;
        BZ2_bzerror (pArg->bzin, &bzerr);
        if (bzerr != BZ_OK)
        {
            FATAL_MIKTEX_ERROR ("BZip2ReaderThread",
                                T_("BZ2_bzread() failed for some reason."),
                                0);
        }
        if (ferror(pArg->fileout))
        {
            FATAL_CRT_ERROR ("fwrite", 0);
        }
    }
    catch (const exception &)
    {
    }
}
Ejemplo n.º 4
0
size_t Iterator::Count(Environment &env, const Value &criteria)
{
	Signal &sig = env.GetSignal();
	if (IsInfinite()) {
		SetError_InfiniteNotAllowed(sig);
		return 0;
	}
	size_t cnt = 0;
	if (criteria.Is_function()) {
		const Function *pFunc = criteria.GetFunction();
		Value value;
		while (Next(env, value)) {
			AutoPtr<Argument> pArg(new Argument(pFunc));
			if (!pArg->StoreValue(env, value)) return 0;
			Value valueFlag = pFunc->Eval(env, *pArg);
			if (sig.IsSignalled()) return 0;
			if (valueFlag.GetBoolean()) cnt++;
		}
		if (sig.IsSignalled()) return 0;
	} else {
		Value value;
		while (Next(env, value)) {
			int cmp = Value::Compare(env, value, criteria);
			if (sig.IsSignalled()) return 0;
			if (cmp == 0) cnt++;
		}
	}
	return cnt;
}
Ejemplo n.º 5
0
Tcl_Obj *Object_interp::ConvToTclObj(Environment &env, Signal &sig, const Value &value)
{
	if (value.IsInvalid()) {
		return ::Tcl_NewStringObj("", 0);
	} else if (value.Is_boolean()) {
		return ::Tcl_NewBooleanObj(value.GetBoolean());
	} else if (value.Is_binary()) {
		const Binary &binary = value.GetBinary();
		return ::Tcl_NewByteArrayObj(
			reinterpret_cast<const unsigned char *>(binary.data()), static_cast<int>(binary.size()));
	} else if (value.Is_number()) {
		Number num = value.GetNumber();
		if (static_cast<Number>(static_cast<long>(num)) == num) {
			return ::Tcl_NewLongObj(static_cast<long>(num));
		} else {
			return ::Tcl_NewDoubleObj(num);
		}
	} else if (value.Is_list()) {
		int objc;
		Tcl_Obj **objv = CreateTclObjArray(env, sig, value.GetList(), &objc);
		if (!sig.IsSignalled()) {
			return ::Tcl_NewListObj(objc, objv);
		}
	} else if (value.Is_string()) {
		const char *str = value.GetString();
		return ::Tcl_NewStringObj(str, static_cast<int>(::strlen(str)));
	} else if (value.Is_function()) {
		Handler *pHandler = new Handler(Object_interp::Reference(this),
				Object_function::Reference(Object_function::GetObject(value)));
		String cmdName = NewCommandName();
		::Tcl_CreateCommand(_interp, cmdName.c_str(), CommandProc,
											pHandler, CommandDeleteProc);
		return ::Tcl_NewStringObj(cmdName.c_str(), static_cast<int>(cmdName.size()));
	} else if (value.IsType(VTYPE_variable)) {
		const Object_variable *pObjVariable =
						dynamic_cast<const Object_variable *>(value.GetObject());
		const char *varName = pObjVariable->GetVarName();
		return ::Tcl_NewStringObj(varName, static_cast<int>(::strlen(varName)));
	} else if (value.IsObject()) {
		Object *pObj = value.GetObject();
		const Function *pFunc =
					pObj->LookupFunction(Gura_UserSymbol(__tclname__), ENVREF_Escalate);
		if (pFunc != nullptr) {
			Value valueThis(pObj, VFLAG_NoFundOwner); // reference to self
			AutoPtr<Argument> pArg(new Argument(pFunc));
			pArg->SetValueThis(valueThis);
			Value result = pFunc->Eval(*pObj, *pArg);
			if (!sig.IsSignalled()) {
				return ConvToTclObj(env, sig, result);
			}
		}
	}
	String str = value.ToString(false);
	return ::Tcl_NewStringObj(str.c_str(), static_cast<int>(str.size()));
}
Ejemplo n.º 6
0
 PlugInArg* getPlugInArgByIndex(PlugInArgList* pPial, uint32_t argNum)
 {
    if (pPial == NULL)
    {
       setLastError(SIMPLE_BAD_PARAMS);
       return NULL;
    }
    PlugInArg* pArg(NULL);
    if (!pPial->getArg(argNum, pArg))
    {
       setLastError(SIMPLE_NOT_FOUND);
       return NULL;
    }
    setLastError(SIMPLE_NO_ERROR);
    return pArg;
 }
Ejemplo n.º 7
0
 PlugInArg* getPlugInArgByName(PlugInArgList* pPial, const char* pArgName)
 {
    if (pPial == NULL || pArgName == NULL)
    {
       setLastError(SIMPLE_BAD_PARAMS);
       return NULL;
    }
    std::string argName(pArgName == NULL ? "" : pArgName);
    PlugInArg* pArg(NULL);
    if (!pPial->getArg(argName, pArg))
    {
       setLastError(SIMPLE_NOT_FOUND);
       return NULL;
    }
    setLastError(SIMPLE_NO_ERROR);
    return pArg;
 }
Ejemplo n.º 8
0
//++ ------------------------------------------------------------------------------------
// Details:	Given a set of command argument objects retrieve the argument with the 
//			specified name.
// Type:	Method.
// Args:	vpArg	- (W) A pointer to a command's argument object.
// Return:	True - Argument found.
//			False - Argument not found.
// Throws:	None.
//--
bool CMICmdArgSet::GetArg( const CMIUtilString & vArgName, CMICmdArgValBase *& vpArg ) const
{
	bool bFound = false;
	SetCmdArgs_t::const_iterator it = m_setCmdArgs.begin();
	while( it != m_setCmdArgs.end() )
	{
		CMICmdArgValBase * pArg( *it );
		if( pArg->GetName() == vArgName )
		{
			bFound = true;
			vpArg = pArg;
			break;
		}
		
		// Next
		++it;
	}

	return bFound;
}
Ejemplo n.º 9
0
size_t Iterator::Find(Environment &env, const Value &criteria, Value &value)
{
	Signal &sig = env.GetSignal();
	if (criteria.Is_function()) {
		if (IsInfinite()) {
			SetError_InfiniteNotAllowed(sig);
			return InvalidSize;
		}
		const Function *pFunc = criteria.GetFunction();
		while (Next(env, value)) {
			AutoPtr<Argument> pArg(new Argument(pFunc));
			if (!pArg->StoreValue(env, value)) return InvalidSize;
			Value valueFlag = pFunc->Eval(env, *pArg);
			if (sig.IsSignalled()) return InvalidSize;
			if (valueFlag.GetBoolean()) return GetIndexCur();
		}
		if (sig.IsSignalled()) return InvalidSize;
	} else if (criteria.Is_list() || criteria.Is_iterator()) {
		AutoPtr<Iterator> pIteratorCriteria(criteria.CreateIterator(sig));
		if (sig.IsSignalled()) return InvalidSize;
		if (IsInfinite() && pIteratorCriteria->IsInfinite()) {
			SetError_InfiniteNotAllowed(sig);
			return InvalidSize;
		}
		while (Next(env, value)) {
			Value valueCriteria;
			if (!pIteratorCriteria->Next(env, valueCriteria)) break;
			if (valueCriteria.GetBoolean()) return GetIndexCur();
		}
		return InvalidSize;
	} else {
		while (Next(env, value)) {
			//int cmp = Value::Compare(env, value, criteria);
			//if (sig.IsSignalled()) return InvalidSize;
			//if (cmp == 0) return GetIndexCur();
			if (value.Is(criteria)) return GetIndexCur();
		}
	}
	return InvalidSize;
}
Ejemplo n.º 10
0
//++ ------------------------------------------------------------------------------------
// Details:	Release resources used by *this container object.
// Type:	Method.
// Args:	None.
// Return:	None.
// Throws:	None.
//--
void CMICmdArgSet::Destroy( void )
{
	// Delete command argument objects
	if( !m_setCmdArgs.empty() )
	{
		SetCmdArgs_t::iterator it = m_setCmdArgs.begin();
		while( it != m_setCmdArgs.end() )
		{
			CMICmdArgValBase * pArg( *it );
			delete pArg;
		
			// Next
			++it;
		}
		m_setCmdArgs.clear();
	}

	m_setCmdArgsThatNotValid.clear();
	m_setCmdArgsThatAreMissing.clear();
	m_setCmdArgsNotHandledByCmd.clear();
	m_setCmdArgsMissingInfo.clear();
	m_bIsArgsPresentButNotHandledByCmd = false;
}
Ejemplo n.º 11
0
//-----------------------------------------------------------------------------
// SuffixMgrEntryCustom
//-----------------------------------------------------------------------------
Value SuffixMgrEntryCustom::DoEval(Environment &env, const char *body) const
{
	AutoPtr<Argument> pArg(new Argument(_pFunc.get()));
	if (!pArg->StoreValue(env, Value(body))) return Value::Nil;
	return _pFunc->Eval(env, *pArg);
}