Modifiche effettuate per ritornare l'errore 8 (Insufficient Memory)

TExternal_app::run(), senza segnalarlo con un error_box().


git-svn-id: svn://10.65.10.50/trunk@3000 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1996-06-17 09:05:05 +00:00
parent d7ed9136b5
commit ea6fbc42d2
2 changed files with 19 additions and 14 deletions

View File

@ -1747,26 +1747,23 @@ long TSystemisamfile::size(TRecnotype eox)
// @mfunc Esegue la conversione del file // @mfunc Esegue la conversione del file
// //
// @rdesc Ritorna il rusultato dell'operazione // @rdesc Ritorna il rusultato dell'operazione
// int TSystemisamfile::exec_convapp(
// @flag TRUE | Se la conversione e' stata effettuata correttamente
// @flag FALSE | Se è stato rilevato un errore durante la conversione (viene emesso un <f error_box>)
bool TSystemisamfile::exec_convapp(
long flev, // @parm Livello a cui aggiornare l'archivio long flev, // @parm Livello a cui aggiornare l'archivio
const bool before) // @parm Indica se viene chiamata prima o dopo la conversione const bool before) // @parm Indica se viene chiamata prima o dopo la conversione
{ {
const char * const v = before ? "BCNV" : "ACNV"; const char * const v = before ? "BCNV" : "ACNV";
int err = 0;
if (flev == 0) flev = 199401; if (flev == 0) flev = 199401;
else flev++; else flev++;
for (long l = flev; l <= get_std_level(); l++) for (long l = flev; err == 0 && l <= get_std_level(); l++)
{ {
TString16 paragraph(format("%06ld", l)); TString16 paragraph(format("%06ld", l));
TConfig conv(CONFIG_FCONV, paragraph); TConfig conv(CONFIG_FCONV, paragraph);
if (!conv.new_paragraph() && conv.exist(v, num())) if (!conv.new_paragraph() && conv.exist(v, num()))
{ {
int err = 0;
TString80 s(conv.get(v, NULL, num())); s << " " << main_app().get_firm(); TString80 s(conv.get(v, NULL, num())); s << " " << main_app().get_firm();
TExternal_app app(s); TExternal_app app(s);
@ -1780,11 +1777,11 @@ bool TSystemisamfile::exec_convapp(
err = atoi(msg->body()); err = atoi(msg->body());
} }
else err = 16; else err = 16;
if (err) if (err && err != 8)
return error_box("Impossibile eseguire il programma di %sconversione\ndel livello %ld/%ld\nErrore n.ro %d", before ? "pre" : "post", l / 100, l % 100, err); return error_box("Impossibile eseguire il programma di %sconversione\ndel livello %ld/%ld\nErrore n.ro %d", before ? "pre" : "post", l / 100, l % 100, err);
} }
} }
return TRUE; return err;
} }
// @doc INTERNAL // @doc INTERNAL
@ -1872,12 +1869,19 @@ int TSystemisamfile::update(
{ {
const long lev = prefix().filelevel(); const long lev = prefix().filelevel();
const bool lcf = getlcf(lev); const bool lcf = getlcf(lev);
exec_convapp(lev, TRUE);
err = exec_convapp(lev, TRUE);
if (err != NOERR)
{
setstatus(err);
return err;
}
if (!lcf && newrec == oldrec) if (!lcf && newrec == oldrec)
{ {
exec_convapp(lev, FALSE); err = exec_convapp(lev, FALSE);
return NOERR; setstatus(err);
return err;
} }
const TRecnotype nitems = dir.eod(); const TRecnotype nitems = dir.eod();
@ -1992,7 +1996,8 @@ int TSystemisamfile::update(
dir.put(num(), _nordir, _sysdirop); dir.put(num(), _nordir, _sysdirop);
newrec.put(num()); newrec.put(num());
if (toconvert && dir.eox() > 0L) packindex(); if (toconvert && dir.eox() > 0L) packindex();
exec_convapp(lev, FALSE); if (err == NOERR)
err = exec_convapp(lev, FALSE);
} }
setstatus(err); setstatus(err);
return err; return err;

View File

@ -655,8 +655,8 @@ class TSystemisamfile : public TIsamfile
// @cmember:(INTERNAL) Recupera le conversioni logiche da effettuare sul file // @cmember:(INTERNAL) Recupera le conversioni logiche da effettuare sul file
bool getlcf(long flev); bool getlcf(long flev);
// @cmember:(INTERNAL) Esegue la conversione del file // @cmember:(INTERNAL) Esegue la conversione del file. Ritorna il codice di errore.
bool exec_convapp(long flev, const bool before); int exec_convapp(long flev, const bool before);
// @cmember:(INTERNAL) Esegue la conversione sui record del file (utilizzando le espressione definite // @cmember:(INTERNAL) Esegue la conversione sui record del file (utilizzando le espressione definite
// in fconv.ini) // in fconv.ini)
void makelc(TRectype& rec); void makelc(TRectype& rec);