Compaq AA-RH99A-TE Remote Starter User Manual


 
Example 3–4: Extension That Uses Arrays: file.c (cont.)
{
if((pid_entry_ele = array_element(pid_entry_struct, index, &error))==NULL){
fprintf(stderr, "Couldnt get pid array element %d\n", index);
fprintf(stderr, "%s\n", error);
continue;
}
if(!read_field_vals(pid_entry_ele, fields_pid, 2)) {
fprintf(stderr, "Couldnt get values of pid array element %d\n", index);
field_errors(fields_pid, 2);
continue;
}
addr_of_proc = (long)fields_pid[1].data;
if (addr_of_proc == 0)
continue;
first_file = True;
addr = addr_of_proc + proc_size;
if(!cast(addr, "struct utask", &utask_struct, &error)){
fprintf(stderr, "Couldnt cast address to a utask (bogus?):\n");
fprintf(stderr, "%s\n", error);
continue;
}
if(!read_field_vals(utask_struct, utask_fields, 3)) {
fprintf(stderr, "Couldnt read values of utask:\n");
field_errors(fields_pid, 3);
continue;
}
addr = (long) utask_fields[1].data;
if (addr == NULL)
continue;
for(i=0;i<=(int)utask_fields[0].data;i++){
if(i>=NOFILE_IN_U){
if (utask_fields[3].data == NULL)
continue;
start_addr = (long)((long *)utask_fields[3].data + i-NOFILE_IN_U) ;
if(!read_memory(start_addr , sizeof(struct file *), (char *)&val1,
&error)) {
fprintf(stderr,"Start addr:0x%lx bytes:%d\n", start_addr, sizeof(long
*));
fprintf(stderr, "Couldnt read memory for extn files: %s\n", error);
continue;
}
}
else {
ofile = (DataStruct) utask_fields[1].data;
pofile = (DataStruct) utask_fields[2].data;
}
if (i < NOFILE_IN_U)
if(!array_element_val(ofile, i, &val1, &error)){
fprintf(stderr,"Couldnt read %dth element of ofile|pofile:\n", i);
fprintf(stderr, "%s\n", error);
continue;
}
fp = val1;
if(fp == 0) continue;
if(fp == last_fp) continue; /* eliminate duplicates */
last_fp = fp;
if(!cast(fp, "struct file", &fil, &error)){
fprintf(stderr, "Couldnt cast address to a file:\n");
fprintf(stderr, "%s\n", error);
Writing Extensions to the kdbx Debugger 3–33