summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <programble@gmail.com>2017-07-04 22:10:00 -0400
committerJune McEnroe <programble@gmail.com>2017-07-04 22:10:00 -0400
commit336c3879297eaeaebecdd28f63a0df1afd4dbabe (patch)
tree9906623b100e63f321e74ca82b31c90e451269e0
parentReorganize neovim configuration, again (diff)
downloadsrc-336c3879297eaeaebecdd28f63a0df1afd4dbabe.tar.gz
src-336c3879297eaeaebecdd28f63a0df1afd4dbabe.zip
Consolidate pbd, pbcopy, pbpaste
-rwxr-xr-xcurtis/.bin/pbcopy.c55
-rwxr-xr-xcurtis/.bin/pbd.c55
-rwxr-xr-xlink.sh1
3 files changed, 53 insertions, 58 deletions
diff --git a/curtis/.bin/pbcopy.c b/curtis/.bin/pbcopy.c
deleted file mode 100755
index 23403d2d..00000000
--- a/curtis/.bin/pbcopy.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#if 0
-cc -Wall -Wextra -pedantic $@ -o $(dirname $0)/pbcopy $0 && \
-exec cc -Wall -Wextra -pedantic -DPBPASTE $@ -o $(dirname $0)/pbpaste $0
-#endif
-
-// pbcopy and pbpaste implementation which connects to pbd.
-
-#include <arpa/inet.h>
-#include <err.h>
-#include <netinet/in.h>
-#include <stdio.h>
-#include <sys/socket.h>
-#include <sysexits.h>
-#include <unistd.h>
-
-int main() {
-    int error;
-
-    int client = socket(PF_INET, SOCK_STREAM, 0);
-    if (client < 0) err(EX_OSERR, "socket");
-
-    struct sockaddr_in addr = {
-        .sin_family = AF_INET,
-        .sin_port = htons(7062),
-        .sin_addr = { .s_addr = htonl(0x7f000001) },
-    };
-
-    error = connect(client, (struct sockaddr *)&addr, sizeof(addr));
-    if (error) err(EX_OSERR, "connect");
-
-#ifdef PBPASTE
-    int fdIn = client;
-    int fdOut = STDOUT_FILENO;
-    error = shutdown(client, SHUT_WR);
-    if (error) err(EX_OSERR, "shutdown");
-#else
-    int fdIn = STDIN_FILENO;
-    int fdOut = client;
-#endif
-
-    char readBuf[4096];
-    ssize_t readLen;
-    while (0 < (readLen = read(fdIn, readBuf, sizeof(readBuf)))) {
-        char *writeBuf = readBuf;
-        ssize_t writeLen;
-        while (0 < (writeLen = write(fdOut, writeBuf, readLen))) {
-            writeBuf += writeLen;
-            readLen -= writeLen;
-        }
-        if (writeLen < 0) err(EX_IOERR, "write");
-    }
-    if (readLen < 0) err(EX_IOERR, "read");
-
-    return EX_OK;
-}
diff --git a/curtis/.bin/pbd.c b/curtis/.bin/pbd.c
index e7b61d12..a90974e6 100755
--- a/curtis/.bin/pbd.c
+++ b/curtis/.bin/pbd.c
@@ -1,9 +1,13 @@
 #if 0
-exec cc -Wall -Wextra -pedantic $@ -o $(dirname $0)/pbd $0
+cc -Wall -Wextra -pedantic $@ -o $(dirname $0)/pbd $0 && \
+cc -Wall -Wextra -pedantic -DPBCOPY $@ -o $(dirname $0)/pbcopy $0 && \
+exec cc -Wall -Wextra -pedantic -DPBCOPY -DPBPASTE $@ -o $(dirname $0)/pbpaste $0
 #endif
 
-// TCP server which pipes between macOS pbcopy and pbpaste.
+// TCP server which pipes between macOS pbcopy and pbpaste, and pbcopy and
+// pbpaste implementations which connect to it.
 
+#include <arpa/inet.h>
 #include <err.h>
 #include <netinet/in.h>
 #include <stdint.h>
@@ -14,6 +18,8 @@ exec cc -Wall -Wextra -pedantic $@ -o $(dirname $0)/pbd $0
 #include <sysexits.h>
 #include <unistd.h>
 
+#ifndef PBCOPY
+
 static void spawn(const char *cmd, int childFd, int parentFd) {
     pid_t pid = fork();
     if (pid < 0) err(EX_OSERR, "fork");
@@ -71,3 +77,48 @@ int main() {
         if (error) err(EX_IOERR, "close");
     }
 }
+
+#else
+
+int main() {
+    int error;
+
+    int client = socket(PF_INET, SOCK_STREAM, 0);
+    if (client < 0) err(EX_OSERR, "socket");
+
+    struct sockaddr_in addr = {
+        .sin_family = AF_INET,
+        .sin_port = htons(7062),
+        .sin_addr = { .s_addr = htonl(0x7f000001) },
+    };
+
+    error = connect(client, (struct sockaddr *)&addr, sizeof(addr));
+    if (error) err(EX_OSERR, "connect");
+
+#ifdef PBPASTE
+    int fdIn = client;
+    int fdOut = STDOUT_FILENO;
+    error = shutdown(client, SHUT_WR);
+    if (error) err(EX_OSERR, "shutdown");
+#else
+    int fdIn = STDIN_FILENO;
+    int fdOut = client;
+#endif
+
+    char readBuf[4096];
+    ssize_t readLen;
+    while (0 < (readLen = read(fdIn, readBuf, sizeof(readBuf)))) {
+        char *writeBuf = readBuf;
+        ssize_t writeLen;
+        while (0 < (writeLen = write(fdOut, writeBuf, readLen))) {
+            writeBuf += writeLen;
+            readLen -= writeLen;
+        }
+        if (writeLen < 0) err(EX_IOERR, "write");
+    }
+    if (readLen < 0) err(EX_IOERR, "read");
+
+    return EX_OK;
+}
+
+#endif
diff --git a/link.sh b/link.sh
index c83a9368..ffdaf413 100755
--- a/link.sh
+++ b/link.sh
@@ -24,7 +24,6 @@ link() {
 link '.bin/bri.c'
 link '.bin/jrp.c'
 link '.bin/manpager'
-link '.bin/pbcopy.c'
 link '.bin/pbd.c'
 link '.bin/xx.c'
 link '.config/git/config'