ref: 34ea50cb12ee99910d3e541042b32e65db9fcc81
parent: db95a8068be42a8887d33d062980f326262e5007
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue Apr 24 19:50:08 EDT 2012
ip/torrent: alphabetically order dictionary keys when producing torrent
--- a/sys/src/cmd/ip/torrent.c
+++ b/sys/src/cmd/ip/torrent.c
@@ -850,8 +850,11 @@
if(npieces <= 8*1024 || blocksize >= 2*1024*1024)
break;
}
- print("d");- print("8:announce%ld:%s", strlen(alist->str), alist->str);+
+ /*
+ * keys in dictionaries have to be ordered alphabetically
+ */
+ print("d8:announce%ld:%s", strlen(alist->str), alist->str); if(alist->next){ print("13:announce-listl"); print("l%ld:%se", strlen(alist->str), alist->str);@@ -859,19 +862,10 @@
print("l%ld:%se", strlen(alist->str), alist->str); print("e");}
- if(wlist){- if(wlist->next){- print("8:url-listl");- for(; wlist; wlist = wlist->next)
- print("%ld:%s", strlen(wlist->str), wlist->str);- print("e");- } else
- print("8:url-list%ld:%s", strlen(wlist->str), wlist->str);- }
- print("4:info");- print("d");- print("4:name%ld:%s", strlen(d->name), d->name);+
+ print("4:infod"); print("6:lengthi%llde", d->length);+ print("4:name%ld:%s", strlen(d->name), d->name); print("12:piece lengthi%de", blocksize); print("6:pieces%d:", npieces*sizeof(h));free(d);
@@ -884,13 +878,24 @@
}
npieces--;
}
- free(b);
if(npieces){ werrstr("read failed: %r");return -1;
}
+ free(b);
print("e");+
+ if(wlist){+ if(wlist->next){+ print("8:url-listl");+ for(; wlist; wlist = wlist->next)
+ print("%ld:%s", strlen(wlist->str), wlist->str);+ print("e");+ } else
+ print("8:url-list%ld:%s", strlen(wlist->str), wlist->str);+ }
print("e");+
return 0;
}
--
⑨