Riportate modifiche dalla R9702 per quanto riguarda l'apertura di
files senza indice, utile per scaricare un file con indice danneggiato. Tolta fatal_box() nel caso si tenti di scrivere una stringa piu' lunga del campo: ora tronca i valori alfanumerici alla lunghezza massima, mentre quelli numerici vengono azzerati. git-svn-id: svn://10.65.10.50/trunk@5389 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									f77367a05d
								
							
						
					
					
						commit
						569760adf1
					
				| @ -199,12 +199,8 @@ void  __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout) | |||||||
| 
 | 
 | ||||||
|   len = strlen(s); |   len = strlen(s); | ||||||
|    |    | ||||||
|   if (len > l)  |   const bool exceeded = len > l; | ||||||
|   { | 
 | ||||||
|     yesnofatal_box("Impossibile scrivere %d caratteri su di un campo di %d", (int)len, (int)l); |  | ||||||
|     return; |  | ||||||
|   }   |  | ||||||
|    |  | ||||||
|   if ((t == _intfld)     || |   if ((t == _intfld)     || | ||||||
|       (t == _longfld)    || |       (t == _longfld)    || | ||||||
|       (t == _wordfld)    || |       (t == _wordfld)    || | ||||||
| @ -213,7 +209,7 @@ void  __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout) | |||||||
|       (t == _longzerofld) |       (t == _longzerofld) | ||||||
|       ) |       ) | ||||||
|   { |   { | ||||||
|     if (len == 0) |     if (len == 0 || exceeded) | ||||||
|     { |     { | ||||||
|       strcpy(s2, "0"); |       strcpy(s2, "0"); | ||||||
|       s = s2; |       s = s2; | ||||||
| @ -226,6 +222,8 @@ void  __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout) | |||||||
|   } |   } | ||||||
|   else |   else | ||||||
|   { |   { | ||||||
|  |     if (exceeded) | ||||||
|  |       len = l; | ||||||
|     strncpy(recout, s, len) ; |     strncpy(recout, s, len) ; | ||||||
|     for  (i = l - 1; i >= len; i--) recout[i] = ' '; |     for  (i = l - 1; i >= len; i--) recout[i] = ' '; | ||||||
|   } |   } | ||||||
| @ -1292,19 +1290,24 @@ void TBaseisamfile::indexoff() | |||||||
| // @rdesc Ritorna NOERR se e' riuscita ad aprire il file, altrimenti ritorna il numero di errore
 | // @rdesc Ritorna NOERR se e' riuscita ad aprire il file, altrimenti ritorna il numero di errore
 | ||||||
| //    generato (vedi <t TIsamerr>).
 | //    generato (vedi <t TIsamerr>).
 | ||||||
| int TBaseisamfile::_open( | int TBaseisamfile::_open( | ||||||
|     unsigned int mode) // @parm Indica il modo di apertura del file (default _manulock)
 |     unsigned int mode,  // @parm Indica il modo di apertura del file (default _manulock)
 | ||||||
|  |     bool index)         // @parm Indica se aprire con indici o meno  (default TRUE)
 | ||||||
| 
 | 
 | ||||||
| // @comm Il parametro <p mode> puo' assumere i valori:
 | // @comm Il parametro <p mode> puo' assumere i valori:
 | ||||||
| //
 | //
 | ||||||
| // @flag _manulock | Il lock dei record viene fatto manualmente
 | // @flag _manulock | Il lock dei record viene fatto manualmente
 | ||||||
| // @flag _exclock | Il file viene aperte in modo esclusivo
 | // @flag _exclock | Il file viene aperte in modo esclusivo
 | ||||||
| // @flag _autolock | Il lock dei record viene fatto in modo automatico
 | // @flag _autolock | Il lock dei record viene fatto in modo automatico
 | ||||||
|  | // @comm Il parametro <p index> puo' assumere i valori:
 | ||||||
|  | //
 | ||||||
|  | // @flag TRUE  | Il file viene aperto con indici
 | ||||||
|  | // @flag FALSE | Il file viene aperto senza indici
 | ||||||
|    |    | ||||||
| { | { | ||||||
|   CHECKS(filehnd() == NULL, "File already open ", (const char*)filename()); |   CHECKS(filehnd() == NULL, "File already open ", (const char*)filename()); | ||||||
|    |    | ||||||
|   getisfd(_isamfile,num());  |   getisfd(_isamfile,num());  | ||||||
|   if ((filehnd()->fhnd = DB_open(filehnd()->d->SysName,mode==_excllock)) >= 0) |   if ((filehnd()->fhnd = DB_open(filehnd()->d->SysName,mode==_excllock,index)) >= 0) | ||||||
|   {                        |   {                        | ||||||
|     TRecnotype n=DB_reccount(filehnd()->fhnd); |     TRecnotype n=DB_reccount(filehnd()->fhnd); | ||||||
|     TDir d; |     TDir d; | ||||||
| @ -1398,7 +1401,7 @@ int TBaseisamfile::is_valid() | |||||||
|   CHECKS(filehnd() == NULL, "File already open ", (const char*)filename()); |   CHECKS(filehnd() == NULL, "File already open ", (const char*)filename()); | ||||||
|   int err = NOERR; |   int err = NOERR; | ||||||
|   getisfd(_isamfile,num());  |   getisfd(_isamfile,num());  | ||||||
|   if ((filehnd()->fhnd = DB_open(filehnd()->d->SysName,0)) >= 0) |   if ((filehnd()->fhnd = DB_open(filehnd()->d->SysName,0,TRUE)) >= 0) | ||||||
|   { |   { | ||||||
|     if (DB_tagget(filehnd()->fhnd) == -1) err = _ispatherr; |     if (DB_tagget(filehnd()->fhnd) == -1) err = _ispatherr; | ||||||
|     DB_close(filehnd()->fhnd); |     DB_close(filehnd()->fhnd); | ||||||
| @ -1509,7 +1512,7 @@ int TLocalisamfile::open(unsigned int mode) | |||||||
|   } |   } | ||||||
|   else |   else | ||||||
|   { |   { | ||||||
|     err = _open(); |     err = _open(mode, TRUE); | ||||||
|     _was_open = TRUE; |     _was_open = TRUE; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -1689,7 +1692,7 @@ int TIsamtempfile::open( | |||||||
|   } |   } | ||||||
|   else |   else | ||||||
|     filehnd()->d->EOD = eod; |     filehnd()->d->EOD = eod; | ||||||
|   filehnd()->fhnd = DB_open(filehnd()->d->SysName, 0); |   filehnd()->fhnd = DB_open(filehnd()->d->SysName, 0, TRUE); | ||||||
|   if (filehnd()->fhnd < 0)  |   if (filehnd()->fhnd < 0)  | ||||||
|     err = get_error(filehnd()->fhnd); |     err = get_error(filehnd()->fhnd); | ||||||
|   if (err != NOERR) |   if (err != NOERR) | ||||||
| @ -1765,7 +1768,7 @@ int TIsamtempfile::close() | |||||||
| ///////////////////////////////////////////////////////////
 | ///////////////////////////////////////////////////////////
 | ||||||
| // TExternisamfile
 | // TExternisamfile
 | ||||||
| ///////////////////////////////////////////////////////////
 | ///////////////////////////////////////////////////////////
 | ||||||
| TExternisamfile::TExternisamfile(const char* name, bool exclusive) | TExternisamfile::TExternisamfile(const char* name, bool exclusive, bool index) | ||||||
| : TLocalisamfile(name)  | : TLocalisamfile(name)  | ||||||
| { | { | ||||||
|   _name = name; |   _name = name; | ||||||
| @ -1780,7 +1783,7 @@ TExternisamfile::TExternisamfile(const char* name, bool exclusive) | |||||||
|       _name.ltrim(1); |       _name.ltrim(1); | ||||||
|       _name.format("%s/%s",__ptprf,(const char*)_name); |       _name.format("%s/%s",__ptprf,(const char*)_name); | ||||||
|     } |     } | ||||||
|   open(exclusive);                              |   open(exclusive, index);                              | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TExternisamfile::~TExternisamfile() | TExternisamfile::~TExternisamfile() | ||||||
| @ -1788,11 +1791,11 @@ TExternisamfile::~TExternisamfile() | |||||||
|   close(); |   close(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int TExternisamfile::open(bool exclusive) | int TExternisamfile::open(bool exclusive, bool index) | ||||||
| { | { | ||||||
|   int err=NOERR; |   int err=NOERR; | ||||||
|    |    | ||||||
|   filehnd()->fhnd = DB_open(_name, exclusive); |   filehnd()->fhnd = DB_open(_name, exclusive, index); | ||||||
|   if (filehnd()->fhnd < 0)  |   if (filehnd()->fhnd < 0)  | ||||||
|     err = get_error(filehnd()->fhnd); |     err = get_error(filehnd()->fhnd); | ||||||
|   if (err != NOERR) |   if (err != NOERR) | ||||||
| @ -2099,7 +2102,7 @@ int TSystemisamfile::update( | |||||||
|         err=get_error(err); |         err=get_error(err); | ||||||
|         return (err); |         return (err); | ||||||
|       } |       } | ||||||
|       i0->fhnd=DB_open((const char*)tmpfname,0); |       i0->fhnd=DB_open((const char*)tmpfname,0, TRUE); | ||||||
|       if (i0->fhnd < 0 ) err=get_error(i0->fhnd); |       if (i0->fhnd < 0 ) err=get_error(i0->fhnd); | ||||||
|       TFilename fname(filename()); |       TFilename fname(filename()); | ||||||
|       TString s(80); |       TString s(80); | ||||||
| @ -2492,7 +2495,7 @@ int TSystemisamfile::dump( | |||||||
|   if (withdeleted) nkey = 0; |   if (withdeleted) nkey = 0; | ||||||
|   int err = ferror(f); |   int err = ferror(f); | ||||||
|    |    | ||||||
|   open(); |   open(FALSE, nkey ? TRUE : FALSE); | ||||||
|   TString s(512); |   TString s(512); | ||||||
|   bool fixedlen = (fs == '\0'); |   bool fixedlen = (fs == '\0'); | ||||||
|   int nflds = curr().items(); |   int nflds = curr().items(); | ||||||
|  | |||||||
| @ -339,8 +339,8 @@ protected: | |||||||
|    |    | ||||||
|   // @cmember UNUSED
 |   // @cmember UNUSED
 | ||||||
|   void recover(); |   void recover(); | ||||||
|   // @cmember Apre il file isam di base con lock
 |   // @cmember Apre il file isam di base con lock, permettendo di specificare se usare gli indici o no
 | ||||||
|   int _open(unsigned int mode = _manulock); |   int _open(unsigned int mode = _manulock, bool index = TRUE); | ||||||
|   // @cmember Chiude il file isam di base
 |   // @cmember Chiude il file isam di base
 | ||||||
|   int _close();         |   int _close();         | ||||||
| 
 | 
 | ||||||
| @ -564,8 +564,8 @@ public: | |||||||
|   // @cmember Aggiorna i flags associati al file
 |   // @cmember Aggiorna i flags associati al file
 | ||||||
|   int flags(bool updateeod = FALSE); |   int flags(bool updateeod = FALSE); | ||||||
|   // @cmember Apre un file di isam con lock (vedi <mf TBaseisamfile::_open>)
 |   // @cmember Apre un file di isam con lock (vedi <mf TBaseisamfile::_open>)
 | ||||||
|   int open(unsigned int mode = _manulock)  |   int open(unsigned int mode = _manulock, bool index = TRUE)  | ||||||
|   { return _open(mode);}  |   { return _open(mode, index);}  | ||||||
|   // @cmember Chiude il file di isam
 |   // @cmember Chiude il file di isam
 | ||||||
|   int close()  |   int close()  | ||||||
|   { return _close();} |   { return _close();} | ||||||
| @ -734,7 +734,7 @@ class TExternisamfile : public TLocalisamfile | |||||||
| // @access Protected Member  
 | // @access Protected Member  
 | ||||||
| protected: | protected: | ||||||
|   // @cmember Apre il file. <p exclusive> indica se aprire il file in modo esclusivo
 |   // @cmember Apre il file. <p exclusive> indica se aprire il file in modo esclusivo
 | ||||||
|   int open(bool exclusive); |   int open(bool exclusive, bool index = TRUE); | ||||||
|   // @cmember Chiude il file
 |   // @cmember Chiude il file
 | ||||||
|   int close();  |   int close();  | ||||||
| 
 | 
 | ||||||
| @ -743,7 +743,8 @@ public: | |||||||
|   // @cmember Ritorna il nome del file sotto forma di stringa
 |   // @cmember Ritorna il nome del file sotto forma di stringa
 | ||||||
|   virtual const char* name() const; |   virtual const char* name() const; | ||||||
|   // @cmember Costruttore. <p exclusive> indica se aprire il file in modo esclusivo.
 |   // @cmember Costruttore. <p exclusive> indica se aprire il file in modo esclusivo.
 | ||||||
|   TExternisamfile(const char* name, bool exclusive = FALSE); |   //                       <p index> indica se aprire il file con indici o meno
 | ||||||
|  |   TExternisamfile(const char* name, bool exclusive = FALSE, bool index = TRUE); | ||||||
|   // @cmember Distruttore
 |   // @cmember Distruttore
 | ||||||
|   virtual ~TExternisamfile(); |   virtual ~TExternisamfile(); | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user