Lines Matching refs:parser
226 struct ftp_parselist_data *parser = *parserp;
227 if(parser)
228 Curl_fileinfo_cleanup(parser->file_data);
229 free(parser);
314 struct ftp_parselist_data *parser = ftpwc->parser;
320 finfo->filename = str + parser->offsets.filename;
321 finfo->strings.group = parser->offsets.group ?
322 str + parser->offsets.group : NULL;
323 finfo->strings.perm = parser->offsets.perm ?
324 str + parser->offsets.perm : NULL;
325 finfo->strings.target = parser->offsets.symlink_target ?
326 str + parser->offsets.symlink_target : NULL;
327 finfo->strings.time = str + parser->offsets.time;
328 finfo->strings.user = parser->offsets.user ?
329 str + parser->offsets.user : NULL;
358 ftpwc->parser->file_data = NULL;
370 struct ftp_parselist_data *parser = ftpwc->parser;
375 if(parser->error) { /* error in previous call */
385 if(parser->os_type == OS_TYPE_UNKNOWN && bufflen > 0) {
387 parser->os_type = ISDIGIT(buffer[0]) ? OS_TYPE_WIN_NT : OS_TYPE_UNIX;
396 if(!parser->file_data) { /* tmp file data is not allocated yet */
397 parser->file_data = Curl_fileinfo_alloc();
398 if(!parser->file_data) {
399 parser->error = CURLE_OUT_OF_MEMORY;
402 parser->item_offset = 0;
403 parser->item_length = 0;
404 Curl_dyn_init(&parser->file_data->buf, MAX_FTPLIST_BUFFER);
407 infop = parser->file_data;
411 parser->error = CURLE_OUT_OF_MEMORY;
417 switch(parser->os_type) {
419 switch(parser->state.UNIX.main) {
421 switch(parser->state.UNIX.sub.total_dirsize) {
424 parser->state.UNIX.sub.total_dirsize = PL_UNIX_TOTALSIZE_READING;
425 parser->item_length++;
428 parser->state.UNIX.main = PL_UNIX_FILETYPE;
435 parser->item_length++;
437 parser->item_length--;
441 mem[parser->item_length - 1] = 0;
451 parser->error = CURLE_FTP_BAD_FILE_LIST;
454 parser->state.UNIX.main = PL_UNIX_FILETYPE;
458 parser->error = CURLE_FTP_BAD_FILE_LIST;
492 parser->error = CURLE_FTP_BAD_FILE_LIST;
495 parser->state.UNIX.main = PL_UNIX_PERMISSION;
496 parser->item_length = 0;
497 parser->item_offset = 1;
500 parser->item_length++;
501 if(parser->item_length <= 9) {
503 parser->error = CURLE_FTP_BAD_FILE_LIST;
507 else if(parser->item_length == 10) {
510 parser->error = CURLE_FTP_BAD_FILE_LIST;
514 perm = ftp_pl_get_permission(mem + parser->item_offset);
516 parser->error = CURLE_FTP_BAD_FILE_LIST;
519 parser->file_data->info.flags |= CURLFINFOFLAG_KNOWN_PERM;
520 parser->file_data->info.perm = perm;
521 parser->offsets.perm = parser->item_offset;
523 parser->item_length = 0;
524 parser->state.UNIX.main = PL_UNIX_HLINKS;
525 parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_PRESPACE;
529 switch(parser->state.UNIX.sub.hlinks) {
533 parser->item_offset = len - 1;
534 parser->item_length = 1;
535 parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_NUMBER;
538 parser->error = CURLE_FTP_BAD_FILE_LIST;
544 parser->item_length ++;
548 mem[parser->item_offset + parser->item_length - 1] = 0;
549 hlinks = strtol(mem + parser->item_offset, &p, 10);
551 parser->file_data->info.flags |= CURLFINFOFLAG_KNOWN_HLINKCOUNT;
552 parser->file_data->info.hardlinks = hlinks;
554 parser->item_length = 0;
555 parser->item_offset = 0;
556 parser->state.UNIX.main = PL_UNIX_USER;
557 parser->state.UNIX.sub.user = PL_UNIX_USER_PRESPACE;
560 parser->error = CURLE_FTP_BAD_FILE_LIST;
567 switch(parser->state.UNIX.sub.user) {
570 parser->item_offset = len - 1;
571 parser->item_length = 1;
572 parser->state.UNIX.sub.user = PL_UNIX_USER_PARSING;
576 parser->item_length++;
578 mem[parser->item_offset + parser->item_length - 1] = 0;
579 parser->offsets.user = parser->item_offset;
580 parser->state.UNIX.main = PL_UNIX_GROUP;
581 parser->state.UNIX.sub.group = PL_UNIX_GROUP_PRESPACE;
582 parser->item_offset = 0;
583 parser->item_length = 0;
589 switch(parser->state.UNIX.sub.group) {
592 parser->item_offset = len - 1;
593 parser->item_length = 1;
594 parser->state.UNIX.sub.group = PL_UNIX_GROUP_NAME;
598 parser->item_length++;
600 mem[parser->item_offset + parser->item_length - 1] = 0;
601 parser->offsets.group = parser->item_offset;
602 parser->state.UNIX.main = PL_UNIX_SIZE;
603 parser->state.UNIX.sub.size = PL_UNIX_SIZE_PRESPACE;
604 parser->item_offset = 0;
605 parser->item_length = 0;
611 switch(parser->state.UNIX.sub.size) {
615 parser->item_offset = len - 1;
616 parser->item_length = 1;
617 parser->state.UNIX.sub.size = PL_UNIX_SIZE_NUMBER;
620 parser->error = CURLE_FTP_BAD_FILE_LIST;
626 parser->item_length++;
630 mem[parser->item_offset + parser->item_length - 1] = 0;
631 if(!curlx_strtoofft(mem + parser->item_offset,
635 parser->file_data->info.flags |= CURLFINFOFLAG_KNOWN_SIZE;
636 parser->file_data->info.size = fsize;
638 parser->item_length = 0;
639 parser->item_offset = 0;
640 parser->state.UNIX.main = PL_UNIX_TIME;
641 parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART1;
645 parser->error = CURLE_FTP_BAD_FILE_LIST;
652 switch(parser->state.UNIX.sub.time) {
656 parser->item_offset = len -1;
657 parser->item_length = 1;
658 parser->state.UNIX.sub.time = PL_UNIX_TIME_PART1;
661 parser->error = CURLE_FTP_BAD_FILE_LIST;
667 parser->item_length++;
669 parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART2;
672 parser->error = CURLE_FTP_BAD_FILE_LIST;
677 parser->item_length++;
680 parser->state.UNIX.sub.time = PL_UNIX_TIME_PART2;
683 parser->error = CURLE_FTP_BAD_FILE_LIST;
689 parser->item_length++;
691 parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART3;
694 parser->error = CURLE_FTP_BAD_FILE_LIST;
699 parser->item_length++;
702 parser->state.UNIX.sub.time = PL_UNIX_TIME_PART3;
705 parser->error = CURLE_FTP_BAD_FILE_LIST;
711 parser->item_length++;
713 mem[parser->item_offset + parser->item_length -1] = 0;
714 parser->offsets.time = parser->item_offset;
716 if(ftp_pl_gettime(parser, finfo->mem + parser->item_offset)) {
717 parser->file_data->flags |= CURLFINFOFLAG_KNOWN_TIME;
721 parser->state.UNIX.main = PL_UNIX_SYMLINK;
722 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRESPACE;
725 parser->state.UNIX.main = PL_UNIX_FILENAME;
726 parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_PRESPACE;
730 parser->error = CURLE_FTP_BAD_FILE_LIST;
737 switch(parser->state.UNIX.sub.filename) {
740 parser->item_offset = len - 1;
741 parser->item_length = 1;
742 parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_NAME;
746 parser->item_length++;
748 parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_WINDOWSEOL;
751 mem[parser->item_offset + parser->item_length - 1] = 0;
752 parser->offsets.filename = parser->item_offset;
753 parser->state.UNIX.main = PL_UNIX_FILETYPE;
756 parser->error = result;
763 mem[parser->item_offset + parser->item_length - 1] = 0;
764 parser->offsets.filename = parser->item_offset;
765 parser->state.UNIX.main = PL_UNIX_FILETYPE;
768 parser->error = result;
773 parser->error = CURLE_FTP_BAD_FILE_LIST;
780 switch(parser->state.UNIX.sub.symlink) {
783 parser->item_offset = len - 1;
784 parser->item_length = 1;
785 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
789 parser->item_length++;
791 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET1;
794 parser->error = CURLE_FTP_BAD_FILE_LIST;
799 parser->item_length++;
801 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET2;
804 parser->error = CURLE_FTP_BAD_FILE_LIST;
808 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
812 parser->item_length++;
814 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET3;
817 parser->error = CURLE_FTP_BAD_FILE_LIST;
821 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
825 parser->item_length++;
827 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET4;
829 mem[parser->item_offset + parser->item_length - 4] = 0;
830 parser->offsets.filename = parser->item_offset;
831 parser->item_length = 0;
832 parser->item_offset = 0;
835 parser->error = CURLE_FTP_BAD_FILE_LIST;
839 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
844 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_TARGET;
845 parser->item_offset = len - 1;
846 parser->item_length = 1;
849 parser->error = CURLE_FTP_BAD_FILE_LIST;
854 parser->item_length++;
856 parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_WINDOWSEOL;
859 mem[parser->item_offset + parser->item_length - 1] = 0;
860 parser->offsets.symlink_target = parser->item_offset;
863 parser->error = result;
866 parser->state.UNIX.main = PL_UNIX_FILETYPE;
871 mem[parser->item_offset + parser->item_length - 1] = 0;
872 parser->offsets.symlink_target = parser->item_offset;
875 parser->error = result;
878 parser->state.UNIX.main = PL_UNIX_FILETYPE;
881 parser->error = CURLE_FTP_BAD_FILE_LIST;
890 switch(parser->state.NT.main) {
892 parser->item_length++;
893 if(parser->item_length < 9) {
895 parser->error = CURLE_FTP_BAD_FILE_LIST;
899 else if(parser->item_length == 9) {
901 parser->state.NT.main = PL_WINNT_TIME;
902 parser->state.NT.sub.time = PL_WINNT_TIME_PRESPACE;
905 parser->error = CURLE_FTP_BAD_FILE_LIST;
910 parser->error = CURLE_FTP_BAD_FILE_LIST;
915 parser->item_length++;
916 switch(parser->state.NT.sub.time) {
919 parser->state.NT.sub.time = PL_WINNT_TIME_TIME;
924 parser->offsets.time = parser->item_offset;
925 mem[parser->item_offset + parser->item_length -1] = 0;
926 parser->state.NT.main = PL_WINNT_DIRORSIZE;
927 parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_PRESPACE;
928 parser->item_length = 0;
931 parser->error = CURLE_FTP_BAD_FILE_LIST;
938 switch(parser->state.NT.sub.dirorsize) {
941 parser->item_offset = len - 1;
942 parser->item_length = 1;
943 parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_CONTENT;
947 parser->item_length ++;
949 mem[parser->item_offset + parser->item_length - 1] = 0;
950 if(strcmp("<DIR>", mem + parser->item_offset) == 0) {
957 parser->item_offset,
959 parser->error = CURLE_FTP_BAD_FILE_LIST;
963 parser->file_data->info.filetype = CURLFILETYPE_FILE;
966 parser->file_data->info.flags |= CURLFINFOFLAG_KNOWN_SIZE;
967 parser->item_length = 0;
968 parser->state.NT.main = PL_WINNT_FILENAME;
969 parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
975 switch(parser->state.NT.sub.filename) {
978 parser->item_offset = len -1;
979 parser->item_length = 1;
980 parser->state.NT.sub.filename = PL_WINNT_FILENAME_CONTENT;
984 parser->item_length++;
986 parser->state.NT.sub.filename = PL_WINNT_FILENAME_WINEOL;
990 parser->offsets.filename = parser->item_offset;
994 parser->error = result;
997 parser->state.NT.main = PL_WINNT_DATE;
998 parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
1003 parser->offsets.filename = parser->item_offset;
1006 parser->error = result;
1009 parser->state.NT.main = PL_WINNT_DATE;
1010 parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
1013 parser->error = CURLE_FTP_BAD_FILE_LIST;
1033 if(parser->file_data) {
1034 Curl_fileinfo_cleanup(parser->file_data);
1035 parser->file_data = NULL;