1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| | #include "pwf.h"
#include <pthread.h>
#include <limits.h>
#include <stdio.h>
int fgetspent_r(FILE *f, struct spwd* sp, char *line, size_t size, struct spwd **spret)
{
int res = 0;
int cs;
*spret = 0;
if (size > INT_MAX)
size = INT_MAX; //2GB ought to be enough for anyone
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
if (!fgets(line, size, f))
goto out;
res = ERANGE;
if (line[strlen(line) - 1] != '\n')
goto out;
res = EILSEQ;
if ( __parsespent(line, sp) < 0)
goto out;
*spret = sp;
res = 0;
out:
pthread_setcancelstate(cs, 0);
return res;
}
|