예제 #1
0
    ///////////////////////////////////////////////////////////////////////
    // Function: SetExistingTimesSet
    //
    //   Author: $author$
    //     Date: 7/29/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError SetExistingTimesSet
    (const char* chars, LONG length=-1) 
    {
        EvError error = EV_ERROR_FAILED;
#if defined(WIN32) 
// Windows
        EvError error2;
        DBF("() in...\n");
        if ((m_findChars = GetFindName(chars, length)))
        if (!(error2 = m_win32File.
            Open(m_findChars, GENERIC_WRITE)))
        {
            error = SetFileTimesSet();
            Close();
        }
#else // defined(WIN32) 
// Unix
        int err;
        DBF("() in...\n");
        if (!(m_findChars = GetFindName(chars, length)))
			DBE("() failed on GetFindName\n");
        else if ((err = stat(m_findChars, &m_st)))
                DBE("() failed to stat \"%s\"\n", m_findChars);
        else error = SetFileTimesSet();
#endif // defined(WIN32)
        DBF("() ...out\n");
        return error;
    }
예제 #2
0
static int
reg2str(unsigned val, int tag, int size, bool rex_used, char *buf, int buflen)
{
    char *ptr = buf, *end = buf + buflen;

    if (size == 1) {
        if (val < 8) {
            DBE(INSN, dprintk("%%%s", tag?vregs8[val]:regs8[val]));
            ptr += snprintf(ptr, end - ptr, "%%%s", tag?vregs8[val]:regs8[val]);
        } else {
            ASSERT((val - 8) < sizeof tregs8/sizeof tregs8[0]);
            DBE(INSN, dprintk(ptr, end - ptr, "%%%s", tregs8[val - 8]));
            ptr += snprintf(ptr, end - ptr, "%%%s", tregs8[val - 8]);
        }
    } else if (size == 2) {
        if (val < 8) {
            DBE(INSN, dprintk("%%%s", tag?vregs16[val]:regs16[val]));
            ptr += snprintf(ptr, end - ptr, "%%%s", tag?vregs16[val]:regs16[val]);
        } else {
            ASSERT(tag);
            ASSERT((val - 8) < sizeof tregs16/sizeof tregs16[0]);
            ptr += snprintf(ptr, end - ptr, "%%%s", tregs16[val - 8]);
        }
    } else if (size == 4) {
        if (val < 8) {
            ptr += snprintf(ptr, end - ptr, "%%%s", tag?vregs32[val]:regs32[val]);
        } else {
            ASSERT(tag);
            ASSERT((val - 8) < sizeof tregs32/sizeof tregs32[0]);
            ptr += snprintf(ptr, end - ptr, "%%%s", tregs32[val - 8]);
        }
    } else ASSERT(0);
    return (ptr - buf);
}
예제 #3
0
    ///////////////////////////////////////////////////////////////////////
    // Function: SetFileTimesSet
    //
    //   Author: $author$
    //     Date: 7/29/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError SetFileTimesSet() 
    {
        EvError error = EV_ERROR_FAILED;

        DBTFileTimesSet();

#if defined(WIN32) 
// Windows
        HANDLE win32Handle;

        DBF("() in...\n");
        if (!(win32Handle = m_win32File.Attached()))
            return EV_ERROR_NOT_ATTACHED;

        if (SetFileTime
            (win32Handle, &m_createdOSFileTime, 
             &m_accessedOSFileTime, &m_modifiedOSFileTime))
            error = EV_ERROR_NONE;
#else // defined(WIN32) 
// Unix
        EvError error2;
        DBF("() in...\n");
        if (!(m_findChars = m_findName.Chars
			(m_findLength)) || (0 >= m_findLength))
			DBE("() failed on m_findName.Chars\n");
        else if ((error2 = m_unixFileSystem.SetFileTime
                (m_findChars, &m_changedOSFileTime, 
                 &m_accessedOSFileTime, &m_modifiedOSFileTime)))
                DBE("() failed on m_unixFileSystem.SetFileTime\n");
        else error = EV_ERROR_NONE;
#endif // defined(WIN32)
        DBF("() ...out\n");
        return error;
    }
예제 #4
0
파일: evwhat.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Run
    //
    //    Author: $author$
    //      Date: 7/24/2009
    ///////////////////////////////////////////////////////////////////////
    virtual int Run
    (int argc, const char** argv, const char** env) 
    {
        int err = 0;
        EvError error;
        UID uid;
        GID gid;
        const char* chars;
        LONG length;

        if ((error = m_gid.GetCurrentGid(gid)))
            DBE("() failed to get current gid\n");
        else printf("GID: %d\n", gid);

        if ((error = m_uid.GetCurrentUid(uid)))
            DBE("() failed to get current uid\n");
        else 
        {
            printf("UID: %d\n", uid);

            if (!(error = m_passwd.FindUser(uid)))
            {
                if ((chars = m_passwd.GetUserName(length)))
                    printf("User: %s\n", chars);

                if ((chars = m_passwd.GetUserHome(length)))
                    printf("Home: %s\n", chars);
            }
        }
        return err;
    }
예제 #5
0
파일: cevdll.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Close
    //
    //   Author: $author$
    //     Date: 4/11/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Close() 
    {
		DF(Close)
        EvError error = EV_ERROR_FAILED;

		if (INVALID_DLL == m_attached)
			return EV_ERROR_NOT_ATTACHED;

#if defined(WIN32) 
// Windows
		if (!FreeLibrary(m_attached))
            DBE("() FreeLibrary() failed\n");
#else // defined(WIN32) 
// Unix
		int err;
		if ((err = dlclose(m_attached)))
            DBE("() dlclose() failed\n");
#endif // defined(WIN32)
        else
        {
            error = EV_ERROR_NONE;
		    m_attached = INVALID_DLL;
        }

        return error;
    }
예제 #6
0
    ///////////////////////////////////////////////////////////////////////
    // Function: GetCurrentDateTime
    //
    //   Author: $author$
    //     Date: 8/12/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError GetCurrentDateTime
    (bool isLocal=false,
     const EvTimezone* timezone=0)
    {
        EvError error = EV_ERROR_FAILED;
        struct tm* tm = 0;
        time_t t;

        DBF("() ...in\n");

        if (INVALID_TIME == (t = time(&t)))
            DBE("() failed on time\n");
        {
            if (isLocal)
            {
                if (timezone)
                {
                    DBE("() use of timezone not implemented\n");
                    return EV_ERROR_NOT_IMPLEMENTED;
                }

                if (!(tm = localtime_r(&t, &m_tm)))
                    DBE("() failed on localtime_r\n");
                else error = EV_ERROR_NONE;
            }
            else if (!(tm = gmtime_r(&t, &m_tm)))
                    DBE("() failed on gmtime_r\n");
            else error = EV_ERROR_NONE;
        }

        DBF("() ...out\n");
        return error;
    }
예제 #7
0
파일: cevmain.cpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: MainArg
    //
    //   Author: $author$
    //     Date: 4/4/2009
    ///////////////////////////////////////////////////////////////////////
    virtual int MainArg
    (int args, int argn, const char *arg, 
     int argc, const char** argv, const char** env) 
    {
        const char* name;
        LONG length;
        int level;

        if ((arg = MainArgParam(argn, arg, argc, argv)))
        {
            if ((0 > (level = atoi(arg)))
                || ((int)(sizeof(EvDebugLevels)*8) < level))
            {
                SET_EV_DEBUG_LEVELS(DEFAULT_EV_DEBUG_LEVELS);
                DBE("() invalid debug level %d\n", level);
            }
            else SET_EV_DEBUG_LEVELS(level);
        }
        else 
        {
            if ((name = GetLongName(length)))
                printf("%s: %x\n", name, GET_EV_DEBUG_LEVELS());
        }
        return argn;
    }
예제 #8
0
    ///////////////////////////////////////////////////////////////////////
    // Function: GetCurrentDateTime
    //
    //   Author: $author$
    //     Date: 7/13/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError GetCurrentDateTime
    (bool isLocal=false,
     const EvTimezone* timezone=0) 
    {
        EvError error = EV_ERROR_FAILED;
        EvError error2;
        bool isPM;

        DBF("() in...\n");

        if ((error2 = m_systemTime.
            GetCurrentDateTime(isLocal, timezone)))
        {
            DBE("() failed on GetCurrentDateTime\n");
            return error;
        }

        m_year = m_systemTime.GetYear();
        m_month = m_systemTime.GetMonth();
        m_day = m_systemTime.GetDay();
        m_hour = m_systemTime.GetHour(isPM);
        m_minute = m_systemTime.GetMinute();
        m_second = m_systemTime.GetSecond();
        m_millisecond = m_systemTime.GetMillisecond();
        error = EV_ERROR_NONE;

        DBF("() ...out\n");
        return error;
    }
예제 #9
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Bind
    //
    //   Author: $author$
    //     Date: 4/6/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Bind
    (USHORT port, const char* host=0) 
    {
        EvError error = EV_ERROR_FAILED;
		SOCKADDR_IN sockAddrIn;
		int err;

        if (host)
            return EV_ERROR_NOT_IMPLEMENTED;

		if (INVALID_SOCKET == m_attached)
			return EV_ERROR_NOT_ATTACHED;

		if (INVALID_SOCKET_PORT == port)
			port = m_port;

		sockAddrIn.sin_family = m_family;
		sockAddrIn.sin_port = htons(port);
		sockAddrIn.sin_addr.s_addr = htonl(m_addr);

		if ((err = bind(m_attached, (SOCKADDR*)(&sockAddrIn), sizeof(sockAddrIn))))
			DBE("() failed to bind socket error = %d\n", GET_SOCKET_ERROR(err));
        else error = EV_ERROR_NONE;

        return error;
    }
예제 #10
0
파일: cevdll.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Open
    //
    //   Author: $author$
    //     Date: 4/11/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Open
    (const char* filename,
     bool resolve=true,
     bool global=false) 
    {
		DF(Open)
        EvError error = EV_ERROR_FAILED;

		if (!filename || !filename[0])
			return EV_ERROR_NULL_PARAMETER;

#if defined(WIN32) 
// Windows
        char c;
        LONG length;
        TCHAR tChar;
        const char* chars;
        const TCHAR* tChars;
        CEvTString tFilename;

        for (chars = filename; (c = *chars); chars++)
        {
            if ('/' == c)
                tChar = (TCHAR)('\\');
            else tChar = (TCHAR)(c);

            tFilename.Append(&tChar, 1);
        }

        if ((tChars = tFilename.Chars(length)))
        if (0 < length)
        if (INVALID_DLL != (m_attached = LoadLibrary(tChars)))
            error = EV_ERROR_NONE;
        else DBE("() LoadLibrary(\"%s\") error %lu", filename, GetLastError());
#else // defined(WIN32) 
// Unix
		int flag = (resolve?RTLD_NOW:RTLD_LAZY)
                   |(global?RTLD_GLOBAL:0);

		if (INVALID_DLL != (m_attached = dlopen(filename, flag)))
			error = EV_ERROR_NONE;
		else DBE("() dlopen(\"%s\") error \"%s\"\n", filename, dlerror());
#endif // defined(WIN32)

        return error;
    }
예제 #11
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Create
    //
    //   Author: $author$
    //     Date: 4/6/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Create() 
    {
        EvError error = EV_ERROR_FAILED;

		if (INVALID_SOCKET != m_attached)
			return EV_ERROR_ALREADY_ATTACHED;

#if defined(WIN32) 
// Windows
        if ((error = EvWsa::Startup()))
        {
            DBE("() failed on wsa startup\n");
            return error;
        }
#endif // defined(WIN32)

		if (INVALID_SOCKET != (m_attached = socket
			(m_family, m_type, m_protocol)))
		{
#if defined(WIN32) 
// Windows
			int optval = 1;
            int err;

			if ((err = setsockopt
			    (m_attached, IPPROTO_TCP, TCP_NODELAY, 
			    (char*)&optval, sizeof(optval))))
            {
                DBE("() failed on setsockopt\n");
                closesocket(m_attached);
                m_attached = INVALID_SOCKET;
                return error;
            }
#endif // defined(WIN32)
			return EV_ERROR_NONE;
		}

		DBE("() failed error = %d\n", GET_SOCKET_ERROR(0));
        return error;
    }
예제 #12
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Accept
    //
    //   Author: $author$
    //     Date: 4/6/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Accept
#if defined(WIN32) 
// Windows
    (CEvSocket& connection, bool updateAcceptContext=false)
#else // defined(WIN32) 
// Unix
    (CEvSocket& connection) 
#endif // defined(WIN32)
    {
        EvError error = EV_ERROR_FAILED;
		SOCKADDR_IN sockAddrIn;
		socklen_t sockAddrInLen = sizeof(sockAddrIn);

		if (INVALID_SOCKET == m_attached)
			return EV_ERROR_NOT_ATTACHED;

		if (INVALID_SOCKET != connection.m_attached)
			return EV_ERROR_ALREADY_ATTACHED;

		if (INVALID_SOCKET != (connection.m_attached = accept
			(m_attached, (SOCKADDR*)(&sockAddrIn), &sockAddrInLen)))
            error = EV_ERROR_NONE;
		else 
        {
            DBE("() failed to accept error = %d\n", GET_SOCKET_ERROR(-1));
            return error;
        }

#if defined(WIN32) 
// Windows
        if (updateAcceptContext)
        if ((error = connection.
            UpdateAcceptContext(m_attached)))
        {
            DBE("() failed to update accept context\n");
            connection.Close();
        }
#endif // defined(WIN32)
        return error;
    }
예제 #13
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Read
    //
    //   Author: $author$
    //     Date: 4/16/2009
    ///////////////////////////////////////////////////////////////////////
    virtual LONG Read
    (void* buffer, ULONG size) 
    {
        char* chars = (char*)(buffer);
		LONG recved;

		if (0 > (recved = recv(m_attached, chars, size, 0)))
		{
			DBE("() failed error = %d\n", GET_SOCKET_ERROR(recved));
			return -EV_ERROR_READ;
		}
        return recved;
    }
예제 #14
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Write
    //
    //   Author: $author$
    //     Date: 4/16/2009
    ///////////////////////////////////////////////////////////////////////
    virtual LONG Write
    (const void* buffer, LONG length) 
    {
        const char* chars = (const char*)(buffer);
		LONG sent;

		if (0 > (sent = send(m_attached, chars, length, 0)))
		{
			DBE("() failed error = %d\n", GET_SOCKET_ERROR(sent));
			return -EV_ERROR_WRITE;
		}
        return sent;
    }
예제 #15
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Connect
    //
    //   Author: $author$
    //     Date: 4/6/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Connect
    (USHORT port, const char* host=0) 
    {
        EvError error = EV_ERROR_FAILED;
		SOCKADDR_IN sockAddrIn;
		HOSTENT *hostEnt;
		UINT32 addr;
		int err;

		if (INVALID_SOCKET == m_attached)
			return EV_ERROR_NOT_ATTACHED;

		if (INVALID_SOCKET_PORT == (SOCKET_PORT)(port))
			port = m_port;

		if (!(hostEnt = gethostbyname(host)))
		{
			DBE("() Failed to gethostbyname \"%s\"\n", host);
			return error;
		}

		addr = ntohl(*(UINT32*)(hostEnt->h_addr));

		sockAddrIn.sin_addr.s_addr = htonl(addr);
		sockAddrIn.sin_family = m_family;
		sockAddrIn.sin_port = htons(port);

		if ((err = connect(m_attached, (SOCKADDR*)(&sockAddrIn), sizeof(sockAddrIn))))
		{
			DBE("() failed to connect error = %d\n", GET_SOCKET_ERROR(err));
			return error;
		}
		
		m_addr = addr;
		m_port = port;
		error = EV_ERROR_NONE;
        return error;
    }
예제 #16
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Listen
    //
    //   Author: $author$
    //     Date: 4/6/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Listen(int backlog=UNDEFINED) 
    {
        EvError error = EV_ERROR_FAILED;
		int err;

		if (INVALID_SOCKET == m_attached)
			return EV_ERROR_NOT_ATTACHED;

        if (UNDEFINED == backlog)
            backlog = m_backlog;

		if ((err = listen(m_attached, backlog)))
			DBE("() failed to listen error = %d\n", GET_SOCKET_ERROR(err));
        else error = EV_ERROR_NONE;

        return error;
    }
예제 #17
0
int
insn2str(btmod *bt, insn_t const *insn, char *buf, size_t size)
{
    int i;
    char *ptr = buf, *end = buf + size;
    ptr += snprintf(ptr, end - ptr, "%s", opctable_name(bt, insn->opc));
    *ptr++ = ' ';
    for (i = 0; i < 3; i++) {
        DBE(INSN, dprintk(" %d:", i));

        ptr += operand2str(&insn->op[i], ptr, end - ptr);
        if (insn->op[i].type != invalid && i != 2 && insn->op[i+1].type!= invalid) {
            ptr += snprintf(ptr, end - ptr, ",");
        }
    }
    ASSERT(ptr < end);
    return (ptr - buf);
}
예제 #18
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: ShutDown
    //
    //   Author: $author$
    //     Date: 5/12/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError ShutDown
    (int how=SD_BOTH, bool onlyIfOpen=false) 
    {
        EvError error = EV_ERROR_FAILED;
        int err;

		if (INVALID_SOCKET == m_attached)
        if (onlyIfOpen)
			return EV_ERROR_NOT_ATTACHED;
        else return EV_ERROR_NONE;

		if ((err = shutdown(m_attached, how)))
        {
			DBE("() failed to shutdown socket error = %d\n", GET_SOCKET_ERROR(err));
            return error;
        }
        else error = EV_ERROR_NONE;
        return error;
    }
예제 #19
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: GetOpt
    //
    //   Author: $author$
    //     Date: 5/14/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError GetOpt
    (SOCKET_OPT_LEVEL level,
     SOCKET_OPT_NAME name,
     SOCKET_OPT_VALUE* value,
     SOCKET_OPT_LENGTH& length) const 
    {
        EvError error = EV_ERROR_FAILED;
        int err;

		if (INVALID_SOCKET == m_attached)
			return EV_ERROR_NOT_ATTACHED;

        if ((err = getsockopt
            (m_attached, level, name,
             (char*)value, &length)))
			DBE("() failed to getsockopt error = %d\n", GET_SOCKET_ERROR(err));
        else error = EV_ERROR_NONE;

        return error;
    }
예제 #20
0
파일: cevsocket.hpp 프로젝트: medusade/mxde
    ///////////////////////////////////////////////////////////////////////
    // Function: Close
    //
    //   Author: $author$
    //     Date: 4/6/2009
    ///////////////////////////////////////////////////////////////////////
    virtual EvError Close
    (bool onlyIfOpen=false) 
    {
        EvError error = EV_ERROR_FAILED;
        int err;

		if (INVALID_SOCKET == m_attached)
        if (onlyIfOpen)
			return EV_ERROR_NOT_ATTACHED;
        else return EV_ERROR_NONE;

		if ((err = closesocket(m_attached)))
        {
			DBE("() failed to close socket error = %d\n", GET_SOCKET_ERROR(err));
            return error;
        }
        else error = EV_ERROR_NONE;

        m_attached = INVALID_SOCKET;
        return error;
    }
예제 #21
0
int
operand2str(operand_t const *op, char *buf, size_t size)
{
    char *ptr = buf, *end = buf + size;

    switch (op->type) {
    case invalid:
        DBE(INSN, dprintk("(inval)"));
        break;
    case op_reg:
        ptr += reg2str(op->val.reg, op->tag.reg, op->size, op->rex_used,
                       ptr, end - ptr);
        DBE(INSN, dprintk("(reg) %s", buf));
        break;
    case op_seg:
        ptr += seg2str(op->val.seg, op->tag.seg, ptr, end - ptr);
        DBE(INSN, dprintk("(seg) %s", buf));
        break;
    case op_mem:
        ptr += mem2str(&op->val.mem, &op->tag.mem, op->size, op->rex_used, ptr,
                       end - ptr);
        DBE(INSN, dprintk("(mem) %s", buf));
        break;
    case op_imm:
        ptr += imm2str(op->val.imm, op->tag.imm, ptr, end - ptr);
        DBE(INSN, dprintk("(imm) %s", buf));
        break;
    case op_pcrel:
        ptr += pcrel2str(op->val.pcrel, op->tag.pcrel, ptr, end - ptr);
        DBE(INSN, dprintk("(pcrel) %s", buf));
        break;
    case op_cr:
        ptr += cr2str(op->val.cr, op->tag.cr, ptr, end - ptr);
        DBE(INSN, dprintk("(cr) %s", buf));
        break;
    case op_db:
        ptr += db2str(op->val.db, op->tag.db, ptr, end - ptr);
        DBE(INSN, dprintk("(db) %s", buf));
        break;
    case op_tr:
        ptr += tr2str(op->val.tr, op->tag.tr, ptr, end - ptr);
        DBE(INSN, dprintk("(tr) %s", buf));
        break;
    case op_mmx:
        ptr += mmx2str(op->val.mmx, op->tag.mmx, ptr, end - ptr);
        DBE(INSN, dprintk("(mm) %s", buf));
        break;
    case op_xmm:
        ptr += xmm2str(op->val.xmm, op->tag.xmm, ptr, end - ptr);
        DBE(INSN, dprintk("(xmm) %s", buf));
        break;
    case op_3dnow:
        ptr += op3dnow2str(op->val.d3now, op->tag.d3now, ptr, end - ptr);
        DBE(INSN, dprintk("(3dnow) %s", buf));
        break;
    case op_prefix:
        ptr += prefix2str(op->val.prefix, op->tag.prefix, ptr, end - ptr);
        break;
    case op_st:
        ptr += st2str(op->val.st, op->tag.st, ptr, end - ptr);
        break;
    default:
        dprintk("Invalid op->type[%d]\n", op->type);
        ASSERT(0);
    }

    return ptr - buf;
}