Patch level : 12.0 902

Files correlati     : ba1.exe
Commento            : Aggiunta firma nel programma delle patch
This commit is contained in:
Sirio Builder 2019-11-27 18:04:18 +01:00
parent 7bbcac8f00
commit 6830096fbf
4 changed files with 1662 additions and 1417 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1997,7 +1997,10 @@ bool TFascicolator_mask::set_version_info(const TFilename& filename,
ok = outfile.good() != 0; ok = outfile.good() != 0;
if (!ok) if (!ok)
error_box("Error writing signature in %s error n. %d", (const char *) filename, errno); error_box("Error writing signature in %s error n. %d", (const char *) filename, errno);
} }
if (outfile.is_open())
outfile.close(); // Qualcuno qui si dimentica di chiuderli i file eh?! Aspettiamo che il programma termini per rilasciare le risorse?
SIRIOSIGN(filename); // Super modifica per la firma durante la creazione delle patch. Tolta firma in post-compilazione. (Solo per exe, dll ancora in post-compilazione)
} }
return ok; return ok;
} }
@ -2093,7 +2096,7 @@ bool TCreadischi_mask::zip_module(const TString& main_module, bool agg, int patc
TString4 submod; TString4 submod;
submod.strncpy(row->get(2), 2); submod.strncpy(row->get(2), 2);
set_version_info(cmd, ini, submod); set_version_info(cmd, ini, submod);
} }
_stat((const char *)cmd,&info); _stat((const char *)cmd,&info);
lasttime = max(lasttime, info.st_mtime); lasttime = max(lasttime, info.st_mtime);
} }

View File

@ -94,46 +94,46 @@ bool fcopy(
// @comm Nel caso vengano ravvisati degli errori durante l'operazione vengono // @comm Nel caso vengano ravvisati degli errori durante l'operazione vengono
// creati dei box di comunicazione che indicano la causa del problema // creati dei box di comunicazione che indicano la causa del problema
{ {
CHECK(orig && *orig && dest && *dest, "fcopy: Invalid file name"); CHECK(orig && *orig && dest && *dest, "fcopy: Invalid file name");
if (append || !advanced) if (append || !advanced)
{ {
const char* const rflag = "rb"; const char* const rflag = "rb";
const char* wflag = append ? "ab" : "wb"; const char* wflag = append ? "ab" : "wb";
// Copia il file su se stesso? // Copia il file su se stesso?
if (xvt_str_same(orig, dest)) if (xvt_str_same(orig, dest))
return true; // Or FALSE? return true; // Or FALSE?
FILE* i = NULL; fopen_s(&i, orig, rflag); FILE* i = NULL; fopen_s(&i, orig, rflag);
if (i == NULL) if (i == NULL)
return error_box(FR("Impossibile leggere il file '%s'\nda copiare in '%s'\nErrore %d"), orig, dest, errno); return error_box(FR("Impossibile leggere il file '%s'\nda copiare in '%s'\nErrore %d"), orig, dest, errno);
if (!append) if (!append)
xvt_fsys_remove_file(dest); xvt_fsys_remove_file(dest);
FILE* o = NULL; fopen_s(&o, dest, wflag); FILE* o = NULL; fopen_s(&o, dest, wflag);
if (o == NULL) if (o == NULL)
{ {
fclose(i); fclose(i);
if (append) if (append)
return error_box(FR("Impossibile aprire il file '%s'\nper accodare il file '%s'\nErrore %d"), dest, orig, errno); return error_box(FR("Impossibile aprire il file '%s'\nper accodare il file '%s'\nErrore %d"), dest, orig, errno);
else else
return error_box(FR("Impossibile scrivere il file '%s'\nper copiare il file '%s'\nErrore %d"), dest, orig, errno); return error_box(FR("Impossibile scrivere il file '%s'\nper copiare il file '%s'\nErrore %d"), dest, orig, errno);
} }
const int size = 16*1024; const int size = 16*1024;
TString buffer(size); TString buffer(size);
bool ok = true; bool ok = true;
while (ok) while (ok)
{ {
const word letti = fread(buffer.get_buffer(), 1, size, i); const word letti = fread(buffer.get_buffer(), 1, size, i);
ok = fwrite(buffer.get_buffer(), 1, letti, o) == letti; ok = fwrite(buffer.get_buffer(), 1, letti, o) == letti;
if (letti < size) break; if (letti < size) break;
} }
if (!ok) if (!ok)
error_box(FR("Errore di scrittura: controllare lo spazio libero sul disco!")); error_box(FR("Errore di scrittura: controllare lo spazio libero sul disco!"));
fclose(o); fclose(o);
@ -154,20 +154,20 @@ bool fcopy(
// @flag FALSE | Se il file non esiste // @flag FALSE | Se il file non esiste
bool fexist( bool fexist(
const char* file) // @parm Nome del file di cui contrallare l'esistenza const char* file) // @parm Nome del file di cui contrallare l'esistenza
{ {
return file && *file && xvt_fsys_file_exists(file) != 0; return file && *file && xvt_fsys_file_exists(file) != 0;
} }
bool dexist( bool dexist(
const char* file) // @parm Nome del file di cui contrallare l'esistenza const char* file) // @parm Nome del file di cui contrallare l'esistenza
{ {
return file && *file && xvt_fsys_dir_exists(file) != 0; return file && *file && xvt_fsys_dir_exists(file) != 0;
} }
long fsize(const char* name) long fsize(const char* name)
{ {
return (name && *name) ? xvt_fsys_file_attr(name, XVT_FILE_ATTR_SIZE) : 0L; return (name && *name) ? xvt_fsys_file_attr(name, XVT_FILE_ATTR_SIZE) : 0L;
} }
// @doc EXTERNAL // @doc EXTERNAL
@ -197,7 +197,7 @@ bool remove_file(const char* file) // @parm Nome del file da cancellare
int remove_files(const char* path, bool subdirs) // @parm maschera files da cancellare, es: "c:\temp\*.tmp" int remove_files(const char* path, bool subdirs) // @parm maschera files da cancellare, es: "c:\temp\*.tmp"
{ {
TFilename dir(path); TFilename dir(path);
if (dir.find('*') < 0 && dir.find('?') < 0 && dexist(dir)) if (dir.find('*') < 0 && dir.find('?') < 0 && dexist(dir))
dir.add("*.*"); dir.add("*.*");
@ -207,8 +207,8 @@ int remove_files(const char* path, bool subdirs) // @parm maschera files da canc
{ {
dir = dir.path(); dir = dir.path();
// Windows XP doesn't support multi file deletion ... // Windows XP doesn't support multi file deletion ...
if (xvt_fsys_files_remove(dir, files) <= 0) if (xvt_fsys_files_remove(dir, files) <= 0)
{ {
dir.insert(TR("Cancellazione cartella ")); // ... do it manually dir.insert(TR("Cancellazione cartella ")); // ... do it manually
TProgress_monitor bar(count, dir); TProgress_monitor bar(count, dir);
for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e)) for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e))
@ -228,13 +228,13 @@ int remove_files(const char* path, bool subdirs) // @parm maschera files da canc
int count_files(const char* dir, bool subdirs) int count_files(const char* dir, bool subdirs)
{ {
TFilename d(dir); TFilename d(dir);
if (d.find('*') < 0 && d.find('?') < 0) if (d.find('*') < 0 && d.find('?') < 0)
d.add("*.*"); d.add("*.*");
SLIST files = xvt_fsys_list_files("", d, subdirs); SLIST files = xvt_fsys_list_files("", d, subdirs);
const int count = xvt_slist_count(files); const int count = xvt_slist_count(files);
xvt_slist_destroy(files); xvt_slist_destroy(files);
return count; return count;
} }
// @doc EXTERNAL // @doc EXTERNAL
@ -245,20 +245,20 @@ int count_files(const char* dir, bool subdirs)
// @rdesc Ritorna il numero di file che soddisfano la condizione passata (numero di elementi // @rdesc Ritorna il numero di file che soddisfano la condizione passata (numero di elementi
// di result) // di result)
int list_files( int list_files(
const char* filelist, // @parm Stringa contenente la maschera di estrazione const char* filelist, // @parm Stringa contenente la maschera di estrazione
TString_array& result) // @parm Array da riempire con la lista dei file TString_array& result) // @parm Array da riempire con la lista dei file
{ {
TString mask(filelist); TString mask(filelist);
mask.replace('\\', '/'); mask.replace('\\', '/');
SLIST files = xvt_fsys_list_files("", mask, FALSE); SLIST files = xvt_fsys_list_files("", mask, FALSE);
const int count = xvt_slist_count(files); const int count = xvt_slist_count(files);
for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e)) for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e))
result.add(xvt_slist_get(files, e, NULL)); result.add(xvt_slist_get(files, e, NULL));
xvt_slist_destroy(files); xvt_slist_destroy(files);
return count; return count;
} }
@ -271,13 +271,23 @@ bool input_filename(TFilename& file)
const bool good = xvt_dm_post_file_open(&fs, TR("Selezionare il file")) == FL_OK; const bool good = xvt_dm_post_file_open(&fs, TR("Selezionare il file")) == FL_OK;
xvt_fsys_set_dir(&dir); xvt_fsys_set_dir(&dir);
if (good) if (good)
xvt_fsys_convert_fspec_to_str(&fs, file.get_buffer(), file.size()); xvt_fsys_convert_fspec_to_str(&fs, file.get_buffer(), file.size());
return good; return good;
} }
void sirio_codesigning(const TFilename& filename)
{
TConfig installini("install.ini", "Main");
TString command = installini.get("SirioSignCommand", nullptr, -1, "");
if (command.empty())
command << R"("C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool.exe" sign /a /s MY /n "Sirio Informatica e Sistemi SPA" /t http://timestamp.verisign.com/scripts/timstamp.dll /v)";
command << " \"" << filename.path() << static_cast<const char*>((const TFilename&)filename) << "\"";
message_box(command);
xvt_sys_execute(command, TRUE, FALSE);
}
// Certified 99% // Certified 99%
// @doc EXTERNAL // @doc EXTERNAL
@ -293,7 +303,7 @@ char* format(
// stringa di destinazione alla funzione. // stringa di destinazione alla funzione.
{ {
char buf[512]; char buf[512];
va_list pars; va_list pars;
va_start(pars, fmt); va_start(pars, fmt);
const int tot = _vsnprintf(buf, sizeof(buf), fmt, pars); const int tot = _vsnprintf(buf, sizeof(buf), fmt, pars);
va_end(pars); va_end(pars);
@ -318,7 +328,7 @@ void log_message(const char* fmt, ...)
else else
flog = fopen(f, "a"); flog = fopen(f, "a");
} }
if (fmt && *fmt) if (fmt && *fmt)
{ {
TString80 str; TString80 str;
@ -326,12 +336,12 @@ void log_message(const char* fmt, ...)
str << ctime(&t); str << ctime(&t);
str.rtrim() << ' '; str.rtrim() << ' ';
fprintf(flog, (const char*)str); fprintf(flog, (const char*)str);
va_list pars; va_list pars;
va_start(pars, fmt); va_start(pars, fmt);
const int tot = vfprintf(flog, fmt, pars); const int tot = vfprintf(flog, fmt, pars);
va_end(pars); va_end(pars);
} }
fputc('\n', flog); fputc('\n', flog);
} }
@ -345,8 +355,8 @@ const char* cmd2name(
const char* argv1) // @parm Nome del parametro (default "") const char* argv1) // @parm Nome del parametro (default "")
{ {
TFilename app(argv0); TFilename app(argv0);
app = app.name(); app = app.name();
if (argv1 && *argv1) if (argv1 && *argv1)
app << ' ' << argv1; app << ' ' << argv1;
else else
{ {
@ -354,11 +364,11 @@ const char* cmd2name(
if (space != NULL) if (space != NULL)
app << space; app << space;
} }
app.lower(); app.lower();
const int par = app.find(" -"); const int par = app.find(" -");
const int num = par > 0 ? atoi(app.mid(par+2))+1 : 1; const int num = par > 0 ? atoi(app.mid(par+2))+1 : 1;
const char c = (num > 9) ? ('a'+num-10) : ('0'+num); const char c = (num > 9) ? ('a'+num-10) : ('0'+num);
app.cut(3); app.cut(3);
@ -461,7 +471,7 @@ const char* esc(
{ {
const char *s1 = s == NULL ? "" : s; const char *s1 = s == NULL ? "" : s;
char* encoded = get_tmp_string().get_buffer(strlen(s)); char* encoded = get_tmp_string().get_buffer(strlen(s));
char* s2 = encoded; char* s2 = encoded;
while (*s1) while (*s1)
{ {
if (*s1 == '\\') if (*s1 == '\\')
@ -484,12 +494,12 @@ const char* esc(
if (*s1 == '0') if (*s1 == '0')
{ {
s1++; s1++;
if (tolower(*s1) == 'x') if (tolower(*s1) == 'x')
{ {
s1++; s1++;
base = 16; base = 16;
} }
else else
base = 8; base = 8;
} }
*s2 = 0; *s2 = 0;
@ -542,7 +552,7 @@ const char* unesc(
case '\t': case '\t':
*s2++ = '\\'; *s2++ = 't'; *s2++ = '\\'; *s2++ = 't';
break; break;
default: default:
*s2++ = '\\'; *s2++ = '0'; *s2++ = 'x'; *s2++ = '\\'; *s2++ = '0'; *s2++ = 'x';
sprintf(s2, "%02x", int(c)); s2 += 2; sprintf(s2, "%02x", int(c)); s2 += 2;
break; break;
@ -562,7 +572,7 @@ const char * encode(const char* data)
{ {
char* tmp = get_tmp_string(strlen(data)).get_buffer(); char* tmp = get_tmp_string(strlen(data)).get_buffer();
xvt_str_encode(data, tmp, 0); xvt_str_encode(data, tmp, 0);
return tmp; return tmp;
} }
// @doc EXTERNAL // @doc EXTERNAL
@ -572,7 +582,7 @@ const char* decode(const char* data)
{ {
char* tmp = get_tmp_string(strlen(data)).get_buffer(); char* tmp = get_tmp_string(strlen(data)).get_buffer();
xvt_str_decode(data, tmp, 0); xvt_str_decode(data, tmp, 0);
return tmp; return tmp;
} }
//salta gli spazi bianchi ad inizio file //salta gli spazi bianchi ad inizio file
@ -610,8 +620,8 @@ long daytime()
// DON'T cache this bool because hostname can be local or server // DON'T cache this bool because hostname can be local or server
static bool is_sirio_station(const char* hostname) static bool is_sirio_station(const char* hostname)
{ {
const char* const ranger[] = const char* const ranger[] =
{ {
"NBKI7HPFERRANDI", // Davide "NBKI7HPFERRANDI", // Davide
"NBKDELLI7TOLLAR", // Mattia "NBKDELLI7TOLLAR", // Mattia
"MOBILE", // Roberto "MOBILE", // Roberto
@ -619,7 +629,7 @@ static bool is_sirio_station(const char* hostname)
"ARCHIMEDE", // Alessandro "ARCHIMEDE", // Alessandro
"SIRIOCOMP", "SIRIOCOMP",
"NBK_SPALACINO_A", // Simone "NBK_SPALACINO_A", // Simone
NULL NULL
}; };
for (int i = 0; ranger[i]; i++) for (int i = 0; ranger[i]; i++)
if (xvt_str_same(hostname, ranger[i])) if (xvt_str_same(hostname, ranger[i]))

View File

@ -20,6 +20,9 @@
#define SAFE_DELETE(p) { delete p; p = NULL; } #define SAFE_DELETE(p) { delete p; p = NULL; }
#define DEBUG_ENABLED is_debug_station() #define DEBUG_ENABLED is_debug_station()
void sirio_codesigning(const TFilename& filename);
#define SIRIOSIGN(filename) sirio_codesigning((const TFilename&)((filename)))
class TPerformance_profiler : public TObject class TPerformance_profiler : public TObject
{ {