kao@capmkt.COM (Shao-Kong Kao) (06/06/91)
We have encountered some problems when compiling isis on AUX, and we would appreciate if anybody could give some advices. The first problem is with msg.h, the compiler complains at lines containing va_list. We add the following lines and got rid of the problem: # ifndef va_start # include <varargs.h> # endif The second one is with cl_isis.c at line 1961: if(act_map[act].act_gotres), where act_map[act].act_gotres is a two-element int array. I am not sure the intention of this if statement. I'd like to know whether it check the first element or both elements ? Or is it a bug ? We use c89 compiler and also had many warnings, mainly for pointers to funcs returning void. We have to cast in order to get rid of the warnings. Another problem with cl_isis.c is the register variables, such as the following: msg_get(msg, "%D, %s", longvec, veclen, cip_isisdir); where longvec and cip_isisdir are register variables, since you can't take the address of a register var. Thinking it won't hurt, we just ignored the warnings.
ken@CS.Cornell.EDU (Ken Birman) (06/08/91)
In article <619@capmkt.COM> kao@capmkt.COM (Shao-Kong Kao) writes: >We have encountered some problems when compiling isis on AUX, and we would >appreciate if anybody could give some advices. V3.0 fixes all of these... for V2.1: >The first problem is with msg.h, the compiler complains at lines containing >va_list. We add the following lines and got rid of the problem: ># ifndef va_start ># include <varargs.h> ># endif Right. Some versions of varargs.h aren't protected with the usual #ifndef _varargs.h #define _varargs.h ... stuff #endif and hence die if included twice; apparently AUX is one. We know ISIS is solid on AUX but slight changes to the include sequence can trigger these sortsof problems and we must have made such a change subsequent to porting ISIS and without having a chance to test it again (we don't run AUX at Cornell right now) Your change is fine. We did the identical thing in V3.0! > >The second one is with cl_isis.c at line 1961: if(act_map[act].act_gotres), >where act_map[act].act_gotres is a two-element int array. I am not sure the >intention of this if statement. I'd like to know whether it check the first >element or both elements ? Or is it a bug ? This if statement was just to cut back on the verbiage in the cl_dump output. You can delete the if part. It was supposed to be testing the two values to see if both were null, I guess. >We use c89 compiler and also had many warnings, mainly for pointers to funcs >returning void. We have to cast in order to get rid of the warnings. Yes, we fixed this in V3.0 too, for the same reason. Quite a pain. >Another problem with cl_isis.c is the register variables, such as the following: >msg_get(msg, "%D, %s", longvec, veclen, cip_isisdir); where longvec and >cip_isisdir are register variables, since you can't take the address of a >register var. Thinking it won't hurt, we just ignored the warnings. This was just a bug -- longvec should not have been declared "register" in V2.1 because it was an array. It should have been declared "int". Register is ignored in this case, so it shouldn't matter if you don't fix this, but the code was wrong. -- Kenneth P. Birman E-mail: ken@cs.cornell.edu 4105 Upson Hall, Dept. of Computer Science TEL: 607 255-9199 (office) Cornell University Ithaca, NY 14853 (USA) FAX: 607 255-4428