Posted to tcl by kbk at Wed Mar 12 13:47:27 GMT 2014view raw

  1. inline signed int mulSI(signed int a, signed int b) {
  2. signed int result;
  3. if (si_a > 0) { /* si_a is positive */
  4. if (si_b > 0) { /* si_a and si_b are positive */
  5. if (si_a > (INT_MAX / si_b)) {
  6. /* Handle error */
  7. }
  8. } else { /* si_a positive, si_b nonpositive */
  9. if (si_b < (INT_MIN / si_a)) {
  10. /* Handle error */
  11. }
  12. } /* si_a positive, si_b nonpositive */
  13. } else { /* si_a is nonpositive */
  14. if (si_b > 0) { /* si_a is nonpositive, si_b is positive */
  15. if (si_a < (INT_MIN / si_b)) {
  16. /* Handle error */
  17. }
  18. } else { /* si_a and si_b are nonpositive */
  19. if ( (si_a != 0) && (si_b < (INT_MAX / si_a))) {
  20. /* Handle error */
  21. }
  22. } /* End if si_a and si_b are nonpositive */
  23. } /* End if si_a is nonpositive */
  24.  
  25. result = si_a * si_b;
  26. return result;
  27. }