Changeset 167 for libcaca/trunk/libee/sprite.c
- Timestamp:
- Nov 13, 2003, 5:45:25 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/libee/sprite.c
r159 r167 55 55 56 56 sprite = malloc(sizeof(struct ee_sprite)); 57 if(sprite == NULL) 58 goto sprite_alloc_failed; 59 57 60 sprite->nf = 0; 58 61 sprite->frames = NULL; … … 72 75 break; 73 76 74 if(sprite->nf++) 75 sprite->frames = realloc(sprite->frames, 76 sprite->nf * sizeof(struct ee_frame)); 77 if(sprite->nf) 78 { 79 void *tmp = realloc(sprite->frames, 80 (sprite->nf + 1) * sizeof(struct ee_frame)); 81 if(tmp == NULL) 82 goto frame_failed; 83 sprite->frames = tmp; 84 sprite->nf++; 85 } 77 86 else 78 sprite->frames = malloc(sprite->nf * sizeof(struct ee_frame)); 87 { 88 sprite->frames = malloc((sprite->nf + 1) * sizeof(struct ee_frame)); 89 if(sprite->frames == NULL) 90 goto sprite_failed; 91 sprite->nf++; 92 } 93 79 94 frame = &sprite->frames[sprite->nf - 1]; 80 95 … … 84 99 frame->dy = dy; 85 100 frame->chars = malloc(w * h * sizeof(char)); 101 if(frame->chars == NULL) 102 { 103 sprite->nf--; 104 goto frame_failed; 105 } 86 106 frame->color = malloc(w * h * sizeof(int)); 107 if(frame->color == NULL) 108 { 109 free(frame->chars); 110 sprite->nf--; 111 goto frame_failed; 112 } 87 113 88 114 for(y = 0; y < h; y++) 89 115 { 90 116 if(!fgets(buf, BUFSIZ, fd)) 91 goto f ailed;117 goto frame_failed; 92 118 93 119 for(x = 0; x < w && buf[x] && buf[x] != '\r' && buf[x] != '\n'; x++) … … 101 127 { 102 128 if(!fgets(buf, BUFSIZ, fd)) 103 goto f ailed;129 goto frame_failed; 104 130 105 131 for(x = 0; x < w && buf[x] && buf[x] != '\r' && buf[x] != '\n'; x++) … … 111 137 112 138 continue; 113 114 failed: 139 } 140 141 if(sprite->nf == 0) 142 goto sprite_failed; 143 144 fclose(fd); 145 return sprite; 146 147 frame_failed: 148 while(sprite->nf) 149 { 150 free(sprite->frames[sprite->nf - 1].color); 115 151 free(sprite->frames[sprite->nf - 1].chars); 116 free(sprite->frames[sprite->nf - 1].color);117 152 sprite->nf--; 118 break; 119 } 120 153 } 154 sprite_failed: 155 free(sprite); 156 sprite_alloc_failed: 121 157 fclose(fd); 122 123 if(sprite->nf == 0) 124 { 125 free(sprite); 126 return NULL; 127 } 128 129 return sprite; 158 return NULL; 130 159 } 131 160
Note: See TracChangeset
for help on using the changeset viewer.