return NULL;
xfp = (XFILE *) xmalloc(sizeof(*xfp));
xfp->x_fp = fp;
- xfp->x_line = 0;
+ xfp->x_line = 1;
return xfp;
}
struct flock fl = { readonly? F_RDLCK : F_WRLCK, SEEK_SET, 0, 0, 0 };
int fd;
- if ((fd = open(fname, readonly? O_RDONLY : O_RDWR)) < 0) {
+ if ((fd = open(fname, readonly? O_RDONLY : (O_RDWR|O_CREAT))) < 0) {
xlog(L_WARNING, "could not open %s for locking", fname);
return -1;
}
xgettok(XFILE *xfp, char sepa, char *tok, int len)
{
int i = 0;
- char c = 0;
+ int c = 0;
while (i < len && (c = xgetc(xfp)) != EOF && c != sepa && !isspace(c))
tok[i++] = c;
if (c == '\n')
- xungetc(c, xfp->x_fp);
+ xungetc(c, xfp);
if (!i)
return 0;
if (i >= len || (sepa && c != sepa))
return 1;
}
-char
+int
xgetc(XFILE *xfp)
{
- char c = getc(xfp->x_fp);
+ int c = getc(xfp->x_fp);
if (c == EOF)
return c;
void
xungetc(int c, XFILE *xfp)
{
- if (c != EOF) {
- ungetc(c, xfp->x_fp);
- if (c == '\n')
- xfp->x_line--;
- }
+ if (c == EOF)
+ return;
+
+ ungetc(c, xfp->x_fp);
+ if (c == '\n')
+ xfp->x_line--;
}
void
xskip(XFILE *xfp, char *str)
{
- char c;
+ int c;
while ((c = xgetc(xfp)) != EOF && strchr(str, c));
ungetc(c, xfp->x_fp);
char
xskipcomment(XFILE *xfp)
{
- char c;
+ int c;
while ((c = getc(xfp->x_fp)) != EOF && c != '\n');
return c;