X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=user_list.c;fp=user_list.c;h=dfd8248c7f21940d7a94b9fe79442f02693a070a;hb=6a2dbfdb87b3036085ce664a847fc9eb419f65d4;hp=8c54ab7f78cc150a236d7231283d3b5279d9e3fc;hpb=7c305178150d5adb4b566e11f1a4bc2e5fe91c8e;p=paraslash.git diff --git a/user_list.c b/user_list.c index 8c54ab7f..dfd8248c 100644 --- a/user_list.c +++ b/user_list.c @@ -15,6 +15,30 @@ INITIALIZED_LIST_HEAD(user_list); +/* + * Wrapper for fgets(3). + * + * Unlike fgets(3), an integer value is returned. On success, this function + * returns 1. On errors, -E_FGETS is returned. A zero return value indicates an + * end of file condition. + */ +static int xfgets(char *line, int size, FILE *f) +{ +again: + if (fgets(line, size, f)) + return 1; + if (feof(f)) + return 0; + if (!ferror(f)) + return -E_FGETS; + if (errno != EINTR) { + PARA_ERROR_LOG("%s\n", strerror(errno)); + return -E_FGETS; + } + clearerr(f); + goto again; +} + /* * Fill the list of users known to para_server. * @@ -36,7 +60,7 @@ static void populate(char *user_list_file) struct user *u; struct asymmetric_key *pubkey; - ret = para_fgets(line, sizeof(line), file_ptr); + ret = xfgets(line, sizeof(line), file_ptr); if (ret <= 0) break; if (sscanf(line,"%200s %200s %200s %200s", w, n, k, p) < 3)