Andrew Dunstan wrote:
>
> >this code will fail rather horribly if sizeof(pid_t) != sizeof(int).
> >Even more to the point, I believe a standalone backend will put
> >the negative of its PID into the file, and the revised code will fail
> >to parse that at all.
> >
> >I think the safest code would be like
> >
> > long tmp;
> >
> > fscanf(pidf, "%ld", &tmp);
> > if (tmp < 0)
> > {
> > tmp = -tmp;
> > // do anything else needed for backend case
> > }
> > pid = (pid_t) tmp;
> >
> >
> >
> >
>
> I deliberately used a signed long for these reasons in the first place.
>
> The number of places we actually need to use this value as a pid is
> small (3 by my count - in calls to kill() ), and it was cast there to
> pid_t, I think. I still don't see what's wrong with that.
OK, I created a typedef pgpid_t equal to long and used that in the code,
change format to %ld, and documented why negative values are an issue.
--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073