OLD | NEW |
1 /* | 1 /* |
2 ******************************************************************************* | 2 ******************************************************************************* |
3 * | 3 * |
4 * Copyright (C) 1998-2011, International Business Machines | 4 * Copyright (C) 1998-2014, International Business Machines |
5 * Corporation and others. All Rights Reserved. | 5 * Corporation and others. All Rights Reserved. |
6 * | 6 * |
7 ******************************************************************************* | 7 ******************************************************************************* |
8 * | 8 * |
9 * File ucbuf.c | 9 * File ucbuf.c |
10 * | 10 * |
11 * Modification History: | 11 * Modification History: |
12 * | 12 * |
13 * Date Name Description | 13 * Date Name Description |
14 * 05/10/01 Ram Creation. | 14 * 05/10/01 Ram Creation. |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 int32_t offset=0; | 169 int32_t offset=0; |
170 const char* sourceLimit =NULL; | 170 const char* sourceLimit =NULL; |
171 int32_t cbufSize=0; | 171 int32_t cbufSize=0; |
172 pTarget = buf->buffer; | 172 pTarget = buf->buffer; |
173 /* check if we arrived here without exhausting the buffer*/ | 173 /* check if we arrived here without exhausting the buffer*/ |
174 if(buf->currentPos<buf->bufLimit){ | 174 if(buf->currentPos<buf->bufLimit){ |
175 offset = (int32_t)(buf->bufLimit-buf->currentPos); | 175 offset = (int32_t)(buf->bufLimit-buf->currentPos); |
176 memmove(buf->buffer,buf->currentPos,offset* sizeof(UChar)); | 176 memmove(buf->buffer,buf->currentPos,offset* sizeof(UChar)); |
177 } | 177 } |
178 | 178 |
179 #if DEBUG | 179 #if UCBUF_DEBUG |
180 memset(pTarget+offset,0xff,sizeof(UChar)*(MAX_IN_BUF-offset)); | 180 memset(pTarget+offset,0xff,sizeof(UChar)*(MAX_IN_BUF-offset)); |
181 #endif | 181 #endif |
182 if(buf->isBuffered){ | 182 if(buf->isBuffered){ |
183 cbufSize = MAX_IN_BUF; | 183 cbufSize = MAX_IN_BUF; |
184 /* read the file */ | 184 /* read the file */ |
185 inputRead=T_FileStream_read(buf->in,cbuf,cbufSize-offset); | 185 inputRead=T_FileStream_read(buf->in,cbuf,cbufSize-offset); |
186 buf->remaining-=inputRead; | 186 buf->remaining-=inputRead; |
187 | 187 |
188 }else{ | 188 }else{ |
189 cbufSize = T_FileStream_size(buf->in); | 189 cbufSize = T_FileStream_size(buf->in); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 source = cbuf; | 286 source = cbuf; |
287 | 287 |
288 /* re convert */ | 288 /* re convert */ |
289 ucnv_toUnicode(buf->conv,&target,target+(buf->bufCapacity-offset), | 289 ucnv_toUnicode(buf->conv,&target,target+(buf->bufCapacity-offset), |
290 &source,sourceLimit,NULL, | 290 &source,sourceLimit,NULL, |
291 (UBool)(buf->remaining==0),&error1); | 291 (UBool)(buf->remaining==0),&error1); |
292 | 292 |
293 } | 293 } |
294 outputWritten = (int32_t)(target - pTarget); | 294 outputWritten = (int32_t)(target - pTarget); |
295 | 295 |
296 | 296 #if UCBUF_DEBUG |
297 #if DEBUG | |
298 { | 297 { |
299 int i; | 298 int i; |
300 target = pTarget; | 299 target = pTarget; |
301 for(i=0;i<numRead;i++){ | 300 for(i=0;i<numRead;i++){ |
302 /* printf("%c", (char)(*target++));*/ | 301 /* printf("%c", (char)(*target++));*/ |
303 } | 302 } |
304 } | 303 } |
305 #endif | 304 #endif |
306 | 305 |
307 }else{ | 306 }else{ |
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 ucbuf_fillucbuf(buf,err); | 731 ucbuf_fillucbuf(buf,err); |
733 if(U_FAILURE(*err)){ | 732 if(U_FAILURE(*err)){ |
734 return NULL; | 733 return NULL; |
735 } | 734 } |
736 } | 735 } |
737 /* | 736 /* |
738 * Accoding to TR 13 readLine functions must interpret | 737 * Accoding to TR 13 readLine functions must interpret |
739 * CR, CR+LF, LF, NEL, PS, LS or FF as line seperators | 738 * CR, CR+LF, LF, NEL, PS, LS or FF as line seperators |
740 */ | 739 */ |
741 /* Windows CR LF */ | 740 /* Windows CR LF */ |
742 if(c ==0x0d && temp+1<=buf->bufLimit && *(temp+1) == 0x0a ){ | 741 if(c ==0x0d && temp <= buf->bufLimit && *temp == 0x0a ){ |
743 *len = (int32_t)(temp++ - buf->currentPos); | 742 *len = (int32_t)(temp++ - buf->currentPos); |
744 savePos = buf->currentPos; | 743 savePos = buf->currentPos; |
745 buf->currentPos = temp; | 744 buf->currentPos = temp; |
746 return savePos; | 745 return savePos; |
747 } | 746 } |
748 /* else */ | 747 /* else */ |
749 | 748 |
750 if (temp>=buf->bufLimit|| ucbuf_isCharNewLine(c)){ /* Unipad insert
s 2028 line separators! */ | 749 if (temp>=buf->bufLimit|| ucbuf_isCharNewLine(c)){ /* Unipad insert
s 2028 line separators! */ |
751 *len = (int32_t)(temp - buf->currentPos); | 750 *len = (int32_t)(temp - buf->currentPos); |
752 savePos = buf->currentPos; | 751 savePos = buf->currentPos; |
753 buf->currentPos = temp; | 752 buf->currentPos = temp; |
754 return savePos; | 753 return savePos; |
755 } | 754 } |
756 } | 755 } |
757 }else{ | 756 }else{ |
758 /* we know that all input is read into the internal | 757 /* we know that all input is read into the internal |
759 * buffer so we can safely return pointers | 758 * buffer so we can safely return pointers |
760 */ | 759 */ |
761 for(;;){ | 760 for(;;){ |
762 c = *temp++; | 761 c = *temp++; |
763 | 762 |
764 if(buf->currentPos==buf->bufLimit){ | 763 if(buf->currentPos==buf->bufLimit){ |
765 return NULL; /* end of file is reached return NULL */ | 764 return NULL; /* end of file is reached return NULL */ |
766 } | 765 } |
767 /* Windows CR LF */ | 766 /* Windows CR LF */ |
768 if(c ==0x0d && temp+1<=buf->bufLimit && *(temp+1) == 0x0a ){ | 767 if(c ==0x0d && temp <= buf->bufLimit && *temp == 0x0a ){ |
769 *len = (int32_t)(temp++ - buf->currentPos); | 768 *len = (int32_t)(temp++ - buf->currentPos); |
770 savePos = buf->currentPos; | 769 savePos = buf->currentPos; |
771 buf->currentPos = temp; | 770 buf->currentPos = temp; |
772 return savePos; | 771 return savePos; |
773 } | 772 } |
774 /* else */ | 773 /* else */ |
775 if (temp>=buf->bufLimit|| ucbuf_isCharNewLine(c)) { /* Unipad inser
ts 2028 line separators! */ | 774 if (temp>=buf->bufLimit|| ucbuf_isCharNewLine(c)) { /* Unipad inser
ts 2028 line separators! */ |
776 *len = (int32_t)(temp - buf->currentPos); | 775 *len = (int32_t)(temp - buf->currentPos); |
777 savePos = buf->currentPos; | 776 savePos = buf->currentPos; |
778 buf->currentPos = temp; | 777 buf->currentPos = temp; |
779 return savePos; | 778 return savePos; |
780 } | 779 } |
781 } | 780 } |
782 } | 781 } |
783 /* not reached */ | 782 /* not reached */ |
784 /* A compiler warning will appear if all paths don't contain a return statem
ent. */ | 783 /* A compiler warning will appear if all paths don't contain a return statem
ent. */ |
785 /* return NULL;*/ | 784 /* return NULL;*/ |
786 } | 785 } |
787 #endif | 786 #endif |
OLD | NEW |