summaryrefslogtreecommitdiff
path: root/src/htscoremain.c
diff options
context:
space:
mode:
authorXavier Roche <xroche@users.noreply.github.com>2012-03-19 13:00:51 +0000
committerXavier Roche <xroche@users.noreply.github.com>2012-03-19 13:00:51 +0000
commit1ecdfbe3b855b1f13bcddccc20135f7e35f171a6 (patch)
tree253b431bc06ce806ee47aa7b7c4285da8c5503d6 /src/htscoremain.c
parent4aec03f2cbabc19cf31e7d6f9fdcd6c84cfa861e (diff)
httrack 3.43.12
Diffstat (limited to 'src/htscoremain.c')
-rw-r--r--src/htscoremain.c81
1 files changed, 61 insertions, 20 deletions
diff --git a/src/htscoremain.c b/src/htscoremain.c
index a118c5f..bfaebaf 100644
--- a/src/htscoremain.c
+++ b/src/htscoremain.c
@@ -140,7 +140,19 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
// Create options
_DEBUG_HEAD=0; // pas de debuggage en têtes
-
+
+ /* command max-size check (3.43 ; 3.42-4) */
+ {
+ int i;
+ for(i = 0 ; i < argc ; i++) {
+ if (strlen(argv[i]) >= HTS_CDLMAXSIZE) {
+ HTS_PANIC_PRINTF("argument too long");
+ htsmain_free();
+ return -1;
+ }
+ }
+ }
+
/* Init root dir */
hts_rootdir(argv[0]);
@@ -231,7 +243,6 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
/* Vérifier argv[] non vide */
if (strnotempty(argv[na])) {
- assertf(strlen(argv[na]) < HTS_CDLMAXSIZE);
/* Vérifier Commande (alias) */
result=optalias_check(argc,(const char * const *)argv,na,
@@ -262,6 +273,9 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
help(argv[0],!opt->quiet);
htsmain_free();
return 0;
+ } else if (strcmp(tmp_argv[0],"-#h")==0) {
+ printf("HTTrack version "HTTRACK_VERSION"%s\n", hts_get_version_info(opt));
+ return 0;
} else {
if (strncmp(tmp_argv[0],"--",2)) { /* pas */
if ((strchr(tmp_argv[0],'q')!=NULL))
@@ -535,7 +549,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
//
} else if (strfield2(argv[i]+2,"updatehttrack")) {
#ifdef _WIN32
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"%s not available in this version",argv[i]);
HTS_PANIC_PRINTF(s);
htsmain_free();
@@ -562,7 +576,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
}
//
else {
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"%s not recognized",argv[i]);
HTS_PANIC_PRINTF(s);
htsmain_free();
@@ -728,10 +742,10 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
}
} else { // aucune URL définie et pas de cache
- if (argc > 1 && strcmp(argv[0], "-#h") == 0) {
- printf("HTTrack version "HTTRACK_VERSION"%s\n", hts_get_version_info(opt));
- exit(0);
- }
+ //if (argc > 1 && strcmp(argv[1], "-#h") == 0) {
+ // printf("HTTrack version "HTTRACK_VERSION"%s\n", hts_get_version_info(opt));
+ // exit(0);
+ //}
if (opt->quiet) {
help(argv[0],!opt->quiet);
htsmain_free();
@@ -819,10 +833,10 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
for(na=1;na<argc;na++) {
if (argv[na][0]=='"') {
- char BIGSTK tempo[HTS_CDLMAXSIZE];
+ char BIGSTK tempo[HTS_CDLMAXSIZE + 256];
strcpybuff(tempo,argv[na]+1);
if (tempo[strlen(tempo)-1]!='"') {
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"Missing quote in %s",argv[na]);
HTS_PANIC_PRINTF(s);
htsmain_free();
@@ -1119,6 +1133,10 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
if (fp != NULL) {
int cl = (int) strlen(url);
ensureUrlCapacity(url, url_sz, cl + fz + 8192);
+ if (cl > 0) { /* don't stick! (3.43) */
+ url[cl] = ' ';
+ cl++;
+ }
if (fread(url + cl, 1, fz, fp) != fz) {
HTS_PANIC_PRINTF("File url list could not be read");
htsmain_free();
@@ -1325,7 +1343,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
break;
default: {
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"invalid option %%%c\n",*com);
HTS_PANIC_PRINTF(s);
htsmain_free();
@@ -1372,7 +1390,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
break;
default: {
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"invalid option %%%c\n",*com);
HTS_PANIC_PRINTF(s);
htsmain_free();
@@ -1587,11 +1605,13 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
return 0;
break;
case '~': /* internal lib test */
- {
- char thisIsATestYouShouldSeeAnError[12];
- strcpybuff(thisIsATestYouShouldSeeAnError, "0123456789012345678901234567890123456789");
- return 0;
- }
+ //Disabled because choke on GCC 4.3 (toni from links2linux.de)
+ //{
+ // char thisIsATestYouShouldSeeAnError[12];
+ // const char *const bufferOverflowTest = "0123456789012345678901234567890123456789";
+ // strcpybuff(thisIsATestYouShouldSeeAnError, bufferOverflowTest);
+ // return 0;
+ //}
break;
case 'f': opt->flush=1; break;
case 'h':
@@ -1773,7 +1793,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
break;
//
default: {
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"invalid option %c\n",*com);
HTS_PANIC_PRINTF(s);
htsmain_free();
@@ -1958,13 +1978,13 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
else
opt->errlog=opt->log;
if (opt->log==NULL) {
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"Unable to create log file %s",fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),"hts-log.txt"));
HTS_PANIC_PRINTF(s);
htsmain_free();
return -1;
} else if (opt->errlog==NULL) {
- char s[HTS_CDLMAXSIZE];
+ char s[HTS_CDLMAXSIZE + 256];
sprintf(s,"Unable to create log file %s",fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),"hts-err.txt"));
HTS_PANIC_PRINTF(s);
htsmain_free();
@@ -2200,6 +2220,27 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp *opt) {
}
}
+ /* Not or cleanly interrupted; erase hts-cache/ref temporary directory */
+ if (opt->state.exit_xh == 0) {
+ // erase ref files if not interrupted
+ DIR *dir;
+ struct dirent *entry;
+ for(dir = opendir(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), CACHE_REFNAME))
+ ; dir != NULL && ( entry = readdir(dir) ) != NULL
+ ; )
+ {
+ if (entry->d_name[0] != '\0' && entry->d_name[0] != '.') {
+ char *f = OPT_GET_BUFF(opt);
+ sprintf(f, "%s/%s", CACHE_REFNAME, entry->d_name);
+ (void)unlink(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), f));
+ }
+ }
+ if (dir != NULL) {
+ (void) closedir(dir);
+ }
+ (void)rmdir(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), CACHE_REFNAME));
+ }
+
/* Info for wrappers */
if ( (opt->debug>0) && (opt->log!=NULL) ) {
HTS_LOG(opt,LOG_INFO); fprintf(opt->log,"engine: free"LF);