if (nbuf.ino) { nd = spdist(nbuf.name, guess); if (nd <= d && nd != 3) { strcpy(best, nbuf.name); d = nd; if (d == 0) /* exact match */ break; } } close(fd); return d;}/* spdist: return distance between two names *//* * very rough spelling metric: * 0 if the strings are identical * 1 if two chars are transposed * 2 if one char wrong, added or deleted * 3 otherwise */#define EQ(s,t) (strcmp(s,t) == 0)spdist(s, t) char *s, *t;{ while (*s++ == *t) if (*t++ == '\0') return 0; /* exact match */ if (*--s) { if (*t) { if (s[1] && t[1] && *s == t[1] && *t == s[1] && EQ(s+2, t+2)) return 1; /* transposition */ if (EQ(s+1, t+1)) return 2; /* 1 char mismatch */ } if (EQ(s+1, t)) return 2; /* extra character */ } if (*t && EQ(s, t+1)) return 2; /* missing character */ return 3;}3.8.50
strindex.cstrindex(s, t) /* return index of t in s, -1 if none */ char *s, *t;{ int i, n; n = strlen(t); for (i = 0; s[i] != '\0'; i++) if (strncmp(s+i, t, n) == 0) return i; return -1;}3.8.51
sv.c/* sv: save new files */#include <stdio.h>#include <sys/types.h>#include <sys/dir.h>#include <sys/stat.h>char *progname;main(argc, argv) int argc; char *argv[];{ int i; struct stat stbuf; char *dir = argv[argc-1]; progname = argv[0]; if (argc <= 2) error ("Usage: %s files... dir", progname); if (stat(dir, festbuf) == -1) error("can't access directory %s", dir); if ((stbuf.st_mode & S_IFMT) != S_IFDIR) error("%s is not a directory", dir); for (i = 1; i < argc-1; i++) sv(argv[i], dir); exit(0);}sv(file, dir) /* save file in dir */ char *file, *dir;{ struct stat sti, sto; int fin, fout, n; char target[BUFSIZ], buf[BUFSIZ], *index(); sprintf(target, "%s/%s", dir, file); if (index(file, '/') != NULL) /* strchr() in some systems */ error("won't handle '/'s in %s", file); if (stat(file, &sti) == -1) error("can't stat %s", file); if (stat(target, &sto) == -1) /* target not present */ sto.st_mtime = 0; /* so make it look old */ if (sti.st_mtime < sto.st_mtime) /* target is newer */ fprintf(stderr, "%s: %s not copied\n", progname, file); else if ((fin = open(file, 0)) == -1) error("can't open file %s", file); else if ((fout = creat(target, sti.st_mode)) == -1) error("can't create %s", target); while ((n = read(fin, buf, sizeof buf)) > 0) if (write(fout, buf, n) != n) error("error writing %s", target); close(fin); close(fout);}