OSDN Git Service

v1.0.2.8
[ntch/develop.git] / src / _2ch / search_2ch.c
index d3069e1..58e137b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2013 Akira Ohta (akohta001@gmail.com)
+/* Copyright 2013,2014 Akira Ohta (akohta001@gmail.com)
     This file is part of ntch.
 
     The ntch is free software: you can redistribute it and/or modify
@@ -97,6 +97,80 @@ nt_searched_thread_handle nt_searched_thread_alloc(
        return &sthreadp->handle;
 }
 
+nt_searched_thread_handle nt_searched_thread_alloc2(
+               nt_2ch_model_handle h_model, 
+               const char *url)
+{
+       wchar_t *board_name;
+       wchar_t *dat_name;
+       nt_searched_thread_tp sthreadp;
+       char *cptr, *cptr1;
+       nt_board_handle h_board;
+       wchar_t wbuf[128];
+       char buf[128];
+       int len;
+       
+       cptr = strstr(url, "test/read.cgi/");
+       if(!cptr)
+               return NULL;
+       cptr += strlen("test/read.cgi/");
+       
+       cptr1 = strchr(cptr, '/');
+       if(!cptr1)
+               return NULL;
+       len = cptr1 - cptr;
+       memcpy(buf, cptr, len);
+       buf[len] = '\0';
+       
+       if((size_t)-1 == mbstowcs(wbuf, buf, sizeof(wbuf)/sizeof(wchar_t))){
+               return NULL;
+       }
+       
+       h_board = nt_get_board_by_address_match(h_model, wbuf);
+       if(!h_board){
+               return NULL;
+       }
+       board_name = nt_w_str_clone(nt_board_get_name(h_board));
+       nt_board_release_ref(h_board);
+       if(!board_name){
+               return NULL;
+       }
+       cptr1++;
+       cptr = strchr(cptr1, '/');
+       if(!cptr){
+               free(board_name);
+               return NULL;
+       }
+       len = cptr - cptr1;
+       memcpy(buf, cptr1, len);
+       strcpy(buf+len, ".dat");
+       buf[len+4] = '\0';
+       
+       if((size_t)-1 == mbstowcs(wbuf, buf, sizeof(wbuf)/sizeof(wchar_t))){
+               free(board_name);
+               return NULL;
+       }
+       dat_name = nt_w_str_clone(wbuf);
+       if(!dat_name){
+               free(board_name);
+               return NULL;
+       }
+       
+       sthreadp = malloc(sizeof(nt_searched_thread_t));
+       if(!sthreadp){
+               free(board_name);
+               free(dat_name);
+               return NULL;
+       }
+       
+       sthreadp->board_name = board_name;
+       sthreadp->dat_name = dat_name;
+       sthreadp->title = NULL;
+       sthreadp->handle.chk_sum = NT_SEARCHED_THREAD_CHK_SUM;
+       sthreadp->ref_count = 1;
+       return &sthreadp->handle;
+}
+
 int nt_searched_thread_add_ref(nt_searched_thread_handle h_searched_thread)
 {
        nt_searched_thread_tp sthreadp;