about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--fastls.c97
-rw-r--r--foo822.c368
2 files changed, 0 insertions, 465 deletions
diff --git a/fastls.c b/fastls.c
deleted file mode 100644
index c1111c3..0000000
--- a/fastls.c
+++ /dev/null
@@ -1,97 +0,0 @@
-#define _GNU_SOURCE
-#include <dirent.h>     /* Defines DT_* constants */
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-
-#define handle_error(msg)					\
-	do { perror(msg); exit(EXIT_FAILURE); } while (0)
-
-struct linux_dirent64 {
-	ino64_t        d_ino;    /* 64-bit inode number */
-	off64_t        d_off;    /* 64-bit offset to next structure */
-	unsigned short d_reclen; /* Size of this dirent */
-	unsigned char  d_type;   /* File type */
-	char           d_name[]; /* Filename (null-terminated) */
-};
-
-
-#define BUF_SIZE 1024000
-
-void flagsort(char *s) {
-        int i, j;
-	if (!s[0])
-		return;
-	// adapted insertion sort from http://stackoverflow.com/a/2789530
-        for (i = 1; s[i]; i++) {
-                char t = s[i];
-                for (j = i; j >= 1 && t < s[j-1]; j--)
-                        s[j] = s[j-1];
-                s[j] = t;
-        }
-}
-
-int
-main(int argc, char *argv[])
-{
-	int fd, nread;
-	char buf[BUF_SIZE];
-	struct linux_dirent64 *d;
-	int bpos;
-	char d_type;
-	
-	fd = open(argc > 1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY);
-	if (fd == -1)
-		handle_error("open");
-	
-	while (1) {
-		nread = syscall(SYS_getdents64, fd, buf, BUF_SIZE);
-		if (nread == -1)
-			handle_error("getdents64");
-		
-		if (nread == 0)
-			break;
-
-		printf("--------------- nread=%d ---------------\n", nread);
-		printf("inode#    file type  d_reclen  d_off   d_name\n");
-		for (bpos = 0; bpos < nread;) {
-			d = (struct linux_dirent64 *) (buf + bpos);
-			if (d->d_type != DT_REG)
-				goto next;
-			if (d->d_name[0] == '.')
-				goto next;
-			char *flags = strstr(d->d_name, ":2,");
-			if (!flags)
-				goto next;
-//			if (strncmp(d->d_name, "1467836925_0.1439.juno,U=87588,FMD5=7e33429f656f1", strlen("1467836925_0.1439.juno,U=87588,FMD5=7e33429f656f1")-1))
-//				goto next;
-//			printf("%s\n", d->d_name);
-			flagsort(flags+3);
-			printf("%s\n", d->d_name);
-//			if (!strchr(flags, 'S'))
-//				printf("%s\n", d->d_name);
-
-//			    goto next;
-
-/*
-			printf("%-10s ", (d_type == DT_REG) ?  "regular" :
-			    (d_type == DT_DIR) ?  "directory" :
-			    (d_type == DT_FIFO) ? "FIFO" :
-			    (d_type == DT_SOCK) ? "socket" :
-			    (d_type == DT_LNK) ?  "symlink" :
-			    (d_type == DT_BLK) ?  "block dev" :
-			    (d_type == DT_CHR) ?  "char dev" : "???");
-			printf("%4d %10lld  %s\n", d->d_reclen,
-			    (long long) d->d_off, d->d_name);
-*/
-next:
-			bpos += d->d_reclen;
-		}
-	}
-
-	exit(EXIT_SUCCESS);
-}
diff --git a/foo822.c b/foo822.c
deleted file mode 100644
index 0db82dd..0000000
--- a/foo822.c
+++ /dev/null
@@ -1,368 +0,0 @@
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#undef getc
-#define getc getc_unlocked
-
-#ifndef __GLIBC__
-#include "/home/chris/src/musl/src/internal/stdio_impl.h"
-#endif
-
-FILE *input;
-
-enum {
-	EOL = -2,
-	EOH = -3
-};
-
-
-//          WSP            =  SP / HTAB
-#define iswsp(c)  (((c) == ' ' || (c) == '\t'))
-
-// CRLF is \n, LF is \n, just CR is ' ',
-// end of file is EOF, end of line is EOL, end of header is EOH,
-// CRLFCR is EOH, CRLFCRLF is EOH, CRCR is EOH
-int
-mgetch()
-{
-	int c, d;
-
-	switch(c = getc(input)) {
-	case EOF:
-		return EOF;
-	case '\r':
-		d = getc(input);
-		if (d != '\n') {
-			// stray CR
-			ungetc(d, input);
-			return ' ';
-		}
-		/* fallthru */
-	case '\n':
-		d = getc(input);
-		if (d == '\r') {
-			d = getc(input);
-			if (d != '\n' && d != '\r')
-				return d;
-		}
-		if (d == '\n' || d == '\r') {
-			return EOH;
-		} else if (iswsp(d)) {
-			// line continuation
-			return ' ';
-		} else {
-			// end of line
-			ungetc(d, input);
-			return EOL;
-		}
-	default:
-		return c;
-	}
-}
-
-char *
-strip(char *t)
-{
-	char *b, *e;
-	for (b = t; *b && iswsp(*b); b++);
-	for (e = b; *e && !iswsp(*e); e++);
-	*e = 0;
-	return b;
-}
-
-void skipws() {
-	int c;
-	do {
-		c = getc(input);
-	} while (c != EOF && iswsp(c));
-	ungetc(c, input);
-}
-
-char *
-parse_header()
-{
-	static char hdr[1024];
-	static const char *hdrend = hdr + sizeof hdr;
-	int c;
-
-	char *s = hdr;
-	*s = 0;
-	while ((c = mgetch()) > 0 && s < hdrend) {
-		if (c < 0)
-			return 0;
-		if (c == ':') {
-			*s = 0;
-			skipws();
-			return strip(hdr);
-		}
-		*s++ = tolower(c);
-	}
-	return 0;
-}
-
-char *
-parse_value()
-{
-	static char value[1024];
-	static const char *valend = value + sizeof value;
-
-	int c;
-	char *s = value;
-
-	*s = 0;
-
-	while ((c = mgetch()) != EOF && s < valend) {
-		if (c == EOH) {
-			ungetc('\n', input);
-			return value;
-		}
-		if (c == EOL) {
-			*s = 0;
-			return value;
-		}
-		*s++ = c;
-	}
-	return value;
-}
-
-int
-parse_tok(char **t)
-{
-	static char tok[16];
-	static const char *tokend = tok + sizeof tok;
-
-	int c;
-
-	char *s = tok;
-	*s = 0;
-	*t = 0;
-
-	c = mgetch();
-	while (iswsp(c))
-		c = mgetch();
-	while (c > 0 && s < tokend) {
-//		printf("%c/%d ", c, c);
-		if (iswsp(c)) {
-			skipws();
-			*s = 0;
-			*t = tok;
-			break;
-		}
-		else
-			*s++ = c;
-		c = mgetch();
-	}
-	if (c == EOL) {
-		*s = 0;
-		*t = tok;
-	}
-	if (t)
-		*t = strip(tok);
-
-//	printf("TOK |%s|", tok);
-	if (c < 0)
-		return c;
-	else {
-		return 1;
-	}
-}
-
-static long
-parse_posint(char *s, size_t minn, size_t maxn)
-{
-        long n;
-        char *end;
-
-        errno = 0;
-        n = strtol(s, &end, 10);
-        if (errno || *end || n < (long)minn || n > (long)maxn)
-		return -1;
-        return n;
-}
-
-int
-parse_date(time_t *r)
-{
-	char *t;
-	int c;
-
-	struct tm tm;
-	
-	if ((c = parse_tok(&t)) < 0) goto fail;
-	if (strlen(t) == 4 && t[3] == ',')  // ignore day of week
-		if ((c = parse_tok(&t)) < 0) goto fail;
-	
-	if ((c = parse_posint(t, 1, 31)) < 0) goto fail;
-	tm.tm_mday = c;
-
-	if ((c = parse_tok(&t)) < 0) goto fail;
-	// convert to switch
-	if      (strcmp("Jan", t) == 0) tm.tm_mon = 0;
-	else if (strcmp("Feb", t) == 0) tm.tm_mon = 1;
-	else if (strcmp("Mar", t) == 0) tm.tm_mon = 2;
-	else if (strcmp("Apr", t) == 0) tm.tm_mon = 3;
-	else if (strcmp("May", t) == 0) tm.tm_mon = 4;
-	else if (strcmp("Jun", t) == 0) tm.tm_mon = 5;
-	else if (strcmp("Jul", t) == 0) tm.tm_mon = 6;
-	else if (strcmp("Aug", t) == 0) tm.tm_mon = 7;
-	else if (strcmp("Sep", t) == 0) tm.tm_mon = 8;
-	else if (strcmp("Oct", t) == 0) tm.tm_mon = 9;
-	else if (strcmp("Nov", t) == 0) tm.tm_mon = 10;
-	else if (strcmp("Dec", t) == 0) tm.tm_mon = 11;
-	else goto fail;
-
-	if ((c = parse_tok(&t)) < 0) goto fail;
-	if ((c = parse_posint(t, 1000, 9999)) > 0) {
-		tm.tm_year = c - 1900;
-	} else if ((c = parse_posint(t, 0, 49)) > 0) {
-		tm.tm_year = c + 100;
-	} else if ((c = parse_posint(t, 50, 99)) > 0) {
-		tm.tm_year = c;
-	} else goto fail;
-
-	if ((c = parse_tok(&t)) < 0)
-		if (!t) goto fail;
-	if (strlen(t) == 8 && t[2] == ':' && t[5] == ':') {
-		t[2] = t[5] = 0;
-		if ((c = parse_posint(t, 0, 24)) < 0) goto fail;
-		tm.tm_hour = c;
-		if ((c = parse_posint(t+3, 0, 59)) < 0) goto fail;
-		tm.tm_min = c;
-		if ((c = parse_posint(t+6, 0, 61)) < 0) goto fail;
-		tm.tm_sec = c;
-	} else if (strlen(t) == 5 && t[2] == ':') {
-		t[2] = 0;
-		if ((c = parse_posint(t, 0, 24)) < 0) goto fail;
-		tm.tm_hour = c;
-		if ((c = parse_posint(t+3, 0, 59)) < 0) goto fail;
-		tm.tm_min = c;
-		tm.tm_sec = 0;
-	} else {
-		goto fail;
-	}
-
-//	if ((c = parse_tok(&t)) > 0) goto fail;   // expect EOL, EOH, EOF
-	c = parse_tok(&t);
-	if (t && strlen(t) == 5 && (t[0] == '+' || t[0] == '-')) {
-		if ((c = parse_posint(t+1, 0, 10000)) < 0) goto fail;
-                if (t[0] == '+') {
-                        tm.tm_hour -= c / 100;
-                        tm.tm_min  -= c % 100;
-                } else {
-                        tm.tm_hour += c / 100;
-                        tm.tm_min  += c % 100;
-                }
-	}
-	// TODO: parse obs-zone?
-
-	tm.tm_isdst = -1;
-
-	*r = timegm(&tm);
-	return 0;
-
-fail:
-	*r = -1;
-	/* slurp rest of line and leave it */
-        while ((c = mgetch()) > 0)
-		;
-	return c;
-}
-
-int decode_rfc2047 (char *str, char *dst, size_t dstlen);
-
-
-int catmain() {
-	int c;
-
-	input = stdin;
-	while ((c = mgetch())) {
-		if (c > 0)
-			putchar(c);
-		else
-			printf("[%d]\n", c);
-	}
-
-	return 0;
-}
-
-int tmain() {
-	char *s;
-
-	input = stdin;
-	while ((s = parse_header())) {
-		if (strcmp(s, "date") == 0) {
-			time_t t;
-			if (parse_date(&t) >= 0)
-				printf("%s :: (%ld) %s", s, t, ctime(&t));
-			else
-				printf("date : OOPS\n");
-		} else if (strcmp(s, "subject") == 0) {
-			char *v = parse_value();
-			char buf[2048];
-			decode_rfc2047(v, buf, sizeof buf);
-			printf("%s : %s\n", s, v);
-			printf("%s :: %s\n", s, buf);
-		} else {
-			char *v = parse_value();
-			printf("%s : %s\n", s, v);
-		}
-	}
-
-	return 0;
-}
-
-int main() {
-	char *s;
-	
-	char *line = 0;
-	size_t linelen = 0;
-	int read;
-
-	int i = 0;
-	
-	static char buf[50000]; /* buf must survive until stdout is closed */
-
-	while ((read = getdelim(&line, &linelen, '\n', stdin)) != -1) {
-		if (line[read-1] == '\n') line[read-1] = 0;
-
-		printf("%s\n", line);
-
-		FILE *f = fopen(line, "r");
-		if (!f) {
-			perror("fopen");
-			continue;
-		}
-		setvbuf ( f , buf , _IOFBF , sizeof(buf) );
-		i++;
-
-		input = f;
-		while ((s = parse_header())) {
-			if (strcmp(s, "date") == 0) {
-				time_t t;
-				if (parse_date(&t) >= 0)
-					printf("%s :: (%ld) %s", s, t, ctime(&t));
-				else
-					printf("date : OOPS\n");
-			} else if (strcmp(s, "subject") == 0 ||
-			    strcmp(s, "from") == 0 ||
-			    strcmp(s, "to") == 0) {
-				char *v = parse_value();
-				char buf[2048];
-				if (decode_rfc2047(v, buf, sizeof buf))
-					printf("%s :: %s\n", s, buf);
-				else
-					printf("%s : %s\n", s, v);
-			} else
-				parse_value();  // and ignore it
-		}
-		fclose(f);
-	}
-
-	printf("%d mails scanned\n", i);
-
-	return 0;
-}