X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Ftimothy_tests%2Frunning_out_of_handles_error%2Fmessage_buffer.c;fp=direct%2Ftimothy_tests%2Frunning_out_of_handles_error%2Fmessage_buffer.c;h=1ff21e096e01594be7e3af9713c6dc4b4d45ee41;hp=0000000000000000000000000000000000000000;hb=4d31e5ecca937da7eaf74f0fb6e5070b6de2c4c9;hpb=fb0f30458af252479d15e457443e36320d8355f7 diff --git a/direct/timothy_tests/running_out_of_handles_error/message_buffer.c b/direct/timothy_tests/running_out_of_handles_error/message_buffer.c new file mode 100644 index 0000000..1ff21e0 --- /dev/null +++ b/direct/timothy_tests/running_out_of_handles_error/message_buffer.c @@ -0,0 +1,112 @@ +/* + * YAFFS: Yet another FFS. A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +/* + * message_buffer.c contains code for a message buffer . + */ + +#include "message_buffer.h" + +void append_to_buffer(buffer *p_Buffer, char *message,char message_level,char print){ + /*wrapper function for add_to_buffer_root_function*/ + add_to_buffer_root_function(p_Buffer,message, message_level,APPEND_MESSAGE,print); +} + +void add_to_buffer(buffer *p_Buffer, char *message,char message_level,char print){ + /*wrapper function for add_to_buffer_root_function*/ + add_to_buffer_root_function(p_Buffer,message, message_level,DO_NOT_APPEND_MESSAGE,print); +} + +void add_int_to_buffer(buffer *p_Buffer, int num,char message_level,char print){ + char message[20]; + sprintf(message, "%d",num); + add_to_buffer_root_function(p_Buffer,message, message_level,DO_NOT_APPEND_MESSAGE,print); +} + +void append_int_to_buffer(buffer *p_Buffer, int num,char message_level,char print){ + char message[20]; + sprintf(message, "%d",num); + add_to_buffer_root_function(p_Buffer,message, message_level,APPEND_MESSAGE,print); +} + + +void add_to_buffer_root_function(buffer *p_Buffer, char *message,char message_level,char append,char print){ + FILE *log_handle; + + if (append==APPEND_MESSAGE){ /* append current message*/ + strncat(p_Buffer->message[p_Buffer->head],message,BUFFER_MESSAGE_LENGTH); + } + else { + + /*move the head up one. the head always points at the last written data*/ + p_Buffer->head++; + + /*printf("p_Buffer->tail=%d\n",p_Buffer->tail);*/ + /*printf("p_Buffer->head=%d\n",p_Buffer->head);*/ + if (p_Buffer->head >=BUFFER_SIZE-1) { + /*printf("buffer overflow\n");*/ + p_Buffer->head -= (BUFFER_SIZE-1); /*wrap the head around the buffer*/ + /*printf("new p_Buffer->head=%d\n",p_Buffer->head);*/ + } + /*if the buffer is full then delete last entry by moving the tail*/ + if (p_Buffer->head==p_Buffer->tail){ + /*printf("moving buffer tail from %d to ",p_Buffer->tail);*/ + p_Buffer->tail++; + if (p_Buffer->tail >=BUFFER_SIZE) p_Buffer->tail -= BUFFER_SIZE;/*wrap the tail around the buffer*/ + /*printf("%d\n",p_Buffer->tail);*/ + + } + + p_Buffer->message_level[p_Buffer->head]=message_level; /*copy the message level*/ + strncpy(p_Buffer->message[p_Buffer->head],message,BUFFER_MESSAGE_LENGTH); /*copy the message*/ + /*printf("copied %s into p_Buffer->message[p_Buffer->head]: %s\n",message,p_Buffer->message[p_Buffer->head]); + printf("extra %s\n",p_Buffer->message[p_Buffer->head]);*/ + } + if ((p_Buffer->message_level[p_Buffer->head]<=DEBUG_LEVEL)&& (print==PRINT)){ + /*printf("printing buffer 1\n"); + // the print buffer function is not working this is just a quick fix + print_buffer(p_Buffer,1); //if the debug level is higher enough then print the new message + */ + printf("%s\n",p_Buffer->message[p_Buffer->head]); + log_handle=fopen(LOG_FILE,"a"); + if (log_handle!=NULL){ + fputs(p_Buffer->message[p_Buffer->head],log_handle); + fputs("\n",log_handle); + fclose(log_handle); + } + } +} + + + +void print_buffer(buffer *p_Buffer, int number_of_messages_to_print){ + int x=0; + int i=0; + printf("print buffer\n"); + printf("buffer head:%d\n",p_Buffer->head); + printf("buffer tail:%d\n",p_Buffer->tail); + + if (number_of_messages_to_print==PRINT_ALL) number_of_messages_to_print=BUFFER_SIZE; +// printf("number_of_messages_to_print=%d\n",number_of_messages_to_print); + for (i=0,x=0; (x>=p_Buffer->tail) && (imessage[p_Buffer->head]); + printf("printed buffer\n"); + } + +} + + +