From: 諏訪子 Date: Fri, 5 Jul 2024 06:02:32 +0000 (+0900) Subject: Haiku対応 X-Git-Tag: sp-1.4.0~16^2~4 X-Git-Url: http://10.11.0.4:5575/?a=commitdiff_plain;h=5c0df961577becf25988ab4dbf6426b42e083722;p=sp.git Haiku対応 --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 18d86f4..7157a38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.4.0 +* Haiku対応 + # 1.3.0 * 英訳の追加 (レミリア・スカーレットさん) * GNU Make → BSD Make diff --git a/Makefile b/Makefile index 4dcab74..1e7727e 100644 --- a/Makefile +++ b/Makefile @@ -10,17 +10,22 @@ NAME != cat main.c | grep "const char \*sofname" | awk '{print $$5}' | \ VERSION != cat main.c | grep "const char \*version" | awk '{print $$5}' | \ sed "s/\"//g" | sed "s/;//" PREFIX = /usr/local - -MANPREFIX = ${PREFIX}/man - -.if ${UNAME_S} == "FreeBSD" -MANPREFIX = ${PREFIX}/share/man +.if ${UNAME_S} == "Haiku" +PREFIX = /boot/system .elif ${UNAME_S} == "Linux" PREFIX = /usr +.endif + MANPREFIX = ${PREFIX}/share/man -.elif ${UNAME_S} == "NetBSD" -PREFIX = /usr/pkg -MANPREFIX = ${PREFIX}/share/man +.if ${UNAME_S} == "OpenBSD" +MANPREFIX = ${PREFIX}/man +.elif ${UNAME_S} == "Haiku" +MANPREFIX = ${PREFIX}/documentation/man +.endif + +DATAPREFIX = ${PREFIX}/share +.if ${UNAME_S} == "Haiku" +DATAPREFIX = ${PREFIX}/data .endif CC = cc @@ -82,12 +87,12 @@ install: all chmod 644 ${DESTDIR}${MANPREFIX}/man1/${NAME}-jp.1 install-zsh: - cp sp-completion.zsh ${DESTDIR}${PREFIX}/share/zsh/site-functions/_sp + cp sp-completion.zsh ${DESTDIR}${DATAPREFIX}/zsh/site-functions/_sp uninstall: rm -rf ${DESTDIR}${PREFIX}/bin/${NAME} rm -rf ${DESTDIR}${MANPREFIX}/man1/${NAME}-en.1 rm -rf ${DESTDIR}${MANPREFIX}/man1/${NAME}-jp.1 - rm -rf ${DESTDIR}${PREFIX}/share/zsh/site-functions/_sp + rm -rf ${DESTDIR}${DATAPREFIX}/zsh/site-functions/_sp .PHONY: all clean dist install install-zsh uninstall diff --git a/README.md b/README.md index 30756d7..10bf9f1 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,14 @@ doas make install doas make install-zsh ``` +### Haiku +```sh +pkgman install bmake libassuan libassuan_devel gpgme gpgme_devel gnupg llvm18_clang +bmake +bmake install +bmake install-zsh +``` + ## 初期設定 | Initial setup 「gpg -k」でGPG鍵IDを確認して、「sp -i [GPG ID]」を実行して下さい。 Confirm your GPG key ID with "gpg -k", and run "sp -i [GPG ID]". diff --git a/main.c b/main.c index b549ab0..30065df 100644 --- a/main.c +++ b/main.c @@ -26,7 +26,11 @@ char *getfullpath(char *arg) { return NULL; } +#if defined(__HAIKU__) + char *basedir = "/config/settings/sp/" +#else char *basedir = "/.local/share/sp/"; +#endif size_t fullPathLen; char *fullPath; if (arg != NULL) { diff --git a/src/addpass.c b/src/addpass.c index 4c7323c..f6e92b5 100644 --- a/src/addpass.c +++ b/src/addpass.c @@ -48,7 +48,11 @@ void addpass(char *file) { return; } +#if defined(__HAIKU__) + char *basedir = "/config/settings/sp/" +#else char *basedir = "/.local/share/sp/"; +#endif char *ext = ".gpg"; char pass[256]; diff --git a/src/delpass.c b/src/delpass.c index b20d66a..5368264 100644 --- a/src/delpass.c +++ b/src/delpass.c @@ -70,7 +70,11 @@ int delpass(char *file, int force) { return -1; } +#if defined(__HAIKU__) + char *basedir = "/config/settings/sp/" +#else char *basedir = "/.local/share/sp/"; +#endif char *ext = ".gpg"; int alllen = snprintf(NULL, 0, "%s%s%s%s", homedir, basedir, file, ext) + 1; diff --git a/src/initpass.c b/src/initpass.c index 2b4e71b..c3bc2c9 100644 --- a/src/initpass.c +++ b/src/initpass.c @@ -12,7 +12,11 @@ void initpass(char *gpgid) { return; } +#if defined(__HAIKU) + char *basedir = "/config/settings/sp/" +#else char *basedir = "/.local/share/sp/"; +#endif char dirpath[256]; snprintf(dirpath, sizeof(dirpath), "%s%s", homedir, basedir); diff --git a/src/otppass.c b/src/otppass.c index c74f130..3f4e2c4 100644 --- a/src/otppass.c +++ b/src/otppass.c @@ -59,6 +59,25 @@ unsigned char *extract_secret(const char *otpauth_url, size_t *decoded_len) { return secret_decoded; } +#if defined(__HAIKU__) +uint64_t htobe64(uint64_t counter) { + uint64_t res = 0; + uint8_t *dest = (uint8_t *)&res; + uint8_t *src = (uint8_t *)&counter; + + dest[0] = src[7]; + dest[1] = src[6]; + dest[2] = src[5]; + dest[3] = src[4]; + dest[4] = src[3]; + dest[5] = src[2]; + dest[6] = src[1]; + dest[7] = src[0]; + + return res; +} +#endif + uint32_t generate_totp(const char *secret, uint64_t counter) { counter = htobe64(counter); diff --git a/src/showpass.c b/src/showpass.c index 826974b..d98eb1e 100644 --- a/src/showpass.c +++ b/src/showpass.c @@ -51,7 +51,11 @@ const char *showpass(char *file) { return NULL; } +#if defined(__HAIKU__) + char *basedir = "/config/settings/sp/" +#else char *basedir = "/.local/share/sp/"; +#endif char *ext = ".gpg"; int alllen = snprintf(NULL, 0, "%s%s%s%s", homedir, basedir, file, ext) + 1; char *gpgpath = malloc(alllen); diff --git a/src/yankpass.c b/src/yankpass.c index ac5a814..d03691d 100644 --- a/src/yankpass.c +++ b/src/yankpass.c @@ -48,7 +48,11 @@ void yankpass(char *file) { return; } +#if defined(__HAIKU__) + char *basedir = "/config/settings/sp/" +#else char* basedir = "/.local/share/sp/"; +#endif char* ext = ".gpg"; int alllen = snprintf(NULL, 0, "%s%s%s%s", homedir, basedir, file, ext) + 1; char* gpgpath = malloc(alllen);