<p>I was about to add an extra signal handler to an app we have here and I noticed that the author had used <code>sigaction()</code> to set up the other signal handlers. I was going to use <code>signal()</code>. To follow convention I should use <code>sigaction()</code> but if I was writing from scratch, which should I choose?</p>

I'd use signal() since it's more portable, in theory at least.  I'll vote up any commenter who can come up with a modern system that doesn't have a POSIX compatibility layer and supports signal().
Quoting from the
GLIBC documentation
:
It's possible to use both the signal and sigaction functions within
  a single program, but you have to be careful because they can
  interact in slightly strange ways.
The sigaction function specifies more information than the signal
  function, so the return value from signal cannot express the full
  range of sigaction possibilities. Therefore, if you use signal to
  save and later reestablish an action, it may not be able to
  reestablish properly a handler that was established with sigaction.
To avoid having problems as a result, always use sigaction to save
  and restore a handler if your program uses sigaction at all. Since
  sigaction is more general, it can properly save and reestablish any
  action, regardless of whether it was established originally with
  signal or sigaction.
On some systems if you establish an action with signal and then
  examine it with sigaction, the handler address that you get may not
  be the same as what you specified with signal. It may not even be
  suitable for use as an action argument with signal. But you can rely
  on using it as an argument to sigaction. This problem never happens
  on the GNU system.
So, you're better off using one or the other of the mechanisms
  consistently within a single program.
Portability Note: The basic signal function is a feature of ISO C,
  while sigaction is part of the POSIX.1 standard. If you are
  concerned about portability to non-POSIX systems, then you should
  use the signal function instead.
Copyright (C) 1996-2008 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
    document under the terms of the GNU Free Documentation License,
    Version 1.2 or any later version published by the Free Software
    Foundation; with no Invariant Sections, with no Front-Cover Texts,
    and with no Back-Cover Texts. A copy of the license is included in
    the section entitled "GNU Free Documentation License".