Hi, I'm having a problem with sscanf() on IA-64; it seems to be able to parse a string into arguments correctly when whitespace is the delimiter, but not "."! Below is a small module to illustrate what I mean (you must be running 2.4.10 or greater, since that's when sscanf was added). On IA-64 I get sscanf returned 1, d1=192, d2=0, d3=30, d4=0, port=0 sscanf returned 5, d1=192, d2=1, d3=1, d4=132, port=80 when I should get the latter both times (as I do on x86). Can someone help? Thanks, David ----------------------------------------------------------------- /* sscanf.c * * Tests sscanf() functionality as a loadable kernel module. * * gcc -Wall -Wstrict-prototypes -O6 -I/lib/modules/`uname -r`/build/include -c -o sscanf.o sscanf.c */ /* Declare what kind of code we want from the header files */ #define __KERNEL__ /* We're part of the kernel */ #define MODULE /* Not a permanent part, though. */ /* Standard headers for LKMs */ #include <linux/modversions.h> #include <linux/module.h> /* Initialize the LKM */ int init_module() { unsigned int d1, d2, d3, d4, port; int retval = 0; /* This does not work on IA-64 */ retval = sscanf("192.1.1.132:80", "%d.%d.%d.%d:%d", &d1, &d2, &d3, &d4, &port); printk(KERN_INFO "sscanf returned %d, d1=%d, d2=%d, d3=%d, d4=%d, port=%d\n", retval, d1, d2, d3, d4, port); /* This does work on IA-64 */ retval = sscanf("192 1 1 132 80", "%d %d %d %d %d", &d1, &d2, &d3, &d4, &port); printk(KERN_INFO "sscanf returned %d, d1=%d, d2=%d, d3=%d, d4=%d, port=%d\n", retval, d1, d2, d3, d4, port); return 0; } /* Cleanup - undo whatever init_module did */ void cleanup_module() { printk(KERN_INFO "Removing sscanf module\n"); } __________________________________________________ FREE voicemail, email, and fax...all in one place. Sign Up Now! http://www.onebox.comReceived on Thu Oct 18 14:50:34 2001
This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:05 EST