#include <stdio.h>
#include <string.h>
#define d_CheckStrNum 2
#define d_CheckStrList {d_HttpAddressStr, d_HttpsAddressStr}
#define d_HttpAddressStr "\"http://"
#define d_HttpsAddressStr "\"https://"
#define d_CheckDenyStrNum 4
#define d_CheckDenyStrList {d_JpegThumbStr, d_JpgThumbStr, d_GifThumbStr, d_PngThumbStr}
#define d_JpegThumbStr "s.jpeg"
#define d_JpgThumbStr "s.jpg"
#define d_GifThumbStr "s.gif"
#define d_PngThumbStr "s.png"
#define d_BufferInSize 1024
#define d_BufferOutSize 1024
int ExtractInnerDC(FILE *s1, FILE *s2);
int OptimizeDC(FILE *s1, FILE *s2);
int SafeFileClose(FILE *s1);
int main(int argc, char *argv[]){
FILE *fin, *fout, *ftemp;
if((fin
= fopen("list.txt", "rb")) && (fout
= fopen("list.DCurls", "wt")) && (ftemp
= fopen("~temp.DCurls", "w+t"))){ ExtractInnerDC(fin, ftemp);
OptimizeDC(ftemp, fout);
SafeFileClose(ftemp);
}
else printf("file open error.\n");
SafeFileClose(fin);
SafeFileClose(fout);
SafeFileClose(ftemp);
return 0;
}
int ExtractInnerDC(FILE *s1, FILE *s2){
char bufferin[d_BufferInSize], bufferout[d_BufferOutSize], temp, *dynamicbip, *dynamicbop, *strlist[d_CheckStrNum] = d_CheckStrList, **dynamicslp;
int mode = 0, readsuccessnum, counter, accordflag = 0, i, strlistlen[d_CheckStrNum], *dynamicsllp;
for(i
= 0, dynamicslp
= strlist
, dynamicsllp
= strlistlen
; i
< d_CheckStrNum
; i
++) *dynamicsllp
++ = strlen(*dynamicslp
++); dynamicbop = bufferout;
while(readsuccessnum
= fread(dynamicbip
= bufferin
, sizeof(char), d_BufferInSize
* sizeof(char), s1
)){ for(counter = 0; counter < readsuccessnum; counter++, dynamicbip++){
if(*dynamicbip == '"') mode++;
if(mode){
*dynamicbop++ = *dynamicbip;
if(mode == 2){
*dynamicbop = '\0';
for(i
= 0, dynamicslp
= strlist
, dynamicsllp
= strlistlen
; i
< d_CheckStrNum
&& !(accordflag
= !strncmp(bufferout
, *dynamicslp
++, *dynamicsllp
++)); i
++); if(accordflag
) fprintf(s2
, "%s\n", bufferout
); accordflag = mode = 0;
dynamicbop = bufferout;
}
}
}
}
return 0;
}
int OptimizeDC(FILE *s1, FILE *s2){
char buffer[d_BufferOutSize], *dynamicbp, *denystrlist[d_CheckDenyStrNum] = d_CheckDenyStrList, **dynamicdslp;
int accordflag, i, j, limit, denystrlistlen[d_CheckDenyStrNum], *dynamicdsllp;
for(i
= 0, dynamicdslp
= denystrlist
, dynamicdsllp
= denystrlistlen
; i
< d_CheckDenyStrNum
; i
++) *dynamicdsllp
++ = strlen(*dynamicdslp
++); while(fgets(buffer
, d_BufferOutSize
- 1, s1
) != NULL
){ for(i
= 0, dynamicdslp
= denystrlist
, dynamicdsllp
= denystrlistlen
, accordflag
= 0; i
< d_CheckDenyStrNum
&& !accordflag
; i
++, dynamicdslp
++, dynamicdsllp
++) for(j
= 0, dynamicbp
= buffer
, limit
= strlen(buffer
) - *dynamicdsllp
; j
< limit
&& !(accordflag
= !strncmp(dynamicbp
++, *dynamicdslp
, *dynamicdsllp
)); j
++); if(!accordflag
) fputs(buffer
, s2
); }
return 0;
}
int SafeFileClose(FILE *s1){
if(s1 != NULL){
s1 = NULL;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgZF9DaGVja1N0ck51bSAyCiNkZWZpbmUgZF9DaGVja1N0ckxpc3Qge2RfSHR0cEFkZHJlc3NTdHIsIGRfSHR0cHNBZGRyZXNzU3RyfQojZGVmaW5lIGRfSHR0cEFkZHJlc3NTdHIgIlwiaHR0cDovLyIKI2RlZmluZSBkX0h0dHBzQWRkcmVzc1N0ciAiXCJodHRwczovLyIKI2RlZmluZSBkX0NoZWNrRGVueVN0ck51bSA0CiNkZWZpbmUgZF9DaGVja0RlbnlTdHJMaXN0IHtkX0pwZWdUaHVtYlN0ciwgZF9KcGdUaHVtYlN0ciwgZF9HaWZUaHVtYlN0ciwgZF9QbmdUaHVtYlN0cn0KI2RlZmluZSBkX0pwZWdUaHVtYlN0ciAicy5qcGVnIgojZGVmaW5lIGRfSnBnVGh1bWJTdHIgInMuanBnIgojZGVmaW5lIGRfR2lmVGh1bWJTdHIgInMuZ2lmIgojZGVmaW5lIGRfUG5nVGh1bWJTdHIgInMucG5nIgojZGVmaW5lIGRfQnVmZmVySW5TaXplIDEwMjQKI2RlZmluZSBkX0J1ZmZlck91dFNpemUgMTAyNAoKaW50IEV4dHJhY3RJbm5lckRDKEZJTEUgKnMxLCBGSUxFICpzMik7CmludCBPcHRpbWl6ZURDKEZJTEUgKnMxLCBGSUxFICpzMik7CmludCBTYWZlRmlsZUNsb3NlKEZJTEUgKnMxKTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pewoJRklMRSAqZmluLCAqZm91dCwgKmZ0ZW1wOwoKCWlmKChmaW4gPSBmb3BlbigibGlzdC50eHQiLCAicmIiKSkgJiYgKGZvdXQgPSBmb3BlbigibGlzdC5EQ3VybHMiLCAid3QiKSkgJiYgKGZ0ZW1wID0gZm9wZW4oIn50ZW1wLkRDdXJscyIsICJ3K3QiKSkpewoJCUV4dHJhY3RJbm5lckRDKGZpbiwgZnRlbXApOwoJCU9wdGltaXplREMoZnRlbXAsIGZvdXQpOwoJCVNhZmVGaWxlQ2xvc2UoZnRlbXApOwoJCXJlbW92ZSgifnRlbXAuREN1cmxzIik7Cgl9CgllbHNlIHByaW50ZigiZmlsZSBvcGVuIGVycm9yLlxuIik7CgoJU2FmZUZpbGVDbG9zZShmaW4pOwoJU2FmZUZpbGVDbG9zZShmb3V0KTsKCVNhZmVGaWxlQ2xvc2UoZnRlbXApOwoKCXJldHVybiAwOwp9CgppbnQgRXh0cmFjdElubmVyREMoRklMRSAqczEsIEZJTEUgKnMyKXsKCWNoYXIgYnVmZmVyaW5bZF9CdWZmZXJJblNpemVdLCBidWZmZXJvdXRbZF9CdWZmZXJPdXRTaXplXSwgdGVtcCwgKmR5bmFtaWNiaXAsICpkeW5hbWljYm9wLCAqc3RybGlzdFtkX0NoZWNrU3RyTnVtXSA9IGRfQ2hlY2tTdHJMaXN0LCAqKmR5bmFtaWNzbHA7CglpbnQgbW9kZSA9IDAsIHJlYWRzdWNjZXNzbnVtLCBjb3VudGVyLCBhY2NvcmRmbGFnID0gMCwgaSwgc3RybGlzdGxlbltkX0NoZWNrU3RyTnVtXSwgKmR5bmFtaWNzbGxwOwoKCWZvcihpID0gMCwgZHluYW1pY3NscCA9IHN0cmxpc3QsIGR5bmFtaWNzbGxwID0gc3RybGlzdGxlbjsgaSA8IGRfQ2hlY2tTdHJOdW07IGkrKykgKmR5bmFtaWNzbGxwKysgPSBzdHJsZW4oKmR5bmFtaWNzbHArKyk7CglkeW5hbWljYm9wID0gYnVmZmVyb3V0OwoJd2hpbGUocmVhZHN1Y2Nlc3NudW0gPSBmcmVhZChkeW5hbWljYmlwID0gYnVmZmVyaW4sIHNpemVvZihjaGFyKSwgZF9CdWZmZXJJblNpemUgKiBzaXplb2YoY2hhciksIHMxKSl7CgkJZm9yKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgcmVhZHN1Y2Nlc3NudW07IGNvdW50ZXIrKywgZHluYW1pY2JpcCsrKXsKCQkJaWYoKmR5bmFtaWNiaXAgPT0gJyInKSBtb2RlKys7CgkJCWlmKG1vZGUpewoJCQkJKmR5bmFtaWNib3ArKyA9ICpkeW5hbWljYmlwOwoJCQkJaWYobW9kZSA9PSAyKXsKCQkJCQkqZHluYW1pY2JvcCA9ICdcMCc7CgkJCQkJZm9yKGkgPSAwLCBkeW5hbWljc2xwID0gc3RybGlzdCwgZHluYW1pY3NsbHAgPSBzdHJsaXN0bGVuOyBpIDwgZF9DaGVja1N0ck51bSAmJiAhKGFjY29yZGZsYWcgPSAhc3RybmNtcChidWZmZXJvdXQsICpkeW5hbWljc2xwKyssICpkeW5hbWljc2xscCsrKSk7IGkrKyk7CgkJCQkJaWYoYWNjb3JkZmxhZykgZnByaW50ZihzMiwgIiVzXG4iLCBidWZmZXJvdXQpOwoJCQkJCWFjY29yZGZsYWcgPSBtb2RlID0gMDsKCQkJCQlkeW5hbWljYm9wID0gYnVmZmVyb3V0OwoJCQkJfQoJCQl9CgkJfQoJfQoKCWZzZWVrKHMxLCBTRUVLX1NFVCwgMCk7Cglmc2VlayhzMiwgU0VFS19TRVQsIDApOwoKCXJldHVybiAwOwp9CgppbnQgT3B0aW1pemVEQyhGSUxFICpzMSwgRklMRSAqczIpewoJY2hhciBidWZmZXJbZF9CdWZmZXJPdXRTaXplXSwgKmR5bmFtaWNicCwgKmRlbnlzdHJsaXN0W2RfQ2hlY2tEZW55U3RyTnVtXSA9IGRfQ2hlY2tEZW55U3RyTGlzdCwgKipkeW5hbWljZHNscDsKCWludCBhY2NvcmRmbGFnLCBpLCBqLCBsaW1pdCwgZGVueXN0cmxpc3RsZW5bZF9DaGVja0RlbnlTdHJOdW1dLCAqZHluYW1pY2RzbGxwOwoKCWZvcihpID0gMCwgZHluYW1pY2RzbHAgPSBkZW55c3RybGlzdCwgZHluYW1pY2RzbGxwID0gZGVueXN0cmxpc3RsZW47IGkgPCBkX0NoZWNrRGVueVN0ck51bTsgaSsrKSAqZHluYW1pY2RzbGxwKysgPSBzdHJsZW4oKmR5bmFtaWNkc2xwKyspOwoJd2hpbGUoZmdldHMoYnVmZmVyLCBkX0J1ZmZlck91dFNpemUgLSAxLCBzMSkgIT0gTlVMTCl7CgkJZm9yKGkgPSAwLCBkeW5hbWljZHNscCA9IGRlbnlzdHJsaXN0LCBkeW5hbWljZHNsbHAgPSBkZW55c3RybGlzdGxlbiwgYWNjb3JkZmxhZyA9IDA7IGkgPCBkX0NoZWNrRGVueVN0ck51bSAmJiAhYWNjb3JkZmxhZzsgaSsrLCBkeW5hbWljZHNscCsrLCBkeW5hbWljZHNsbHArKykgZm9yKGogPSAwLCBkeW5hbWljYnAgPSBidWZmZXIsIGxpbWl0ID0gc3RybGVuKGJ1ZmZlcikgLSAqZHluYW1pY2RzbGxwOyBqIDwgbGltaXQgJiYgIShhY2NvcmRmbGFnID0gIXN0cm5jbXAoZHluYW1pY2JwKyssICpkeW5hbWljZHNscCwgKmR5bmFtaWNkc2xscCkpOyBqKyspOwoJCWlmKCFhY2NvcmRmbGFnKSBmcHV0cyhidWZmZXIsIHMyKTsKCX0KCglyZXR1cm4gMDsKfQoKaW50IFNhZmVGaWxlQ2xvc2UoRklMRSAqczEpewoKCWlmKHMxICE9IE5VTEwpewoJCWZjbG9zZShzMSk7CgkJczEgPSBOVUxMOwoJfQoKCXJldHVybiAwOwp9Cg==