View | Details | Raw Unified | Return to bug 18861
Collapse All | Expand All

(-)ctorrent-dnh3.3.2/btcontent.cpp (-3 / +57 lines)
Lines 103-108 Link Here
103
int btContent::CreateMetainfoFile(const char *mifn)
103
int btContent::CreateMetainfoFile(const char *mifn)
104
{
104
{
105
  FILE *fp;
105
  FILE *fp;
106
  char *m_ann1, *m_ann2, *m_ann3, *m_ann_tmp;
107
  int m_announce_count, list_delimiter;
108
106
  fp = fopen(mifn, "r");
109
  fp = fopen(mifn, "r");
107
  if( fp ){
110
  if( fp ){
108
    CONSOLE.Warning(1, "error, file \"%s\" already exists.", mifn);
111
    CONSOLE.Warning(1, "error, file \"%s\" already exists.", mifn);
Lines 123-131 Link Here
123
  // Entries in dictionary must be sorted by key!
126
  // Entries in dictionary must be sorted by key!
124
127
125
  // announce
128
  // announce
126
  if( bencode_str("announce", fp) != 1 ) goto err;
129
  if ((strchr(m_announce, '|') == NULL) && (strchr(m_announce, ',') == NULL)) {
127
  if( bencode_str(m_announce, fp) != 1 ) goto err;
130
    if (bencode_str("announce", fp) != 1) goto err;
128
131
    if (bencode_str(m_announce, fp) != 1) goto err;
132
  } else {
133
    CONSOLE.Debug("announce_list detected:\n");
134
    m_ann1 = m_announce;
135
    m_ann_tmp = (char *)malloc(strlen(m_announce));
136
    m_announce_count = 0;
137
    m_ann2 = strchr(m_ann1, ',');
138
    m_ann3 = strchr(m_ann1, '|');
139
    while (m_ann2 || m_ann3) {
140
      if (m_ann2 && !m_ann3) {
141
	strlcpy(m_ann_tmp, m_ann1, m_ann2 - m_ann1 + 1);
142
	m_ann1 = m_ann2 + sizeof(',');
143
	list_delimiter = 0;
144
      } else {
145
	if (!m_ann2 && m_ann3) {
146
	  strlcpy(m_ann_tmp, m_ann1, m_ann3 - m_ann1 + 1);
147
	  m_ann1 = m_ann3 + sizeof('|');
148
	  list_delimiter = 1;
149
	} else {
150
	  if (m_ann2 < m_ann3) {
151
	    strlcpy(m_ann_tmp, m_ann1, m_ann2 - m_ann1 + 1);
152
	    m_ann1 = m_ann2 + sizeof(',');
153
	    list_delimiter = 0;
154
	  } else {
155
	    strlcpy(m_ann_tmp, m_ann1, m_ann3 - m_ann1 + 1);
156
	    m_ann1 = m_ann3 + sizeof('|');
157
	    list_delimiter = 1;
158
	  }
159
	}
160
      }
161
      if (m_announce_count == 0) {
162
	if (bencode_str("announce", fp) != 1) goto err;
163
	if (bencode_str(m_ann_tmp, fp) != 1) goto err;
164
	if (bencode_str("announce-list", fp) != 1) goto err;
165
	if (fwrite("ll", strlen("ll"), 1, fp) != 1) goto err;
166
      }
167
      m_announce_count++;
168
      CONSOLE.Debug("  URL: %s\n", m_ann_tmp);
169
      if (bencode_str(m_ann_tmp, fp) != 1) goto err;
170
      if (list_delimiter == 1) {
171
	if (fwrite("el", strlen("el"), 1, fp) != 1) goto err;
172
      }
173
      m_ann2 = strchr(m_ann1, ',');
174
      m_ann3 = strchr(m_ann1, '|');
175
    }
176
    CONSOLE.Debug("  URL: %s\n", m_ann1);
177
    if (bencode_str(m_ann1, fp) != 1) goto err;
178
    if (fwrite("ee", strlen("ee"), 1, fp) != 1) goto err;
179
  }
129
  // comment
180
  // comment
130
  if( arg_comment ){
181
  if( arg_comment ){
131
    if( bencode_str("comment", fp) != 1 ) goto err;
182
    if( bencode_str("comment", fp) != 1 ) goto err;
Lines 172-177 Link Here
172
  return 0;
223
  return 0;
173
 err:
224
 err:
174
  if( fp ) fclose(fp);
225
  if( fp ) fclose(fp);
226
  if (m_ann_tmp) {
227
    free(m_ann_tmp);
228
  }
175
  return -1;
229
  return -1;
176
}
230
}
177
231

Return to bug 18861