From fa32682a5bfdd176e582cf6128a3c40c1c0cd189 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Wed, 4 May 2011 16:38:07 +0900 Subject: Releasing debian version 0.5.2-7 --- .../patches/100_download-error-short-write.patch | 188 +++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 debian/patches/100_download-error-short-write.patch (limited to 'debian/patches/100_download-error-short-write.patch') diff --git a/debian/patches/100_download-error-short-write.patch b/debian/patches/100_download-error-short-write.patch new file mode 100644 index 0000000..d1af5aa --- /dev/null +++ b/debian/patches/100_download-error-short-write.patch @@ -0,0 +1,188 @@ +Description: Tell a download failure when full disk +Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=185006#22 +Author: Karsten Schoelzel +Bug-Debian: http://bugs.debian.org/185006 + +diff -urNp w3m-0.5.2.orig/file.c w3m-0.5.2/file.c +--- w3m-0.5.2.orig/file.c 2007-05-24 00:06:05.000000000 +0900 ++++ w3m-0.5.2/file.c 2010-07-07 22:12:03.000000000 +0900 +@@ -7749,7 +7749,13 @@ save2tmp(URLFile uf, char *tmpf) + { + Str buf = Strnew_size(SAVE_BUF_SIZE); + while (UFread(&uf, buf, SAVE_BUF_SIZE)) { +- Strfputs(buf, ff); ++ if (Strfputs(buf, ff) != buf->length) { ++ bcopy(env_bak, AbortLoading, sizeof(JMP_BUF)); ++ TRAP_OFF; ++ fclose(ff); ++ current_content_length = 0; ++ return -2; ++ } + linelen += buf->length; + showProgress(&linelen, &trbyte); + } +@@ -8078,16 +8084,20 @@ doFileSave(URLFile uf, char *defstr) + flush_tty(); + pid = fork(); + if (!pid) { ++ int err; + if ((uf.content_encoding != CMP_NOCOMPRESS) && AutoUncompress) { + uncompress_stream(&uf, &tmpf); + if (tmpf) + unlink(tmpf); + } + setup_child(FALSE, 0, UFfileno(&uf)); +- if (!save2tmp(uf, p) && PreserveTimestamp && uf.modtime != -1) ++ err = save2tmp(uf, p); ++ if (err == 0 && PreserveTimestamp && uf.modtime != -1) + setModtime(p, uf.modtime); + UFclose(&uf); + unlink(lock); ++ if (err != 0) ++ exit(-err); + exit(0); + } + addDownloadList(pid, uf.url, p, lock, current_content_length); +diff -urNp w3m-0.5.2.orig/fm.h w3m-0.5.2/fm.h +--- w3m-0.5.2.orig/fm.h 2007-05-30 13:47:24.000000000 +0900 ++++ w3m-0.5.2/fm.h 2010-07-07 21:51:07.000000000 +0900 +@@ -517,7 +517,8 @@ typedef struct _DownloadList { + char *lock; + clen_t size; + time_t time; +- int ok; ++ int running; ++ int err; + struct _DownloadList *next; + struct _DownloadList *prev; + } DownloadList; +diff -urNp w3m-0.5.2.orig/main.c w3m-0.5.2/main.c +--- w3m-0.5.2.orig/main.c 2007-05-31 10:19:50.000000000 +0900 ++++ w3m-0.5.2/main.c 2010-07-07 21:51:07.000000000 +0900 +@@ -323,21 +323,26 @@ static void + sig_chld(int signo) + { + int p_stat; +-#ifdef HAVE_WAITPID + pid_t pid; + ++#ifdef HAVE_WAITPID + while ((pid = waitpid(-1, &p_stat, WNOHANG)) > 0) { +- ; +- } + #elif HAVE_WAIT3 +- int pid; +- + while ((pid = wait3(&p_stat, WNOHANG, NULL)) > 0) { +- ; +- } + #else +- wait(&p_stat); ++ if ((pid = wait(&p_stat)) > 0) { + #endif ++ DownloadList *d; ++ ++ if (WIFEXITED(p_stat)) { ++ for (d = FirstDL; d != NULL; d = d->next) { ++ if (d->pid == pid) { ++ d->err = WEXITSTATUS(p_stat); ++ break; ++ } ++ } ++ } ++ } + mySignal(SIGCHLD, sig_chld); + return; + } +@@ -6355,7 +6360,8 @@ addDownloadList(pid_t pid, char *url, ch + d->lock = lock; + d->size = size; + d->time = time(0); +- d->ok = FALSE; ++ d->running = TRUE; ++ d->err = 0; + d->next = NULL; + d->prev = LastDL; + if (LastDL) +@@ -6375,7 +6381,7 @@ checkDownloadList(void) + if (!FirstDL) + return FALSE; + for (d = FirstDL; d != NULL; d = d->next) { +- if (!d->ok && !lstat(d->lock, &st)) ++ if (d->running && !lstat(d->lock, &st)) + return TRUE; + } + return FALSE; +@@ -6415,15 +6421,16 @@ DownloadListBuffer(void) + "

\n"); + for (d = LastDL; d != NULL; d = d->prev) { + if (lstat(d->lock, &st)) +- d->ok = TRUE; ++ d->running = FALSE; + Strcat_charp(src, "
\n");
+ 	Strcat(src, Sprintf("%s\n  --> %s\n  ", html_quote(d->url),
+ 			    html_quote(conv_from_system(d->save))));
+ 	duration = cur_time - d->time;
+ 	if (!stat(d->save, &st)) {
+ 	    size = st.st_size;
+-	    if (d->ok) {
+-		d->size = size;
++	    if (!d->running) {
++		if (!d->err)
++		    d->size = size;
+ 		duration = st.st_mtime - d->time;
+ 	    }
+ 	}
+@@ -6442,7 +6449,7 @@ DownloadListBuffer(void)
+ 		Strcat_char(src, '_');
+ 	    Strcat_char(src, '\n');
+ 	}
+-	if (!d->ok && size < d->size)
++	if ((d->running || d->err) && size < d->size)
+ 	    Strcat(src, Sprintf("  %s / %s bytes (%d%%)",
+ 				convert_size3(size), convert_size3(d->size),
+ 				(int)(100.0 * size / d->size)));
+@@ -6453,20 +6460,28 @@ DownloadListBuffer(void)
+ 	    Strcat(src, Sprintf("  %02d:%02d:%02d  rate %s/sec",
+ 				duration / (60 * 60), (duration / 60) % 60,
+ 				duration % 60, convert_size(rate, 1)));
+-	    if (!d->ok && size < d->size && rate) {
++	    if (d->running && size < d->size && rate) {
+ 		eta = (d->size - size) / rate;
+ 		Strcat(src, Sprintf("  eta %02d:%02d:%02d", eta / (60 * 60),
+ 				    (eta / 60) % 60, eta % 60));
+ 	    }
+ 	}
+ 	Strcat_char(src, '\n');
+-	if (d->ok) {
++	if (!d->running) {
+ 	    Strcat(src, Sprintf("",
+ 				d->pid));
+-	    if (size < d->size)
+-		Strcat_charp(src, " Download incompleted");
+-	    else
+-		Strcat_charp(src, " Download completed");
++	    switch (d->err) {
++	    case 0: if (size < d->size)
++			Strcat_charp(src, " Download ended but probably not complete");
++		    else
++			Strcat_charp(src, " Download complete");
++		    break;
++	    case 1: Strcat_charp(src, " Error: could not open destination file");
++		    break;
++	    case 2: Strcat_charp(src, " Error: could not write to file (disk full)");
++		    break;
++	    default: Strcat_charp(src, " Error: unknown reason");
++	    }
+ 	}
+ 	else
+ 	    Strcat(src, Sprintf("",
+@@ -6520,7 +6535,7 @@ stopDownload(void)
+     if (!FirstDL)
+ 	return;
+     for (d = FirstDL; d != NULL; d = d->next) {
+-	if (d->ok)
++	if (!d->running)
+ 	    continue;
+ #ifndef __MINGW32_VERSION
+ 	kill(d->pid, SIGKILL);
-- 
cgit v1.2.3