I'm sorry to keep pestering.. but if I omit the asterick, nothing changes.. it still aborts.. What I did get to work, sorta, was to omit the 'out'.. initially I got the error 'error: use of possibly unassigned local variable `errbuf'' which I got around by declaring errbuf as 'string errbuf = ""'.. now, the buffer is filled, but with only 7 characters of the error:
ORA-121 which should be: ORA-12154: TNS:could not resolve the connect identifier specified Which I can get if I change the bufsiz arg from '(int)sizeof(string)' to 512.. but I then it's worse as I also get: *** glibc detected *** ./x: free(): invalid next size (fast): 0x0000000000688510 *** Which I presume is because I'm freeing more memory than the string actually occupies? (I assume this is true, because if I change it to 16, I get more of the message returned, without the error.. but I can't go anywhere near the 66 chars needed.. not even 33) The thing I don't understand is that the docs say if buffsiz isn't big enough, OCIErrorGet will return null.. so, I'm lead to believe that oracle is getting a big enough buffer, but somehow string is truncating it? Should I not be using string? On Wed, 2009-06-17 at 13:24 +0200, Jiří Zárevúcky wrote: > You have problem with pointers, again. ;) Once you add "out", it's not > a pointer anymore as far as Vala is concerned, so you have to omit the > asterisk. You are essentially replacing it. > > 2009/6/17 Shawn Ferris <shawn.fer...@gmail.com>: > > Ooops.. Resending, didn't realize this didn't go to the list.. my > > apologies. > > > > On Tue, 2009-06-16 at 21:44 -0600, Shawn Ferris wrote: > >> Man.. I'm so close I can smell it.. I actually have the bindings working > >> to the point were I am fetching a value from a table. Unfortunately, the > >> way it sits, I'm stuck with ints alone.. as soon as I try to return a > >> string, the code aborts.. there's actually two cases where the results > >> are the same and I'm assuming the fix for one will fix the other, so > >> I'll ask for help on the easier one. In this case, it's the ErrorGet > >> function defined as: > >> > >> sword OCIErrorGet ( void *hndlp, > >> ub4 recordno, > >> OraText *sqlstate, > >> ub4 *errcodep, > >> OraText *bufp, > >> ub4 bufsiz, > >> ub4 type ); > >> > >> My vapi definition: > >> > >> [CCode (cname = "OCIErrorGet")] > >> public int ErrorGet ( > >> Error* error, > >> int record, > >> out string* sqlstate, > >> out int* errcode, > >> out string* buffer, > >> int buffersz, > >> HType type > >> ); > >> > >> And a C example: > >> > >> text errbuf[512]; > >> OCIErrorGet ((dvoid *) errhp, (ub4) 1, (text *) NULL, &errcode, > >> errbuf, (ub4) sizeof(errbuf), (ub4) OCI_HTYPE_ERROR); > >> > >> If I leave off errbuf (which should be the physical message string > >> assoctiate to errcode) everything works fine. EG: > >> > >> int* errno; > >> OCI.ErrorGet ( err, 1, null, out errno, null, 0, HType.ERROR); > >> stdout.printf("Error - ORA-%5.5d (%s)\n", (int)errno, action); > >> > >> I absolutely get the right error code (i can force which error I gen) > >> but as soon as I try to touch errbuf the program aborts.. I can not for > >> the life of me find the correct way to do this. Can someone point me in > >> the right direction? And then, I'll warn you that I'll have at least one > >> more email.. but more critique and style.. I'm assuming I haven't > >> followed the vala way, but I'm more interested in getting it to work and > >> addressing style later. > >> > >> Thanks for the help! > >> SMF > >> > > > > _______________________________________________ > > Vala-list mailing list > > Vala-list@gnome.org > > http://mail.gnome.org/mailman/listinfo/vala-list > > _______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list