Fix numerical groups, packed feature

This commit is contained in:
Alexander S. Aganichev 2002-05-12 13:07:37 +00:00
parent 0d12457466
commit 389bf63f62
28 changed files with 186 additions and 62 deletions

View File

@ -12,6 +12,13 @@ ______________________________________________________________________
Notes for GoldED+ 1.1.5, /snapshot/ Notes for GoldED+ 1.1.5, /snapshot/
______________________________________________________________________ ______________________________________________________________________
- Fixed packed messagebase operation. The feature was only implemented
for the Squish messagebase and even there scan was improperly
implemented.
- Fixed numerical group parsing for Crashmail/CrashEcho, HPT,
SpaceToss, QEcho and Partoss.
- Fixed reverse order sorting in 'M' criteria of AREALISTSORT (broken - Fixed reverse order sorting in 'M' criteria of AREALISTSORT (broken
in previous snapshots). in previous snapshots).

View File

@ -2,7 +2,7 @@
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// The Goldware Library // The Goldware Library
// Copyright (C) 1999-2000 Alexander S. Aganichev // Copyright (C) 1999-2002 Alexander S. Aganichev
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// This library is free software; you can redistribute it and/or // This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public // modify it under the terms of the GNU Library General Public
@ -217,8 +217,12 @@ void gareafile::ReadCrashmailCfg(const char* file) {
unconfirmed = true; unconfirmed = true;
break; break;
case CRC_GROUP: case CRC_GROUP:
if(jbstrcpy(tmp, buf, 100, &jbcpos)) if(jbstrcpy(tmp, buf, 100, &jbcpos)) {
if(isdigit(tmp[0]))
aa.groupid = 0x8000+atoi(tmp);
else if(isalpha(tmp[0]))
aa.groupid = toupper(tmp[0]); aa.groupid = toupper(tmp[0]);
}
break; break;
} }
} }

View File

@ -2,7 +2,7 @@
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// The Goldware Library // The Goldware Library
// Copyright (C) 1999-2000 Alexander S. Aganichev // Copyright (C) 1999-2002 Alexander S. Aganichev
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// This library is free software; you can redistribute it and/or // This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public // modify it under the terms of the GNU Library General Public
@ -301,7 +301,9 @@ void gareafile::ReadHPTFile(char* path, char* file, char* options, char* origin,
gettok(&key, &val); gettok(&key, &val);
if(isalpha(*key)) if(isdigit(*key))
aa.groupid = 0x8000+atoi(key);
else if(isalpha(*key))
aa.groupid = toupper(*key); aa.groupid = toupper(*key);
} }
else if (strieql(opt, "d")) { else if (strieql(opt, "d")) {

View File

@ -2,7 +2,7 @@
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// The Goldware Library // The Goldware Library
// Copyright (C) 1999 Alexander S. Aganichev // Copyright (C) 1999, 2002 Alexander S. Aganichev
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// This library is free software; you can redistribute it and/or // This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public // modify it under the terms of the GNU Library General Public
@ -49,7 +49,11 @@ void gareafile::ReadQEchoFile(char* file, char* options, char* origin) {
char* ptr = strtok(buf, " \t"); char* ptr = strtok(buf, " \t");
aa.reset(); aa.reset();
aa.groupid = atoi(ptr);
if(isdigit(*ptr))
aa.groupid = 0x8000+atoi(ptr);
else if(isalpha(*ptr))
aa.groupid = toupper(*ptr);
if((ptr = strtok(NULL, " \t")) != NULL) { if((ptr = strtok(NULL, " \t")) != NULL) {
if(*ptr == '*') { if(*ptr == '*') {

View File

@ -2,7 +2,7 @@
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// The Goldware Library // The Goldware Library
// Copyright (C) 1999-2000 Alexander S. Aganichev // Copyright (C) 1999-2002 Alexander S. Aganichev
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// This library is free software; you can redistribute it and/or // This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public // modify it under the terms of the GNU Library General Public
@ -139,6 +139,9 @@ void gareafile::ReadSpaceAr(const char* file) {
break; break;
} }
case CRC_GROUP: case CRC_GROUP:
if(isdigit(*val))
aa.groupid = 0x8000+atoi(val);
else if(isalpha(*val))
aa.groupid = toupper(*val); aa.groupid = toupper(*val);
break; break;
case CRC_ENDAREA: case CRC_ENDAREA:

View File

@ -118,8 +118,12 @@ void gareafile::ReadSquishFile(char* path, char* file, char* options, char* orig
if(strnieql(p, "-$", 2)) { if(strnieql(p, "-$", 2)) {
aa.msgbase = GMB_SQUISH; aa.msgbase = GMB_SQUISH;
p += 2; p += 2;
if((tolower(*p) == 'g') and isalpha(p[1])) if((tolower(*p) == 'g') and isalpha(p[1])) {
if(isdigit(p[1]))
aa.groupid = 0x8000+atoi(p+1);
else if(isalpha(p[1]))
aa.groupid = toupper(p[1]); aa.groupid = toupper(p[1]);
}
else if(tolower(*p) == 'n') { else if(tolower(*p) == 'n') {
key = ++p; key = ++p;
getkeyval(&key, &p); getkeyval(&key, &p);

View File

@ -36,6 +36,12 @@ void EzycomArea::raw_scan(int __keep_index) {
int _wasopen = isopen; int _wasopen = isopen;
if(not _wasopen) { if(not _wasopen) {
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
isopen++; isopen++;
data_open(); data_open();
test_raw_open(__LINE__); test_raw_open(__LINE__);
@ -107,6 +113,9 @@ void EzycomArea::raw_scan(int __keep_index) {
if(not _wasopen) { if(not _wasopen) {
raw_close(); raw_close();
data_close(); data_close();
if(ispacked()) {
CleanUnpacked(real_path());
}
isopen--; isopen--;
} }

View File

@ -61,7 +61,7 @@ void FidoArea::data_close() {
char* FidoArea::build_msgname(char* __buf, ulong __msgno) { char* FidoArea::build_msgname(char* __buf, ulong __msgno) {
sprintf(__buf, "%s%lu.msg", path(), __msgno); sprintf(__buf, "%s%lu.msg", real_path(), __msgno);
return __buf; return __buf;
} }
@ -192,7 +192,7 @@ void FidoArea::save_lastread() {
GFTRK("FidoSaveLastread"); GFTRK("FidoSaveLastread");
int _fh = ::sopen(AddPath(path(), wide->fidolastread), O_RDWR|O_CREAT|O_BINARY, WideSharemode, S_STDRW); int _fh = ::sopen(AddPath(real_path(), wide->fidolastread), O_RDWR|O_CREAT|O_BINARY, WideSharemode, S_STDRW);
if(_fh != -1) { if(_fh != -1) {
word _lastread = (word)Msgn->CvtReln(lastread); word _lastread = (word)Msgn->CvtReln(lastread);
lseekset(_fh, wide->userno, sizeof(word)); lseekset(_fh, wide->userno, sizeof(word));

View File

@ -37,11 +37,22 @@ void FidoArea::raw_scan(bool __scanpm) {
GFTRK("FidoArea::raw_scan"); GFTRK("FidoArea::raw_scan");
int _wasopen = isopen;
if(not _wasopen) {
isopen++;
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
}
register uint _active = 0; register uint _active = 0;
register ulong* _msgnoptr = NULL; register ulong* _msgnoptr = NULL;
register ulong* _msgndx = Msgn->tag; register ulong* _msgndx = Msgn->tag;
gposixdir d(path()); gposixdir d(real_path());
if(WideDebug) if(WideDebug)
WideLog->printf("- %s/*.msg", d.fullpath()); WideLog->printf("- %s/*.msg", d.fullpath());
const gdirentry *de; const gdirentry *de;
@ -65,7 +76,7 @@ void FidoArea::raw_scan(bool __scanpm) {
// Get the lastread msgno // Get the lastread msgno
word _lastread = 0; word _lastread = 0;
int _fh = ::sopen(AddPath(path(), wide->fidolastread), O_RDONLY|O_BINARY, WideSharemode, S_STDRD); int _fh = ::sopen(AddPath(real_path(), wide->fidolastread), O_RDONLY|O_BINARY, WideSharemode, S_STDRD);
if(_fh != -1) { if(_fh != -1) {
lseekset(_fh, wide->userno, sizeof(word)); lseekset(_fh, wide->userno, sizeof(word));
read(_fh, &_lastread, sizeof(word)); read(_fh, &_lastread, sizeof(word));
@ -113,7 +124,7 @@ void FidoArea::raw_scan(bool __scanpm) {
// Read highwater mark // Read highwater mark
data->highwatermark = 0; data->highwatermark = 0;
if(isecho() and wide->fidohwmarks) { if(isecho() and wide->fidohwmarks) {
_fh = test_open(AddPath(path(), "1.msg"), O_RDONLY|O_BINARY, WideSharemode); _fh = test_open(AddPath(real_path(), "1.msg"), O_RDONLY|O_BINARY, WideSharemode);
if(_fh != -1) { if(_fh != -1) {
read(_fh, &_hdr, sizeof(FidoHdr)); read(_fh, &_hdr, sizeof(FidoHdr));
data->highwatermark = _hdr.replyto; data->highwatermark = _hdr.replyto;
@ -175,6 +186,13 @@ void FidoArea::raw_scan(bool __scanpm) {
); );
} }
if(not _wasopen) {
if(ispacked()) {
CleanUnpacked(real_path());
}
isopen--;
}
GFTRK(NULL); GFTRK(NULL);
} }

View File

@ -75,8 +75,8 @@ int FidoArea::renumber() {
if(_msgno != Msgn->at(_count)) { if(_msgno != Msgn->at(_count)) {
Path _oldname, _newname; Path _oldname, _newname;
sprintf(_oldname, "%s%lu.msg", path(), Msgn->at(_count)); sprintf(_oldname, "%s%lu.msg", real_path(), Msgn->at(_count));
sprintf(_newname, "%s%lu.msg", path(), _msgno); sprintf(_newname, "%s%lu.msg", real_path(), _msgno);
// Get the file attribute of the message // Get the file attribute of the message
struct stat st; struct stat st;
@ -152,7 +152,7 @@ Line* FidoArea::make_dump_msg(Line*& lin, gmsg* msg, char* lng_head) {
AddLine (NULL, "Hexdump of Fido/Opus-style message header and text"); AddLine (NULL, "Hexdump of Fido/Opus-style message header and text");
AddLineF(line, "------------------------------------------------------------------------------"); AddLineF(line, "------------------------------------------------------------------------------");
line = AddLine(line, ""); line = AddLine(line, "");
AddLineF(line, "File : %s%lu.msg", path(), msg->msgno); AddLineF(line, "File : %s%lu.msg", real_path(), msg->msgno);
AddLineF(line, "From : %-35.35s", _hdr.by); AddLineF(line, "From : %-35.35s", _hdr.by);
AddLineF(line, "To : %-35.35s", _hdr.to); AddLineF(line, "To : %-35.35s", _hdr.to);
AddLineF(line, "Subject : %-72.72s", _hdr.re); AddLineF(line, "Subject : %-72.72s", _hdr.re);

View File

@ -97,13 +97,13 @@ void JamArea::raw_open() {
GFTRK("JamArea::raw_open"); GFTRK("JamArea::raw_open");
Path file; Path file;
sprintf(file, "%s.jhr", path()); data->fhjhr = test_open(file); sprintf(file, "%s.jhr", real_path()); data->fhjhr = test_open(file);
sprintf(file, "%s.jdx", path()); data->fhjdx = test_open(file); sprintf(file, "%s.jdx", real_path()); data->fhjdx = test_open(file);
sprintf(file, "%s.jlr", path()); data->fhjlr = test_open(file); sprintf(file, "%s.jlr", real_path()); data->fhjlr = test_open(file);
if(not just_scanning) { if(not just_scanning) {
sprintf(file, "%s.jdt", path()); data->fhjdt = test_open(file); sprintf(file, "%s.jdt", real_path()); data->fhjdt = test_open(file);
if(not jamwide->smapihw) { if(not jamwide->smapihw) {
sprintf(file, "%s.cmhw", path()); data->fhjhw = ::sopen(file, O_RDWR|O_BINARY, WideSharemode, S_STDRW); sprintf(file, "%s.cmhw", real_path()); data->fhjhw = ::sopen(file, O_RDWR|O_BINARY, WideSharemode, S_STDRW);
} }
} }
@ -208,6 +208,12 @@ void JamArea::raw_scan(int __keep_index, int __scanpm) {
if(not _was_open) { if(not _was_open) {
if(not __keep_index or __scanpm) if(not __keep_index or __scanpm)
just_scanning = true; just_scanning = true;
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
isopen++; isopen++;
data_open(); data_open();
open_area(); open_area();
@ -325,7 +331,6 @@ void JamArea::raw_scan(int __keep_index, int __scanpm) {
); );
} }
// Free the .JDX buffer // Free the .JDX buffer
throw_free(_jdxbuf); throw_free(_jdxbuf);
@ -333,6 +338,9 @@ void JamArea::raw_scan(int __keep_index, int __scanpm) {
if(not _was_open) { if(not _was_open) {
raw_close(); raw_close();
data_close(); data_close();
if(ispacked()) {
CleanUnpacked(real_path());
}
isopen--; isopen--;
} }

View File

@ -48,11 +48,11 @@ void JamArea::lock() {
while(::lock(data->fhjhr, 0, 1) == -1) { while(::lock(data->fhjhr, 0, 1) == -1) {
// Tell the world // Tell the world
if(PopupLocked(++_tries, true, path()) == false) { if(PopupLocked(++_tries, true, real_path()) == false) {
WideLog->ErrLock(); WideLog->ErrLock();
raw_close(); raw_close();
WideLog->printf("! A JAM msgbase file could not be locked."); WideLog->printf("! A JAM msgbase file could not be locked.");
WideLog->printf(": %s.JHR.", path()); WideLog->printf(": %s.jhr.", real_path());
WideLog->ErrOSInfo(); WideLog->ErrOSInfo();
LockErrorExit(); LockErrorExit();
} }
@ -72,7 +72,7 @@ void JamArea::lock() {
if(not jamwide->smapihw) { if(not jamwide->smapihw) {
if(data->fhjhw == -1) { if(data->fhjhw == -1) {
Path file; Path file;
sprintf(file, "%s.cmhw", path()); data->fhjhw = ::sopen(file, O_RDWR|O_BINARY, WideSharemode, S_STDRW); sprintf(file, "%s.cmhw", real_path()); data->fhjhw = ::sopen(file, O_RDWR|O_BINARY, WideSharemode, S_STDRW);
} }
if(data->fhjhw != -1) { if(data->fhjhw != -1) {
lseek(data->fhjhw, 0, SEEK_SET); lseek(data->fhjhw, 0, SEEK_SET);

View File

@ -93,7 +93,7 @@ Line* JamArea::make_dump_msg(Line*& lin, gmsg* __msg, char* lng_head) {
AddLine (NULL, "Hexdump of JAM message header, subfields and text"); AddLine (NULL, "Hexdump of JAM message header, subfields and text");
AddLineF(line, "------------------------------------------------------------------------------"); AddLineF(line, "------------------------------------------------------------------------------");
line = AddLine(line, ""); line = AddLine(line, "");
AddLineF(line, "Msgbase : %s", path()); AddLineF(line, "Msgbase : %s", real_path());
AddLineF(line, "Signature : %s", _hdr->signature); AddLineF(line, "Signature : %s", _hdr->signature);
AddLineF(line, "Revision : %u", _hdr->revision); AddLineF(line, "Revision : %u", _hdr->revision);
AddLineF(line, "ReservedWord : %u", _hdr->reservedword); AddLineF(line, "ReservedWord : %u", _hdr->reservedword);

View File

@ -202,8 +202,8 @@ void PcbArea::raw_open() {
GFTRK("PcbRawOpen"); GFTRK("PcbRawOpen");
if(not just_scanning) if(not just_scanning)
data->fhmsg = test_open(path()); data->fhmsg = test_open(real_path());
data->fhidx = test_open(AddPath(path(), ".idx")); data->fhidx = test_open(AddPath(real_path(), ".idx"));
GFTRK(NULL); GFTRK(NULL);
} }
@ -220,6 +220,12 @@ void PcbArea::raw_scan(int __keep_index, int __scanpm) {
if(not _was_open) { if(not _was_open) {
if(not __keep_index) if(not __keep_index)
just_scanning = true; just_scanning = true;
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
isopen++; isopen++;
data_open(); data_open();
raw_open(); raw_open();
@ -345,6 +351,9 @@ void PcbArea::raw_scan(int __keep_index, int __scanpm) {
if(not _was_open) { if(not _was_open) {
raw_close(); raw_close();
data_close(); data_close();
if(ispacked()) {
CleanUnpacked(real_path());
}
isopen--; isopen--;
} }

View File

@ -45,11 +45,11 @@ void PcbArea::lock() {
if(WideCanLock) { if(WideCanLock) {
long _tries = 0; long _tries = 0;
while(::lock(data->fhmsg, 16, 6) == -1) { while(::lock(data->fhmsg, 16, 6) == -1) {
if(PopupLocked(++_tries, true, path()) == false) { if(PopupLocked(++_tries, true, real_path()) == false) {
WideLog->ErrLock(); WideLog->ErrLock();
raw_close(); raw_close();
WideLog->printf("! A PCBoard msgbase file could not be locked."); WideLog->printf("! A PCBoard msgbase file could not be locked.");
WideLog->printf(": %s.", path()); WideLog->printf(": %s.", real_path());
WideLog->ErrOSInfo(); WideLog->ErrOSInfo();
LockErrorExit(); LockErrorExit();
} }

View File

@ -107,7 +107,7 @@ Line* PcbArea::make_dump_msg(Line*& lin, gmsg* __msg, char* lng_head) {
AddLine (NULL, "Hexdump of PCBoard message header and text"); AddLine (NULL, "Hexdump of PCBoard message header and text");
AddLineF(line, "------------------------------------------------------------------------------"); AddLineF(line, "------------------------------------------------------------------------------");
line = AddLine(line, ""); line = AddLine(line, "");
AddLineF(line, "Msgbase : %s", path()); AddLineF(line, "Msgbase : %s", real_path());
AddLineF(line, "BoardNo : %u", board()); AddLineF(line, "BoardNo : %u", board());
AddLineF(line, "MsgOffset : %li", _idx.offset); AddLineF(line, "MsgOffset : %li", _idx.offset);
AddLineF(line, "Status : \'%c\'", _hdr.status); AddLineF(line, "Status : \'%c\'", _hdr.status);

View File

@ -60,7 +60,7 @@ void SMBInit() {
void SMBArea::data_open() { void SMBArea::data_open() {
data = smbdata + (smbdatano++); data = smbdata + (smbdatano++);
strxcpy(data->file, path(), sizeof(data->file) - 3); strxcpy(data->file, real_path(), sizeof(data->file) - 3);
data->sdt_fp = data->shd_fp = data->sid_fp = data->sda_fp = data->sha_fp = NULL; data->sdt_fp = data->shd_fp = data->sid_fp = data->sda_fp = data->sha_fp = NULL;
data->retry_time = 1; data->retry_time = 1;
data->last_error[0] = NUL; data->last_error[0] = NUL;
@ -113,7 +113,7 @@ void SMBArea::open() {
// User requested to exit // User requested to exit
WideLog->ErrOpen(); WideLog->ErrOpen();
WideLog->printf("! Synchronet message base could not be opened (%s).", data->last_error); WideLog->printf("! Synchronet message base could not be opened (%s).", data->last_error);
WideLog->printf(": %s", path()); WideLog->printf(": %s", real_path());
WideLog->ErrOSInfo(); WideLog->ErrOSInfo();
OpenErrorExit(); OpenErrorExit();
} }
@ -136,7 +136,7 @@ void SMBArea::open() {
WideLog->ErrOpen(); WideLog->ErrOpen();
WideLog->printf("! Synchronet message base could not be created (%s).", data->last_error); WideLog->printf("! Synchronet message base could not be created (%s).", data->last_error);
WideLog->printf(": %s", path()); WideLog->printf(": %s", real_path());
WideLog->ErrOSInfo(); WideLog->ErrOSInfo();
OpenErrorExit(); OpenErrorExit();
} }
@ -199,7 +199,7 @@ void SMBArea::resume()
// User requested to exit // User requested to exit
WideLog->ErrOpen(); WideLog->ErrOpen();
WideLog->printf("! Synchronet message base could not be opened (%s).", data->last_error); WideLog->printf("! Synchronet message base could not be opened (%s).", data->last_error);
WideLog->printf(": %s", path()); WideLog->printf(": %s", real_path());
WideLog->ErrOSInfo(); WideLog->ErrOSInfo();
OpenErrorExit(); OpenErrorExit();
} }
@ -222,7 +222,7 @@ void SMBArea::resume()
WideLog->ErrOpen(); WideLog->ErrOpen();
WideLog->printf("! Synchronet message base could not be created (%s).", data->last_error); WideLog->printf("! Synchronet message base could not be created (%s).", data->last_error);
WideLog->printf(": %s", path()); WideLog->printf(": %s", real_path());
WideLog->ErrOSInfo(); WideLog->ErrOSInfo();
OpenErrorExit(); OpenErrorExit();
} }

View File

@ -36,8 +36,15 @@ void SMBArea::raw_scan(bool keep_index, bool scanpm)
GFTRK("SMBArea::raw_scan"); GFTRK("SMBArea::raw_scan");
smb_t *_was_data = data; smb_t *_was_data = data;
if(_was_data == NULL) if(_was_data == NULL) {
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
data_open(); data_open();
}
ulong firstmsgno = 0; ulong firstmsgno = 0;
ulong lastmsgno = 0; ulong lastmsgno = 0;
Msgn->Reset(); Msgn->Reset();
@ -105,8 +112,12 @@ void SMBArea::raw_scan(bool keep_index, bool scanpm)
scanpm ? (int)PMrk->Count() : -1 scanpm ? (int)PMrk->Count() : -1
); );
} }
if(_was_data == NULL) if(_was_data == NULL) {
data_close(); data_close();
if(ispacked()) {
CleanUnpacked(real_path());
}
}
GFTRK(NULL); GFTRK(NULL);
} }

View File

@ -83,6 +83,17 @@ void SquishArea::raw_scan(int __keep_index, int __scanpm) {
wide = squishwide; wide = squishwide;
} }
int _wasopen = isopen;
if(not _wasopen) {
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
isopen++;
}
// Load the lastread // Load the lastread
dword _lastread = 0; dword _lastread = 0;
int _fh = ::sopen(AddPath(real_path(), ".sql"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD); int _fh = ::sopen(AddPath(real_path(), ".sql"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD);
@ -93,7 +104,7 @@ void SquishArea::raw_scan(int __keep_index, int __scanpm) {
} }
// Open Squish files for scanning unless they are already open // Open Squish files for scanning unless they are already open
if(not isopen) { if(not _wasopen) {
data->idx = NULL; data->idx = NULL;
data->base.totalmsgs = 0; data->base.totalmsgs = 0;
@ -129,6 +140,10 @@ void SquishArea::raw_scan(int __keep_index, int __scanpm) {
::close(data->fhsqi); ::close(data->fhsqi);
data->fhsqi = -1; data->fhsqi = -1;
} }
if(ispacked()) {
CleanUnpacked(real_path());
}
isopen--;
} }
register ulong _msgno; register ulong _msgno;

View File

@ -88,7 +88,7 @@ Line* SquishArea::make_dump_msg(Line*& lin, gmsg* msg, char* lng_head) {
AddLine (NULL, "Hexdump of Squish-style message header and text"); AddLine (NULL, "Hexdump of Squish-style message header and text");
AddLineF(line, "------------------------------------------------------------------------------"); AddLineF(line, "------------------------------------------------------------------------------");
line = AddLine(line, ""); line = AddLine(line, "");
AddLineF(line, "Msgbase : %s", path()); AddLineF(line, "Msgbase : %s", real_path());
AddLineF(line, "From : %-36.36s", _hdr.from); AddLineF(line, "From : %-36.36s", _hdr.from);
AddLineF(line, "To : %-36.36s", _hdr.to); AddLineF(line, "To : %-36.36s", _hdr.to);
AddLineF(line, "Subject : %-72.72s", _hdr.subj); AddLineF(line, "Subject : %-72.72s", _hdr.subj);

View File

@ -111,8 +111,8 @@ void WCatArea::raw_open() {
GFTRK("WCatRawOpen"); GFTRK("WCatRawOpen");
data->fhix = test_open(AddPath(path(), ".ix")); data->fhix = test_open(AddPath(real_path(), ".ix"));
data->fhdat = test_open(AddPath(path(), ".dat")); data->fhdat = test_open(AddPath(real_path(), ".dat"));
GFTRK(NULL); GFTRK(NULL);
} }
@ -178,7 +178,7 @@ void WCatArea::save_lastread() {
GFTRK("WCatSaveLastread"); GFTRK("WCatSaveLastread");
int _fh = ::sopen(AddPath(path(), ".lrd"), O_RDWR|O_CREAT|O_BINARY, WideSharemode, S_STDRW); int _fh = ::sopen(AddPath(real_path(), ".lrd"), O_RDWR|O_CREAT|O_BINARY, WideSharemode, S_STDRW);
if(_fh != -1) { if(_fh != -1) {
word _lastread = (word)Msgn->CvtReln(lastread); word _lastread = (word)Msgn->CvtReln(lastread);
lseekset(_fh, wcatwide->userno, sizeof(word)); lseekset(_fh, wcatwide->userno, sizeof(word));

View File

@ -78,9 +78,20 @@ void WCatArea::raw_scan(int __keep_index, int __scanpm) {
wide = wcatwide; wide = wcatwide;
} }
int _wasopen = isopen;
if(not _wasopen) {
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
isopen++;
}
// Load the lastread // Load the lastread
dword _lastread = 0; dword _lastread = 0;
int _fh = ::sopen(AddPath(path(), ".lrd"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD); int _fh = ::sopen(AddPath(real_path(), ".lrd"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD);
if(_fh != -1) { if(_fh != -1) {
lseekset(_fh, wide->userno, sizeof(dword)); lseekset(_fh, wide->userno, sizeof(dword));
read(_fh, &_lastread, sizeof(dword)); read(_fh, &_lastread, sizeof(dword));
@ -88,7 +99,7 @@ void WCatArea::raw_scan(int __keep_index, int __scanpm) {
} }
// Open WildCat! files for scanning unless they are already open // Open WildCat! files for scanning unless they are already open
if(not isopen) { if(not _wasopen) {
data->idx = NULL; data->idx = NULL;
data->base.recsize = 0; data->base.recsize = 0;
@ -96,7 +107,7 @@ void WCatArea::raw_scan(int __keep_index, int __scanpm) {
data->base.nextmsgno = 0; data->base.nextmsgno = 0;
// Open index file // Open index file
data->fhix = ::sopen(AddPath(path(), ".ix"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD); data->fhix = ::sopen(AddPath(real_path(), ".ix"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD);
if(data->fhix != -1) { if(data->fhix != -1) {
// Allocate index buffer and read from file // Allocate index buffer and read from file
@ -106,6 +117,10 @@ void WCatArea::raw_scan(int __keep_index, int __scanpm) {
::close(data->fhix); ::close(data->fhix);
data->fhix = -1; data->fhix = -1;
} }
if(ispacked()) {
CleanUnpacked(real_path());
}
isopen--;
} }
register uint _active = 0; register uint _active = 0;

View File

@ -45,11 +45,11 @@ void WCatArea::lock() {
if(WideCanLock) { if(WideCanLock) {
long _tries = 0; long _tries = 0;
while(::lock(data->fhix, 0, 1) == -1) { while(::lock(data->fhix, 0, 1) == -1) {
if(PopupLocked(++_tries, true, path()) == false) { if(PopupLocked(++_tries, true, real_path()) == false) {
WideLog->ErrLock(); WideLog->ErrLock();
raw_close(); raw_close();
WideLog->printf("! A WildCat! msgbase file could not be locked."); WideLog->printf("! A WildCat! msgbase file could not be locked.");
WideLog->printf(": %s.IX.", path()); WideLog->printf(": %s.ix.", real_path());
WideLog->ErrOSInfo(); WideLog->ErrOSInfo();
LockErrorExit(); LockErrorExit();
} }

View File

@ -66,7 +66,7 @@ Line* WCatArea::make_dump_msg(Line*& lin, gmsg* msg, char* lng_head) {
AddLine (NULL, "Hexdump of WildCat! message header and text"); AddLine (NULL, "Hexdump of WildCat! message header and text");
AddLineF(line, "------------------------------------------------------------------------------"); AddLineF(line, "------------------------------------------------------------------------------");
line = AddLine(line, ""); line = AddLine(line, "");
AddLineF(line, "Path : %s", path()); AddLineF(line, "Path : %s", real_path());
AddLineF(line, "MagicNumber: %08lXh", _hdr.magicnumber); AddLineF(line, "MagicNumber: %08lXh", _hdr.magicnumber);
AddLineF(line, "MsgNumber : %u", _hdr.msgno); AddLineF(line, "MsgNumber : %u", _hdr.msgno);
AddLineF(line, "Orig : %s", STRNP2C(_hdr.from)); AddLineF(line, "Orig : %s", STRNP2C(_hdr.from));

View File

@ -124,9 +124,9 @@ void XbbsArea::raw_open() {
GFTRK("XbbsRawOpen"); GFTRK("XbbsRawOpen");
data->fhdata = test_open(AddPath(path(), ".Data")); data->fhdata = test_open(AddPath(real_path(), ".Data"));
data->fhindex = test_open(AddPath(path(), ".Index")); data->fhindex = test_open(AddPath(real_path(), ".Index"));
data->fhtext = test_open(AddPath(path(), ".Text")); data->fhtext = test_open(AddPath(real_path(), ".Text"));
wide->isopen++; wide->isopen++;
if(wide->isopen == 1) if(wide->isopen == 1)
wide->user->fh = ::sopen(AddPath(wide->path, "Users"), O_RDONLY|O_BINARY, WideSharemode, S_STDRW); wide->user->fh = ::sopen(AddPath(wide->path, "Users"), O_RDONLY|O_BINARY, WideSharemode, S_STDRW);
@ -222,7 +222,7 @@ void XbbsArea::save_lastread() {
GFTRK("XbbsSaveLastread"); GFTRK("XbbsSaveLastread");
int _fh = ::sopen(AddPath(path(), ".lmr"), O_RDWR|O_CREAT|O_BINARY, WideSharemode, S_STDRW); int _fh = ::sopen(AddPath(real_path(), ".lmr"), O_RDWR|O_CREAT|O_BINARY, WideSharemode, S_STDRW);
if(_fh != -1) { if(_fh != -1) {
ulong _lastread = Msgn->CvtReln(lastread); ulong _lastread = Msgn->CvtReln(lastread);
lseekset(_fh, wide->userno+1, sizeof(ulong)); lseekset(_fh, wide->userno+1, sizeof(ulong));

View File

@ -88,9 +88,20 @@ void XbbsArea::raw_scan(int __keep_index, int __scanpm) {
wide = xbbswide; wide = xbbswide;
} }
int _wasopen = isopen;
if(not _wasopen) {
if(ispacked()) {
const char* newpath = Unpack(path());
if(newpath == NULL)
packed(false);
set_real_path(newpath ? newpath : path());
}
isopen++;
}
// Load the lastread // Load the lastread
ulong _lastread = 0; ulong _lastread = 0;
int _fh = ::sopen(AddPath(path(), ".lmr"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD); int _fh = ::sopen(AddPath(real_path(), ".lmr"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD);
if(_fh != -1) { if(_fh != -1) {
lseekset(_fh, wide->userno+1, sizeof(ulong)); lseekset(_fh, wide->userno+1, sizeof(ulong));
read(_fh, &_lastread, sizeof(ulong)); read(_fh, &_lastread, sizeof(ulong));
@ -98,13 +109,13 @@ void XbbsArea::raw_scan(int __keep_index, int __scanpm) {
} }
// Open AdeptXBBS files for scanning unless they are already open // Open AdeptXBBS files for scanning unless they are already open
if(not isopen) { if(not _wasopen) {
data->idx = NULL; data->idx = NULL;
data->idx_size = 0; data->idx_size = 0;
// Open index file // Open index file
data->fhindex = ::sopen(AddPath(path(), ".Index"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD); data->fhindex = ::sopen(AddPath(real_path(), ".Index"), O_RDONLY|O_BINARY, WideSharemode, S_STDRD);
if(data->fhindex != -1) { if(data->fhindex != -1) {
// Allocate index buffer and read from file // Allocate index buffer and read from file
@ -114,6 +125,10 @@ void XbbsArea::raw_scan(int __keep_index, int __scanpm) {
::close(data->fhindex); ::close(data->fhindex);
data->fhindex = -1; data->fhindex = -1;
} }
if(ispacked()) {
CleanUnpacked(real_path());
}
isopen--;
} }
register uint _active = 0; register uint _active = 0;

View File

@ -61,11 +61,11 @@ void XbbsArea::lock_file(int handle, long position, long length) {
long tries = 0; long tries = 0;
while(::lock(handle, position, length) == -1) { while(::lock(handle, position, length) == -1) {
if(PopupLocked(++tries, true, path()) == false) { if(PopupLocked(++tries, true, real_path()) == false) {
WideLog->ErrLock(); WideLog->ErrLock();
raw_close(); raw_close();
Path file; Path file;
strcpy(file, path()); strcpy(file, real_path());
if(handle == data->fhdata) if(handle == data->fhdata)
strcat(file, ".Data"); strcat(file, ".Data");
else if(handle == data->fhtext) else if(handle == data->fhtext)

View File

@ -70,7 +70,7 @@ Line* XbbsArea::make_dump_msg(Line*& lin, gmsg* msg, char* lng_head) {
AddLine (NULL, "Hexdump of AdeptXBBS message header and text"); AddLine (NULL, "Hexdump of AdeptXBBS message header and text");
AddLineF(line, "------------------------------------------------------------------------------"); AddLineF(line, "------------------------------------------------------------------------------");
line = AddLine(line, ""); line = AddLine(line, "");
AddLineF(line, "Path : %s", path()); AddLineF(line, "Path : %s", real_path());
AddLineF(line, "UserRecno : %u (%s)", wide->userno, WideUsername[0]); AddLineF(line, "UserRecno : %u (%s)", wide->userno, WideUsername[0]);
line = AddLine(line, ""); line = AddLine(line, "");
AddLineF(line, "Header Record:"); AddLineF(line, "Header Record:");