Fix compiling on Linux
This commit is contained in:
parent
fd0cc6daf8
commit
7f7cb29305
18
Makefile
18
Makefile
|
@ -1,4 +1,9 @@
|
|||
.POSIX:
|
||||
MAGIC= case "`uname | tr A-Z a-z`" in\
|
||||
*linux*)export CFLAGS="$$CFLAGS -D_XOPEN_SOURCE";\
|
||||
export CFLAGS="$$CFLAGS -D_DEFAULT_SOURCE";\
|
||||
;;\
|
||||
esac
|
||||
MAGICTLS=\
|
||||
if command -v pkg-config >/dev/null 2>&1 &&\
|
||||
pkg-config --exists libtls; then\
|
||||
|
@ -10,6 +15,7 @@ MAGICTLS=\
|
|||
MAGICBSD=\
|
||||
if command -v pkg-config >/dev/null 2>&1 &&\
|
||||
pkg-config --exists libbsd; then\
|
||||
export CFLAGS="$$CFLAGS -DLIBBSD";\
|
||||
export CFLAGS="$$CFLAGS `pkg-config --cflags libbsd`";\
|
||||
export LDFLAGS="$$LDFLAGS `pkg-config --libs libbsd`";\
|
||||
fi
|
||||
|
@ -17,16 +23,18 @@ default: magic-libgeminiclient.a
|
|||
all: magic
|
||||
magic: magic-libgeminiclient.a magic-gemini-cat
|
||||
magic-libgeminiclient.a:
|
||||
@${MAGICTLS}; ${MAKE} ${MAKEFLAGS} libgeminiclient.a
|
||||
@${MAGIC}; ${MAGICTLS}; ${MAKE} ${MAKEFLAGS} libgeminiclient.a
|
||||
magic-gemini-cat:
|
||||
@${MAGICTLS}; ${MAGICBSD}; ${MAKE} ${MAKEFLAGS} gemini-cat
|
||||
@${MAGIC}; ${MAGICTLS}; ${MAGICBSD};\
|
||||
${MAKE} ${MAKEFLAGS} gemini-cat
|
||||
libgeminiclient.a: libgeminiclient.o
|
||||
${AR} ${ARFLAGS} $@ libgeminiclient.o
|
||||
libgeminiclient.o: libgeminiclient.c libgeminiclient.h
|
||||
${CC} -c ${CFLAGS} -o $@ libgeminiclient.c
|
||||
gemini-cat: gemini-cat.c libgeminiclient.a
|
||||
${CC} -I. ${CFLAGS} ${LDFLAGS} -o $@ gemini-cat.c \
|
||||
libgeminiclient.a
|
||||
gemini-cat: gemini-cat.o libgeminiclient.a
|
||||
${CC} -o $@ gemini-cat.o libgeminiclient.a ${LDFLAGS}
|
||||
gemini-cat.o: gemini-cat.c libgeminiclient.h
|
||||
${CC} -c -I. ${CFLAGS} -o $@ gemini-cat.c
|
||||
install: libgeminiclient.a
|
||||
install -m444 libgeminiclient.a \
|
||||
"$$DESTDIR/$${PREFIX:-/usr/local}/lib/"
|
||||
|
|
|
@ -8,9 +8,14 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <readpassphrase.h>
|
||||
#include <sysexits.h>
|
||||
|
||||
#ifdef LIBBSD
|
||||
#include <bsd/readpassphrase.h>
|
||||
#else
|
||||
#include <readpassphrase.h>
|
||||
#endif
|
||||
|
||||
#include <tls.h>
|
||||
|
||||
#include <libgeminiclient.h>
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <err.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <strings.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <tls.h>
|
||||
|
@ -51,6 +52,7 @@ static int write_tofu(struct gemini_tofu *, int);
|
|||
static void free_tofu(struct gemini_tofu *);
|
||||
static size_t escapequery(char *, size_t, const char *, size_t);
|
||||
static size_t get_hostname(char *, size_t, const char *, size_t, int);
|
||||
static int setflock(int, int);
|
||||
|
||||
void
|
||||
gemini_init(struct gemini *g)
|
||||
|
@ -210,14 +212,22 @@ gemini_connect(struct gemini *g, const char *url)
|
|||
goto err;
|
||||
if (g->tofufile != NULL) {
|
||||
if (g->tofufd < 0 && (g->tofufd = open(g->tofufile,
|
||||
((g->flags & GEMINI_TOFU_WRITE) ?
|
||||
(O_RDWR | O_CREAT) : O_RDONLY) |
|
||||
O_EXLOCK, 0600)) < 0 && errno != ENOENT) {
|
||||
(g->flags & GEMINI_TOFU_WRITE) ?
|
||||
(O_RDWR | O_CREAT) : O_RDONLY, 0600)) < 0 &&
|
||||
errno != ENOENT) {
|
||||
warn("Could not open: %s", g->tofufile);
|
||||
goto err;
|
||||
}
|
||||
if (g->tofufd >= 0 && (g->flags & GEMINI_TOFU_WRITE) &&
|
||||
setflock(g->tofufd, F_WRLCK) == -1) {
|
||||
(void)close(g->tofufd);
|
||||
g->tofufd = -1;
|
||||
warn("Could not lock the TOFU file");
|
||||
goto err;
|
||||
}
|
||||
if (g->tofu == NULL && g->tofufd >= 0 &&
|
||||
load_tofu(&g->tofu, g->tofufd) < 0) {
|
||||
(void)setflock(g->tofufd, F_UNLCK);
|
||||
(void)close(g->tofufd);
|
||||
g->tofufd = -1;
|
||||
warn("Could not load: %s", g->tofufile);
|
||||
|
@ -432,6 +442,7 @@ gemini_fini(struct gemini *g)
|
|||
g->tofu = NULL;
|
||||
}
|
||||
if (g->tofufd >= 0) {
|
||||
(void)setflock(g->tofufd, F_UNLCK);
|
||||
(void)close(g->tofufd);
|
||||
g->tofufd = -1;
|
||||
}
|
||||
|
@ -771,3 +782,16 @@ get_hostname(char *dst, size_t dl, const char *src, size_t sl, int f)
|
|||
}
|
||||
return (he - hs);
|
||||
}
|
||||
|
||||
int
|
||||
setflock(int fd, int lock)
|
||||
{
|
||||
struct flock l;
|
||||
|
||||
(void)memset(&l, 0, sizeof(l));
|
||||
l.l_type = lock;
|
||||
l.l_whence = SEEK_SET;
|
||||
l.l_start = 0;
|
||||
l.l_len = 0;
|
||||
return (fcntl(fd, F_SETLK, &l));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue