/win32/shellext/Direntry.cpp
C++ | 71 lines | 42 code | 14 blank | 15 comment | 7 complexity | 24fee94a2cbea06f61323a2590d4b181 MD5 | raw file
Possible License(s): GPL-2.0
- // Copyright (C) 2009 Benjamin Pollack
- // Copyright (C) 2009 Adrian Buehlmann
- //
- // 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 2 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 <http://www.gnu.org/licenses/>.
- #include "stdafx.h"
- #include "Direntry.h"
- #include "Winstat.h"
- int Direntry::read(FILE* f, std::vector<char>& relpath)
- {
- if (fread(&state, sizeof(state), 1, f) != 1)
- return 0;
- unsigned length = 0;
- fread(&mode, sizeof(mode), 1, f);
- fread(&size, sizeof(size), 1, f);
- fread(&mtime, sizeof(mtime), 1, f);
- fread(&length, sizeof(length), 1, f);
- mode = ntohl(mode);
- size = ntohl(size);
- mtime = ntohl(mtime);
- length = ntohl(length);
- relpath.resize(length + 1, 0);
- fread(&relpath[0], sizeof(char), length, f);
- relpath[length] = 0;
- ::CharLowerBuff(&relpath[0], length);
- return 1;
- }
- char Direntry::status(const Winstat& stat) const
- {
- switch (this->state)
- {
- case 'n':
- if (this->size != (unsigned)stat.size)
- return 'M'; // modified
- if (this->mtime == (unsigned)stat.mtime)
- return 'C'; // clean
- return 'P'; // must peek into file contents
- case 'm':
- return 'M';
- case 'r':
- return 'R';
- case 'a':
- return 'A';
- default:
- return '?';
- }
- }