コード例 #1
0
ファイル: Site.cpp プロジェクト: dblock/alkaline
bool CSite::HasChanged(void) const {
    CString Filename = m_ConfigPath; 
    CLocalPath::Terminate(Filename); 
    Filename += "asearch.cnf";
    
    struct_stat NewStat; 
    base_stat((const char *) Filename.GetBuffer(), &NewStat);

    if (m_Stat.st_mtime == NewStat.st_mtime) 
        return false;
    return true;
}
コード例 #2
0
ファイル: EquivManager.cpp プロジェクト: dblock/alkaline
void CEquivManager::Read(void) {
    struct_stat NewStat;
    base_stat((const char *) m_Filename.GetBuffer(), &NewStat);
    if (GetSize() && (m_Stat.st_mtime == NewStat.st_mtime))
        return;

    m_LoadMutex.Lock();
    m_Stat = NewStat;
    RemoveAll();
    (* (CTSStringTable *) this) = m_PersistentTable;
    CLocalFile File(m_Filename);
    if (File.OpenReadBinary()) {
        CVector<CString> Lines;
        File.ReadLines(&Lines);
        CString Line;
        for (register int i=0; i<(int) Lines.GetSize(); i++) {
            Line = Lines[i];
            //// _L_DEBUG(6, cout << "CEquivManager::Read() - parsing " << Line << endl);
            if (!Line.GetLength()) continue;
            if (Line[0] == '#') {
                Line.Delete(0, 1);
                if ((Line.Pos('<')>=0)&&(Line.Pos('>')> Line.Pos('<'))) m_EmailVector += Line;
            } else {
                CVector<CString> Tokens;
                CString::StrToVector(Line, ',', &Tokens);
                if ((Tokens.GetSize() == 2)&&(Tokens[0].GetLength())&&(Tokens[1].GetLength())) {
                    // complex equivalences
                    CVector<CString> TokensLeft;
                    CString::StrToVector(Tokens[0], '+', &TokensLeft);
                    CVector<CString> TokensRight;
                    CString::StrToVector(Tokens[1], '+', &TokensRight);
                    if ((int) TokensLeft.GetSize() > 1) {
                        if (TokensLeft.GetSize() > TokensRight.GetSize()) {
                            cout << "Dropping malformed equivalence at " << Tokens[0] << "=" << Tokens[1] << endl;
                        } else {
                            for (int ii=1; ii<(int)TokensLeft.GetSize(); ii++) {
                                CString TL(TokensLeft[0]);
                                TL+=TokensLeft[ii];
                                CString TR(TokensRight[0]);
                                TR+=TokensRight[ii];
                                CTSStringTable::Set(TL, TR);
                            }
                        }
                    } else {
                        CTSStringTable::Set(Tokens[0], Tokens[1]);
                    }
                }
            }
        }
    }
    m_LoadMutex.UnLock();
}
コード例 #3
0
ファイル: freopen.c プロジェクト: sunfirefox/pseudo
/* 
 * Copyright (c) 2008-2010 Wind River Systems; see
 * guts/COPYRIGHT for information.
 *
 * static FILE *
 * wrap_freopen(const char *path, const char *mode, FILE *stream) {
 *	FILE * rc = NULL;
 */
 	PSEUDO_STATBUF buf;
	int save_errno;
	int existed = (base_stat(path, &buf) != -1);

	rc = real_freopen(path, mode, stream);
	save_errno = errno;

	if (rc) {
		int fd = fileno(rc);

		pseudo_debug(2, "freopen '%s': fd %d\n", path, fd);
		if (base_fstat(fd, &buf) != -1) {
			if (!existed) {
				pseudo_client_op(OP_CREAT, 0, -1, -1, path, &buf);
			}
			pseudo_client_op(OP_OPEN, pseudo_access_fopen(mode), fd, -1, path, &buf);
		} else {
			pseudo_debug(1, "fopen (fd %d) succeeded, but stat failed (%s).\n",
				fd, strerror(errno));
			pseudo_client_op(OP_OPEN, pseudo_access_fopen(mode), fd, -1, path, 0);
		}
		errno = save_errno;
	}
コード例 #4
0
ファイル: EquivManager.cpp プロジェクト: dblock/alkaline
bool CEquivManager::HasChanged(void) const {
    struct_stat NewStat;
    base_stat((const char *) m_Filename.GetBuffer(), &NewStat);
    return (m_Stat.st_mtime != NewStat.st_mtime);
}