Only in elinks: patchfile
Only in elinks/src: linux-2.6.11.8.tar.bz2
diff -pr elinks_old/src/session/download.c elinks/src/session/download.c
*** elinks_old/src/session/download.c 2006-12-23 18:10:38.000000000 -0800
--- elinks/src/session/download.c 2006-12-23 22:36:56.000000000 -0800
*************** create_download_file_do(struct terminal
*** 664,669 ****
--- 664,675 ----
/* O_APPEND means repositioning at the end of file before each write(),
* thus ignoring seek()s and that can hide mysterious bugs. IMHO.
* --pasky */
+
+ /* Can we unlink(file) here if case of if(!resume) unlink(file);
+ * Btw where is the seek or O_APPEND being done. In that case
+ * can't be remove unlink even in the resume case.
+ * --navin */
+
h = open(file, O_CREAT | O_WRONLY | (resume ? 0 : O_TRUNC)
| (sf && !resume ? O_EXCL : 0),
sf ? 0600 : 0666);
*************** get_temp_name(struct uri *uri)
*** 748,768 ****
{
struct string name;
unsigned char *extension;
! /* FIXME
! * We use tempnam() here, which is unsafe (race condition), for now.
! * This should be changed at some time, but it needs an in-depth work
! * of whole download code. --Zas */
! unsigned char *nm = tempnam(NULL, ELINKS_TEMPNAME_PREFIX);
! if (!nm) return NULL;
if (!init_string(&name)) {
! free(nm);
return NULL;
}
add_to_string(&name, nm);
! free(nm);
extension = get_extension_from_uri(uri);
if (extension) {
--- 754,783 ----
{
struct string name;
unsigned char *extension;
! unsigned char *nm,*tm;
! int fd=-1;
! nm=get_tempdir_filename(ELINKS_TEMPNAME_PREFIX"XXXXXX");
!
! if(nm==NULL) {
! return NULL;
! }
!
! if((fd=mkstemp(nm)) < 0) {
! mem_free(nm);
! return NULL;
! }
if (!init_string(&name)) {
! mem_free(nm);
! close(fd);
return NULL;
}
add_to_string(&name, nm);
!
! unlink(nm);
! mem_free(nm);
extension = get_extension_from_uri(uri);
if (extension) {
*************** get_temp_name(struct uri *uri)
*** 770,775 ****
--- 785,792 ----
mem_free(extension);
}
+ close(fd);
+
return name.source;
}
*************** continue_download(void *data, unsigned c
*** 925,931 ****
}
if (type_query->external_handler) {
! /* FIXME: get_temp_name() calls tempnam(). --Zas */
file = get_temp_name(type_query->uri);
if (!file) {
mem_free(codw_hop);
--- 942,950 ----
}
if (type_query->external_handler) {
! /* FIXME: Well this doesn't call tmpnam but calls mkstemp .
! * We cannot be sure that a user hasn't created symlink
! * at this time. So we have to be careful. --navin */
file = get_temp_name(type_query->uri);
if (!file) {
mem_free(codw_hop);
_______________________________________________
elinks-dev mailing list
[email protected]
http://linuxfromscratch.org/mailman/listinfo/elinks-dev