I moved this to the "junkdrawer" repo because I am now using it!

cat-town
Dan Buch 13 years ago
parent 4d0d973c8d
commit 7d75b83fa7

@ -1,2 +1 @@
/temperatures /temperatures
/truncpwd

@ -1,5 +1,5 @@
CFLAGS += -g -Wall -Wextra CFLAGS += -g -Wall -Wextra
all: temperatures truncpwd all: temperatures
.PHONY: all .PHONY: all

@ -1,76 +0,0 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#define BUFSIZE 2048 + 1
#define DEFAULT_TRUNCPWD_LEN "40"
void substr(char *dest, char *src, int offset, int len) {
int i;
for (i = 0; i < len && src[offset + i] != '\0'; i++) {
dest[i] = src[offset + i];
}
dest[i] = '\0';
}
void with_home_as_tilde(char *dest, char *src, char *home) {
size_t src_len = strlen(src);
size_t home_len = strlen(home);
if (strncmp(src, home, home_len) == 0) {
char less_home[BUFSIZE];
substr(less_home, src, home_len, src_len - home_len);
sprintf(dest, "~%s", less_home);
} else {
sprintf(dest, "%s", src);
}
}
int main(void)
{
char pwd[BUFSIZE];
const char *home = getenv("HOME");
const char *truncpwd_len_str = getenv("TRUNCPWD_LEN");
if (truncpwd_len_str == NULL) {
truncpwd_len_str = DEFAULT_TRUNCPWD_LEN;
}
unsigned int truncpwd_len = (unsigned int)atoi(truncpwd_len_str);
const char *truncpwd_leader = getenv("TRUNCPWD_LEADER");
if (truncpwd_leader == NULL) {
truncpwd_leader = "...";
}
if (getcwd(pwd, sizeof(pwd)) == NULL) {
fprintf(stderr, "truncpwd: %s\n", strerror(errno));
return 1;
}
size_t pwd_len = strlen(pwd);
if (strncmp(home, pwd, pwd_len) == 0) {
printf("~\n");
}
char tilde_subbed[BUFSIZE];
with_home_as_tilde(tilde_subbed, pwd, (char *)home);
size_t tilde_subbed_len = strlen(tilde_subbed);
if (tilde_subbed_len <= truncpwd_len) {
printf("%s\n", tilde_subbed);
return 0;
} else {
char last_n[truncpwd_len + 1];
int offset = tilde_subbed_len - truncpwd_len + 1;
substr(last_n, tilde_subbed, offset, truncpwd_len + 1);
printf("%s%s\n", truncpwd_leader, last_n);
}
return 0;
}
Loading…
Cancel
Save