Error while setting the mode option of HP ScanJet 6200C

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Error while setting the mode option of HP ScanJet 6200C

Mohit kumar-5
Hi All,

I have the following code to display my SANE options:

void sane_display_options(SANE_Handle handle)
{
        const SANE_Option_Descriptor* option;
        int num_options;
        int index = 0;
        option = sane_get_option_descriptor(handle,index);
        do  
        {
                /* The option 0 value field would contain how many options are
available for the scanner chosen */
                if(index != 0)
                {
                        printf("Option %d Name: %s",index, option->name);
                        switch(option->constraint_type)
                        {
                                case SANE_CONSTRAINT_NONE:
                                        break;
                                case SANE_CONSTRAINT_RANGE:
                                        printf("min:%d max:%d
quant:%d",option->constraint.range->min,option->constraint.range->max,option->constraint.range->quant);
                                        break;
                                case SANE_CONSTRAINT_WORD_LIST:
                                        {const int n = option->constraint.word_list[0];
                                        for(int i =1; i<n+1; i ++)
                                                printf(" %f",option->constraint.word_list[i]);
                                        }
                                        break;
                                case SANE_CONSTRAINT_STRING_LIST:
                                        {
                                        int i=0;
                                        while(option->constraint.string_list[i])
                                        {
                                                printf(" %s",option->constraint.string_list[i++]);
                                        }
                                        }
                                        break;
                        }
                        if(strcmp(option->name,"mode")==0)
                        {
                                SANE_String mode = "Color";
                                SANE_Status status_loc = sane_control_option(handle, index,
SANE_ACTION_SET_VALUE,(SANE_String_Const*)mode,NULL);
                                if(status_loc == SANE_STATUS_GOOD)
                                        printf("Mode set correctly.");
                        }
                        if(strcmp(option->name,"mode")==0)
                        {
                                SANE_String mode = "Grayscale";
                                SANE_Status status_loc = sane_control_option(handle, index,
SANE_ACTION_SET_VALUE,(SANE_String_Const*)mode,NULL);
                                if(status_loc == SANE_STATUS_GOOD)
                                        printf("Mode set correctly.");
                        }
                        if(strcmp(option->name,"depth")==0)
                        {
                                SANE_String depth = "8";
                                SANE_Int info;
                                SANE_Status status_loc = sane_control_option(handle, index,
SANE_ACTION_SET_VALUE,(SANE_String_Const*)depth, &info);
                                printf("SANE CONTROL OPTION :%d",info);
                                if(status_loc == SANE_STATUS_GOOD)
                                        printf("Everything seems to be working ok.");
                                display_error_message(status_loc);
                        }
                        printf("\n");
                }
                option = sane_get_option_descriptor(handle, ++index);
        }while(option!=NULL);
        num_options = index;
}

However gdb throws an error in the second strcmp. I cannot understand
the reason why?

The following is the gdb output:

(gdb)
409                             if(strcmp(option->name,"mode")==0)
(gdb)
411                                     SANE_String mode = "Color";
(gdb)
412                                     SANE_Status status_loc =
sane_control_option(handle, index,
SANE_ACTION_SET_VALUE,(SANE_String_Const*)mode,NULL);
(gdb)
413                                     if(status_loc == SANE_STATUS_GOOD)
(gdb)
414                                             printf("Mode set correctly.");
(gdb)
416                             if(strcmp(option->name,"mode")==0)
(gdb)
 
Program received signal SIGSEGV, Segmentation fault.
0x42079408 in strcmp () from /lib/tls/libc.so.6
(gdb) p option->name
No symbol "option" in current context.
(gdb)


Can any one tell me what am i doing wrong here?

Thanks,
Mohit

--
sane-devel mailing list: [hidden email]
http://lists.alioth.debian.org/mailman/listinfo/sane-devel
Unsubscribe: Send mail with subject "unsubscribe your_password"
             to [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Error while setting the mode option of HP ScanJet 6200C

Henning Meier-Geinitz
Hi,

On Tue, Jun 21, 2005 at 10:47:02AM +0530, Mohit Kumar wrote:
> printf("Option %d Name: %s",index, option->name);

option->name may be NULL (if the option is a group).

> if(strcmp(option->name,"mode")==0)

See above. Test for the option type first.

Bye,
  Henning

--
sane-devel mailing list: [hidden email]
http://lists.alioth.debian.org/mailman/listinfo/sane-devel
Unsubscribe: Send mail with subject "unsubscribe your_password"
             to [hidden email]