コード例 #1
0
void			print_normal_string(va_list *va, t_flags *flag, t_info *list)
{
	void		*x;
	int			len;

	if (flag->sub_specifier[0] == 'l' && !flag->sub_specifier[1])
		return (print_unicode_string(va, flag, list));
	x = va_arg(*va, void*);
	if (!x)
		x = "(null)";
	flag->i = -1;
	len = get_nb_min_char_string(flag, (char *)x);
	while (!flag->minus && flag->is_min_area_size_here &&
			++flag->i < flag->nb_min_char)
		flag->zero ? bufferujoin(list, 48) : bufferujoin(list, 32);
	flag->i = -1;
	while (flag->is_precision_here && ++flag->i < flag->nb_max_char)
		bufferujoin(list, 32);
	if (len)
		bufferjoin(list, (char*)x, len);
	flag->i = -1;
	while (flag->minus && flag->is_min_area_size_here &&
			++flag->i < flag->nb_min_char)
		bufferujoin(list, 32);
}
コード例 #2
0
ファイル: drstrace.c プロジェクト: DynamoRIO/drmemory
static bool
print_known_compound_type(buf_info_t *buf, drsys_param_type_t type, void *start_addr)
{
    switch (type) {
    case DRSYS_TYPE_UNICODE_STRING: {
        print_unicode_string(buf, (UNICODE_STRING *) start_addr);
        break;
    }
    case DRSYS_TYPE_OBJECT_ATTRIBUTES: {
        OBJECT_ATTRIBUTES *oa = (OBJECT_ATTRIBUTES *) start_addr;
        OUTPUT(buf, "len="PIFX", root="PIFX", name=",
                oa->Length, oa->RootDirectory);
        print_unicode_string(buf, oa->ObjectName);
        OUTPUT(buf, ", att="PIFX", sd="PFX", sqos="PFX,
                oa->Attributes, oa->SecurityDescriptor,
                oa->SecurityQualityOfService);
        break;
    }
    case DRSYS_TYPE_IO_STATUS_BLOCK: {
        IO_STATUS_BLOCK *io = (IO_STATUS_BLOCK *) start_addr;
        OUTPUT(buf, "status="PIFX", info="PIFX"", io->StatusPointer.Status,
                io->Information);
        break;
    }
    case DRSYS_TYPE_LARGE_INTEGER: {
        LARGE_INTEGER *li = (LARGE_INTEGER *) start_addr;
        OUTPUT(buf, "0x"HEX64_FORMAT_STRING, li->QuadPart);
        break;
    }
    default: {
        /* FIXME i#1089: add the other types */
        return false;
    }
    }
    /* XXX: we want KEY_VALUE_PARTIAL_INFORMATION, etc. like in
     * syscall_diagnostics.  Add drsyscall types for those, or hardcode here?
     */
    return true;
}
コード例 #3
0
ファイル: drstrace.c プロジェクト: rnk/drmemory
static void
print_arg(drsys_arg_t *arg)
{
    if (arg->ordinal == -1)
        OUTPUT("\tretval: ");
    else
        OUTPUT("\targ %d: ", arg->ordinal);
    /* XXX: add return value to dr_fprintf so we can more easily align
     * after PFX vs PIFX w/o having to print to buffer
     */
    switch (arg->type) {
    case DRSYS_TYPE_VOID:         print_simple_value(arg, true); break;
    case DRSYS_TYPE_POINTER:      print_simple_value(arg, true); break;
    case DRSYS_TYPE_BOOL:         print_simple_value(arg, false); break;
    case DRSYS_TYPE_INT:          print_simple_value(arg, false); break;
    case DRSYS_TYPE_SIGNED_INT:   print_simple_value(arg, false); break;
    case DRSYS_TYPE_UNSIGNED_INT: print_simple_value(arg, false); break;
    case DRSYS_TYPE_HANDLE:       print_simple_value(arg, false); break;
    case DRSYS_TYPE_NTSTATUS:     print_simple_value(arg, false); break;
    case DRSYS_TYPE_ATOM:         print_simple_value(arg, false); break;
    default: {
        if (arg->value == 0) {
            OUTPUT("<null>");
        } else if (arg->pre && !TEST(DRSYS_PARAM_IN, arg->mode)) {
            OUTPUT(PFX, arg->value);
        } else {
            switch (arg->type) {
            case DRSYS_TYPE_UNICODE_STRING: {
                print_unicode_string((UNICODE_STRING *) arg->value);
                break;
            }
            case DRSYS_TYPE_OBJECT_ATTRIBUTES: {
                OBJECT_ATTRIBUTES *oa = (OBJECT_ATTRIBUTES *) arg->value;
                OUTPUT("len="PIFX", root="PIFX", name=",
                       oa->Length, oa->RootDirectory);
                print_unicode_string(oa->ObjectName);
                OUTPUT(", att="PIFX", sd="PFX", sqos="PFX,
                       oa->Attributes, oa->SecurityDescriptor,
                       oa->SecurityQualityOfService);
                break;
            }
            case DRSYS_TYPE_IO_STATUS_BLOCK: {
                IO_STATUS_BLOCK *io = (IO_STATUS_BLOCK *) arg->value;
                OUTPUT("status="PIFX", info="PIFX"", io->StatusPointer.Status,
                       io->Information);
                break;
            }
            case DRSYS_TYPE_LARGE_INTEGER: {
                LARGE_INTEGER *li = (LARGE_INTEGER *) arg->value;
                OUTPUT("0x"HEX64_FORMAT_STRING, li->QuadPart);
                break;
            }
            default: {
                /* FIXME i#1089: add the other types */
                OUTPUT("<NYI>");
            }
            }
            /* XXX: we want KEY_VALUE_PARTIAL_INFORMATION, etc. like in
             * syscall_diagnostics.  Add drsyscall types for those, or hardcode here?
             */
        }
    }
    }
    
    OUTPUT(" (%s%s%stype=%s%s, size="PIFX")\n",
           (arg->arg_name == NULL) ? "" : "name=",
           (arg->arg_name == NULL) ? "" : arg->arg_name,
           (arg->arg_name == NULL) ? "" : ", ",
           (arg->type_name == NULL) ? "\"\"" : arg->type_name,
           (arg->type_name == NULL ||
            TESTANY(DRSYS_PARAM_INLINED|DRSYS_PARAM_RETVAL, arg->mode)) ? "" : "*",
           arg->size);
}