void GxLog::BlockStart(GxLogType type, const char* component) { myType = type; char buffer[BUFFER_SIZE]; SprintF(buffer, "%-13s:", component); const GxString line('-', LINE_W); GxSystemInterface::Get()->LogMessage(myType, buffer); GxSystemInterface::Get()->LogMessage(myType, line.Raw()); myIsInBlock = true; }
void GxLog::Print(GxLogType type, const char* component, const char* message) { myType = type; if(myIsInBlock) { GxSystemInterface::Get()->LogMessage(myType, message); } else { char buffer[BUFFER_SIZE]; SprintF(buffer, "%-13s: %s", component, message); GxSystemInterface::Get()->LogMessage(myType, buffer); } }
void GxLog(const char* tag, GxLogType type, const char* fmt, ...) { char buffer[LOG_BUFFER_SIZE]; va_list argument_list; va_start(argument_list, fmt); SprintV(buffer, fmt, argument_list); va_end(argument_list); char composite[LOG_BUFFER_SIZE]; SprintF(composite, "%-13s: %s", tag, buffer); GxSystemInterface::Get()->LogMessage(type, composite); }
static int VSprintf(char *buf, const char *fmt, const int *dp) { char *p, *s; s = buf; for ( ; *fmt != '\0'; ++fmt) { if (*fmt != '%') { if(buf) *s++ = *fmt; else DiagPutChar(*fmt); continue; } if (*++fmt == 's') { for (p = (char *)*dp++; *p != '\0'; p++) { if(buf) *s++ = *p; else DiagPutChar(*p); } } else { /* Length of item is bounded */ char tmp[20], *q = tmp; int alt = 0; int shift = 28; #if 1 //wei patch for %02x if ((*fmt >= '0') && (*fmt <= '9')) { int width; unsigned char fch = *fmt; for (width=0; (fch>='0') && (fch<='9'); fch=*++fmt) { width = width * 10 + fch - '0'; } shift=(width-1)*4; } #endif /* * Before each format q points to tmp buffer * After each format q points past end of item */ if ((*fmt == 'x')||(*fmt == 'X') || (*fmt == 'p') || (*fmt == 'P')) { /* With x86 gcc, sizeof(long) == sizeof(int) */ const long *lp = (const long *)dp; long h = *lp++; int ncase = (*fmt & 0x20); dp = (const int *)lp; if((*fmt == 'p') || (*fmt == 'P')) alt=1; if (alt) { *q++ = '0'; *q++ = 'X' | ncase; } for ( ; shift >= 0; shift -= 4) *q++ = "0123456789ABCDEF"[(h >> shift) & 0xF] | ncase; } else if (*fmt == 'd') { int i = *dp++; char *r; if (i < 0) { *q++ = '-'; i = -i; } p = q; /* save beginning of digits */ do { *q++ = '0' + (i % 10); i /= 10; } while (i); /* reverse digits, stop in middle */ r = q; /* don't alter q */ while (--r > p) { i = *r; *r = *p; *p++ = i; } } #if 0 else if (*fmt == '@') { unsigned char *r; union { long l; unsigned char c[4]; } u; const long *lp = (const long *)dp; u.l = *lp++; dp = (const int *)lp; for (r = &u.c[0]; r < &u.c[4]; ++r) q += SprintF(q, "%d.", *r); --q; } #endif #if 0 else if (*fmt == '!') { char *r; p = (char *)*dp++; for (r = p + ETH_ALEN; p < r; ++p) q += SprintF(q, "%hhX:", *p); --q; } #endif else if (*fmt == 'c') *q++ = *dp++; else *q++ = *fmt; /* now output the saved string */ for (p = tmp; p < q; ++p) { if(buf) *s++ = *p; else DiagPutChar(*p); } } }
int imageFileValid(unsigned long startAddr, int len) { int i=0; unsigned long head_offset=0; unsigned short sum=0; unsigned char sum1=0; IMG_HEADER_T Header ; //avoid unalign problem int skip_check_signature=0; int found=0; while((head_offset + sizeof(IMG_HEADER_T)) < len){ /*as soon as we found a correct header. we thinks the file is valid*/ memcpy(&Header, ((char *)startAddr + head_offset), sizeof(IMG_HEADER_T)); if(!skip_check_signature) { for(i=0 ;i < MAX_SIG_TBL ; i++) { if(!memcmp(Header.signature, (char *)sign_tbl[i].signature, sign_tbl[i].sig_len)){ found++; break; } } if(i == MAX_SIG_TBL){ head_offset += Header.len + sizeof(IMG_HEADER_T); continue ; } } else { if(!memcmp(Header.signature, BOOT_SIGNATURE, SIG_LEN)) { found++; } else { unsigned char *pRoot =((unsigned char *)startAddr) + head_offset + sizeof(IMG_HEADER_T); if (!memcmp(pRoot, SQSH_SIGNATURE, SIG_LEN)) { found++; } } } if(skip_check_signature || memcmp(Header.signature, WEB_SIGNATURE, 3)){ //calculate checksum if(!memcmp(Header.signature, ALL1_SIGNATURE, SIG_LEN) || !memcmp(Header.signature, ALL2_SIGNATURE, SIG_LEN)) { for (i=0; i< Header.len+sizeof(IMG_HEADER_T); i+=2) { sum += *((unsigned short *)(startAddr+ head_offset + i)); } } else { unsigned char x=0,y=0; unsigned short temp=0; for (i=0; i< Header.len; i+=2) { #if defined(RTL8196B) || defined(RTL8198) #if 1 //sum +=*((unsigned short *)(startAddr+ head_offset + sizeof(IMG_HEADER_T) + i)); memcpy(&temp, (startAddr+ head_offset + sizeof(IMG_HEADER_T) + i), 2); // for alignment issue sum+=temp; #else x=*((unsigned char *)(startAddr+ head_offset + sizeof(IMG_HEADER_T) + i)); y=*((unsigned char *)(startAddr+ head_offset + sizeof(IMG_HEADER_T) + i+1)); sum+=(y|x<<8)&0xFFFF; #endif #else sum += *((unsigned short *)(startAddr+ head_offset + sizeof(IMG_HEADER_T) + i)); #endif } } if ( sum ) { for(i=0 ;i < MAX_SIG_TBL ; i++) { if(!memcmp(Header.signature, (char *)sign_tbl[i].signature, sign_tbl[i].sig_len)){ break; } } SprintF(message,"%s imgage checksum error at %X!\n",sign_tbl[i].comment, startAddr+head_offset); return -1; } if(!memcmp(Header.signature, ALL1_SIGNATURE, SIG_LEN)){ found++; head_offset += sizeof(IMG_HEADER_T); continue; } if(!memcmp(Header.signature, ALL2_SIGNATURE, SIG_LEN)){ found ++; skip_check_signature = 1; head_offset += sizeof(IMG_HEADER_T); continue; } }else { //web page use different checksum algorimth for (i=0; i< Header.len; i++) sum1 += *((unsigned char *)(startAddr+ head_offset + sizeof(IMG_HEADER_T) + i)); if ( sum1 ) { for(i=0 ;i < MAX_SIG_TBL ; i++) { if(!memcmp(Header.signature, (char *)sign_tbl[i].signature, sign_tbl[i].sig_len)) { break; } } SprintF(message,"%s imgage checksum error at %X!\n",sign_tbl[i].comment, startAddr+head_offset); return -1; } } head_offset += Header.len + sizeof(IMG_HEADER_T); } //while return found; }