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 |
|