|
Lines 91-96
Link Here
|
| 91 |
int btContent::CreateMetainfoFile(const char *mifn) |
91 |
int btContent::CreateMetainfoFile(const char *mifn) |
| 92 |
{ |
92 |
{ |
| 93 |
FILE *fp; |
93 |
FILE *fp; |
|
|
94 |
char *m_ann1, *m_ann2, *m_ann3, *m_ann_tmp; |
| 95 |
int m_announce_count, list_delimiter; |
| 96 |
|
| 94 |
fp = fopen(mifn, "r"); |
97 |
fp = fopen(mifn, "r"); |
| 95 |
if( fp ){ |
98 |
if( fp ){ |
| 96 |
CONSOLE.Warning(1, "error, file \"%s\" already exists.", mifn); |
99 |
CONSOLE.Warning(1, "error, file \"%s\" already exists.", mifn); |
|
Lines 109-116
Link Here
|
| 109 |
if( bencode_begin_dict(fp) != 1 ) goto err; |
112 |
if( bencode_begin_dict(fp) != 1 ) goto err; |
| 110 |
|
113 |
|
| 111 |
// announce |
114 |
// announce |
| 112 |
if( bencode_str("announce", fp) != 1 ) goto err; |
115 |
if ((strchr(m_announce, '|') == NULL) && (strchr(m_announce, ',') == NULL)) { |
| 113 |
if( bencode_str(m_announce, fp) != 1 ) goto err; |
116 |
if (bencode_str("announce", fp) != 1) goto err; |
|
|
117 |
if (bencode_str(m_announce, fp) != 1) goto err; |
| 118 |
} else { |
| 119 |
CONSOLE.Debug("announce_list detected:\n"); |
| 120 |
m_ann1 = m_announce; |
| 121 |
m_ann_tmp = (char *)malloc(strlen(m_announce)); |
| 122 |
m_announce_count = 0; |
| 123 |
m_ann2 = strchr(m_ann1, ','); |
| 124 |
m_ann3 = strchr(m_ann1, '|'); |
| 125 |
while (m_ann2 || m_ann3) { |
| 126 |
if (m_ann2 && !m_ann3) { |
| 127 |
strlcpy(m_ann_tmp, m_ann1, m_ann2 - m_ann1 + 1); |
| 128 |
m_ann1 = m_ann2 + sizeof(','); |
| 129 |
list_delimiter = 0; |
| 130 |
} else { |
| 131 |
if (!m_ann2 && m_ann3) { |
| 132 |
strlcpy(m_ann_tmp, m_ann1, m_ann3 - m_ann1 + 1); |
| 133 |
m_ann1 = m_ann3 + sizeof('|'); |
| 134 |
list_delimiter = 1; |
| 135 |
} else { |
| 136 |
if (m_ann2 < m_ann3) { |
| 137 |
strlcpy(m_ann_tmp, m_ann1, m_ann2 - m_ann1 + 1); |
| 138 |
m_ann1 = m_ann2 + sizeof(','); |
| 139 |
list_delimiter = 0; |
| 140 |
} else { |
| 141 |
strlcpy(m_ann_tmp, m_ann1, m_ann3 - m_ann1 + 1); |
| 142 |
m_ann1 = m_ann3 + sizeof('|'); |
| 143 |
list_delimiter = 1; |
| 144 |
} |
| 145 |
} |
| 146 |
} |
| 147 |
if (m_announce_count == 0) { |
| 148 |
if (bencode_str("announce", fp) != 1) goto err; |
| 149 |
if (bencode_str(m_ann_tmp, fp) != 1) goto err; |
| 150 |
if (bencode_str("announce-list", fp) != 1) goto err; |
| 151 |
if (fwrite("ll", strlen("ll"), 1, fp) != 1) goto err; |
| 152 |
} |
| 153 |
m_announce_count++; |
| 154 |
CONSOLE.Debug(" URL: %s\n", m_ann_tmp); |
| 155 |
if (bencode_str(m_ann_tmp, fp) != 1) goto err; |
| 156 |
if (list_delimiter == 1) { |
| 157 |
if (fwrite("el", strlen("el"), 1, fp) != 1) goto err; |
| 158 |
} |
| 159 |
m_ann2 = strchr(m_ann1, ','); |
| 160 |
m_ann3 = strchr(m_ann1, '|'); |
| 161 |
} |
| 162 |
CONSOLE.Debug(" URL: %s\n", m_ann1); |
| 163 |
if (bencode_str(m_ann1, fp) != 1) goto err; |
| 164 |
if (fwrite("ee", strlen("ee"), 1, fp) != 1) goto err; |
| 165 |
} |
| 114 |
// create date |
166 |
// create date |
| 115 |
if( bencode_str("creation date", fp) != 1 ) goto err; |
167 |
if( bencode_str("creation date", fp) != 1 ) goto err; |
| 116 |
if( bencode_int(m_create_date, fp) != 1 ) goto err; |
168 |
if( bencode_int(m_create_date, fp) != 1 ) goto err; |
|
Lines 137-142
Link Here
|
| 137 |
return 0; |
189 |
return 0; |
| 138 |
err: |
190 |
err: |
| 139 |
if( fp ) fclose(fp); |
191 |
if( fp ) fclose(fp); |
|
|
192 |
if (m_ann_tmp) { |
| 193 |
free(m_ann_tmp); |
| 194 |
} |
| 140 |
return -1; |
195 |
return -1; |
| 141 |
} |
196 |
} |
| 142 |
|
197 |
|