1
0
Files
irix-657m-src/eoe/cmd/mountcd/tests/testiso/DirEntry.c++
2022-09-29 17:59:04 +03:00

132 lines
2.8 KiB
C++

/*
* Direntry.c++
*
* Description:
* Implementation of DirEntry class
*
* History:
* rogerc 04/11/91 Created
*/
#include <bstring.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <stream.h>
#include "DirEntry.h"
#include "util.h"
DirEntry::DirEntry(RAWDIRENT *raw, int notranslate)
{
xattrLen = raw->de_xattr_len;
len = CHARSTOLONG(raw->de_len);
fu = raw->de_fu;
gap = raw->de_gap;
loc = CHARSTOLONG(raw->de_loc);
int stlen;
char *str;
str = to_unixname(raw->de_name, raw->de_namelen, notranslate);
stlen = strlen(str);
fflags = raw->de_flags;
filename = new char[stlen + 1];
strncpy(filename, str, stlen);
filename[stlen] = '\0';
struct tm tm;
tm.tm_sec = raw->de_date[TMSEC];
tm.tm_min = raw->de_date[TMMIN];
tm.tm_hour = raw->de_date[TMHOUR];
tm.tm_mday = raw->de_date[TMDAY];
tm.tm_mon = raw->de_date[TMMONTH] - 1;
tm.tm_year = raw->de_date[TMYEAR];
#if 0
tm.tm_isdst = _daylight;
#else
tm.tm_isdst = 0;
#endif
recTime = mktime(&tm);
recTime -= timezone; // mktime adds this in; we subtract it
recTime -= 15 * 60 * (signed char)raw->de_date[TMOFF];
type = ISO;
refCount = 0;
}
DirEntry::DirEntry(HSFS_RAWDIRENT *raw, int notranslate)
{
xattrLen = raw->de_xattr_len;
len = CHARSTOLONG(raw->de_len);
fu = raw->de_fu;
gap = raw->de_gap;
loc = CHARSTOLONG(raw->de_loc);
int stlen;
char *str;
str = to_unixname(raw->de_name, raw->de_namelen, notranslate);
stlen = strlen(str);
fflags = raw->de_flags;
filename = new char[stlen + 1];
strncpy(filename, str, stlen);
filename[stlen] = '\0';
struct tm tm;
tm.tm_sec = raw->de_date[TMSEC];
tm.tm_min = raw->de_date[TMMIN];
tm.tm_hour = raw->de_date[TMHOUR];
tm.tm_mday = raw->de_date[TMDAY];
tm.tm_mon = raw->de_date[TMMONTH] - 1;
tm.tm_year = raw->de_date[TMYEAR];
#if 0
tm.tm_isdst = _daylight;
#else
tm.tm_isdst = 0;
#endif
recTime = mktime(&tm);
time_t clock = recTime;
struct tm *atime = localtime(&clock);
recTime -= timezone; // mktime adds this in; we subtract it
type = HSFS;
refCount = 0;
}
DirEntry::~DirEntry()
{
delete filename;
}
char *
DirEntry::name()
{
return filename;
}
void
DirEntry::dump()
{
printf("\tName: %s\tloc: %d\tlen: %d\tflags: %x\n",
filename, loc, len, fflags);
}
int
DirEntry::check()
{
/*
* Associated files should NOT have been available.
*/
if (fflags & FFLAG_ASSOC) {
if (refCount != 0)
cerr << progname << ": associated file " << filename
<< " reference count of " << refCount << "\n ";
}
else if (refCount != 1) {
cerr << progname << ": " << filename << " reference count of " <<
refCount << "\n";
return 1;
}
return 0;
}