Memory management, truncation errors, EOB/EOF
This commit is contained in:
parent
0647478729
commit
7c47ba78c0
19
buffer.c
19
buffer.c
|
@ -289,7 +289,7 @@ pBuffer b_addc(pBuffer const pBD, char symbol) {
|
||||||
}
|
}
|
||||||
|
|
||||||
avail_space = SHRT_MAX - pBD->capacity;
|
avail_space = SHRT_MAX - pBD->capacity;
|
||||||
new_inc = avail_space * ((unsigned char) pBD->inc_factor / 100);
|
new_inc = avail_space * ((double) pBD->inc_factor) / 100;
|
||||||
|
|
||||||
/* Check if there is enough space for the new increment and
|
/* Check if there is enough space for the new increment and
|
||||||
"trim" it if needed */
|
"trim" it if needed */
|
||||||
|
@ -330,6 +330,11 @@ pBuffer b_addc(pBuffer const pBD, char symbol) {
|
||||||
* Parameters:
|
* Parameters:
|
||||||
- pBuffer const pBD
|
- pBuffer const pBD
|
||||||
* Return value: char
|
* Return value: char
|
||||||
|
* Algorithm: Function will check if getc_offset is at the end
|
||||||
|
* of the character array. If so, set flag and return failure.
|
||||||
|
* Otherwise fetch character from cb_head, increment offset, and
|
||||||
|
* check if it reached the EOB. If so, apply the flag before
|
||||||
|
* returning the character.
|
||||||
*/
|
*/
|
||||||
char b_getc(Buffer* const pBD) {
|
char b_getc(Buffer* const pBD) {
|
||||||
char char_buf;
|
char char_buf;
|
||||||
|
@ -363,7 +368,7 @@ char b_getc(Buffer* const pBD) {
|
||||||
int b_print(Buffer* const pBD) {
|
int b_print(Buffer* const pBD) {
|
||||||
int char_count = 0; /* Counter to track how many characters were sent to output */
|
int char_count = 0; /* Counter to track how many characters were sent to output */
|
||||||
char char_buf; /* "Buffer" character to load before output */
|
char char_buf; /* "Buffer" character to load before output */
|
||||||
short tmp_offset = OFFSET_RESET;
|
short tmp_offset;
|
||||||
|
|
||||||
if (!pBD || !pBD->cb_head) {
|
if (!pBD || !pBD->cb_head) {
|
||||||
return R_FAIL1;
|
return R_FAIL1;
|
||||||
|
@ -374,17 +379,19 @@ int b_print(Buffer* const pBD) {
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
/* Save getc_offset to restore after printing */
|
||||||
tmp_offset = pBD->getc_offset;
|
tmp_offset = pBD->getc_offset;
|
||||||
pBD->getc_offset = OFFSET_RESET;
|
pBD->getc_offset = OFFSET_RESET;
|
||||||
while (!b_eob(pBD)) {
|
|
||||||
|
do {
|
||||||
char_buf = b_getc(pBD);
|
char_buf = b_getc(pBD);
|
||||||
printf("%c", (char) char_buf);
|
printf("%c", (char) char_buf);
|
||||||
char_count++;
|
char_count++;
|
||||||
};
|
} while (!b_eob(pBD));
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
/* Restore the getc_offset */
|
||||||
|
pBD->getc_offset = tmp_offset;
|
||||||
}
|
}
|
||||||
/* Restore the getc_offset after printing */
|
|
||||||
pBD->getc_offset = tmp_offset;
|
|
||||||
return char_count;
|
return char_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue