void SetAcpiRsdp2Checksums(void* data) { UINT8* arr = data; UINTN size = *(const UINT32*)&arr[20]; arr[9] = 0; arr[32] = 0; arr[9] = -SumBytes(arr, 20); arr[32] = -SumBytes(arr, size); }
void SetAcpiSdtChecksum(void* data) { UINT8* arr = data; UINTN size = *(const UINT32*)&arr[4]; arr[9] = 0; arr[9] = -SumBytes(arr, size); }
int VerifyAcpiSdtChecksum(const void* data) { const UINT8* arr = data; UINTN size = *(const UINT32*)&arr[4]; return SumBytes(arr, size) == 0; }
int VerifyAcpiRsdp2Checksums(const void* data) { const UINT8* arr = data; UINTN size = *(const UINT32*)&arr[20]; return SumBytes(arr, 20) == 0 && SumBytes(arr, size) == 0; }
int main(int argc, char *argv[]) { offset *lista; offset *distintos; long ne, nedis; double sum; int readOK, writeOK; if (argc != 3) { printf("\nUso: %s <in_offset_list> <out_distinct_offset_list>\n",argv[0]); printf("\nDescripción: "); printf("\n Acepta una lista de offsets y devuelve la misma lista sin elementos repetidos.\n"); printf("\nParámetros: "); printf("\n - <in_offset_list> = Archivo de entrada con la lista de offsets."); printf("\n - <out_offset_list> = Archivo de salida con la lista de offsets.\n\n"); exit(1); } /* Contamos el numero de elementos de la lista para reservar memoria */ ne = NumeroDeOffsetList(argv[1]); if (!ne) { printf("\nError al abrir el archivo: %s.",argv[1]); exit(1); } /* Reservamos memoria dinámica para los vectores de offsets */ lista = (offset *) malloc (ne*sizeof(offset)); distintos = (offset *) malloc (ne*sizeof(offset)); /* Leemos el archivo de offsets */ readOK = LeerOffsetList(argv[1],lista,&ne); if (!readOK) { printf("\nError al abrir el archivo: %s.",argv[1]); exit(1); } //qsort(lista, ne, sizeof(offset), &compare); /* Creamos una lista con los paquetes que no se repiten */ EliminarRepetidosOne(lista,ne,distintos,&nedis); printf("\n# Paquetes total: %ld",ne); printf("\n# Paquetes distintos: %ld",nedis); printf("\n# Paquetes repetidos: %ld",ne-nedis); /* Sumamos los bytes de los paquetes distintos */ sum = SumBytes(distintos,nedis); printf("\nSum (Bytes): %lf",sum); printf("\nSum (KBytes): %lf",sum/1024); printf("\nSum (MBytes): %lf\n",sum/(1024*1024)); printf("\nBYTES: %.0lf",sum); /* Ordenamos la lista ascendentemente según el offset */ OrdenarSeleccionDirecta(distintos,nedis); /* Guardamos la nueva lista de offset sin elementos repetidos */ writeOK = EscribirOffsetList(argv[2],distintos,nedis); if (!writeOK) { printf("\nError al crear el archivo: %s.",argv[2]); exit(1); } return 0; }
/*------------------------------------------------------------------- * BlockExtent 11.24.91 MM * * Sets the range of blocks to search in the WORD structure. *------------------------------------------------------------------- */ static BOOL BlockExtent( WORD *pattern ) { BOOL in_list=TRUE,single_letter=FALSE; char *p,ts[3]; unsigned WVal,next_index=1; p = pattern->word_text->m_text; Debug("BlockExtent:Block = %s \n",p); if ( LetterVal(p[0]) ) { /* ** Check for single letter initial strings */ if(strlen(p) == 1) single_letter = TRUE; else { p++; while( !LetterVal( *p ) && *p ) { if( (*p == '#') || (*p == '.') ) { single_letter = TRUE; break; } p++; } } if(!single_letter) { WVal = WordVal(pattern->word_text->m_text); if( (WVal>=0) && (WVal<=701) ) { pattern->word_loc.start_wlblock = SumBytes( WVal ); Debug("BlockNum = %d\n",pattern->word_loc.start_wlblock); /* Determine the number of blocks to look at */ while( !LINXbuf[WVal + next_index] ) next_index++; pattern->word_loc.end_wlblock = pattern->word_loc.start_wlblock+ LINXbuf[WVal+next_index]; } else in_list = FALSE; } else { ts[0] = pattern->word_text->m_text[0]; ts[1] = 'A'; ts[2] = '\0'; pattern->word_loc.start_wlblock = SumBytes(WordVal( ts )); ts[1] = 'W'; ts[2] = '\0'; pattern->word_loc.end_wlblock = SumBytes( WordVal( ts ) ); } } else { /* No letters at start of pattern */ if( !( (p[0] == '#') || (p[0] == '.') ) ) in_list = FALSE; else { if(!makeNotice("Do you REALLY want to search the whole list", 2,YORN)) in_list = FALSE; else { pattern->word_loc.start_wlblock = 0; pattern->word_loc.end_wlblock = 1203; /* PARAMETERIZE tHIS */ } noticeDown(); } } return(in_list); }/*