📄 utils.c
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <auth.h>#include "imap4d.h"/* * reverse string [s:e) in place */voidstrrev(char *s, char *e){ int c; while(--e > s){ c = *s; *s++ = *e; *e = c; }}intisdotdot(char *s){ return s[0] == '.' && s[1] == '.' && (s[2] == '/' || s[2] == '\0');}intissuffix(char *suf, char *s){ int n; n = strlen(s) - strlen(suf); if(n < 0) return 0; return strcmp(s + n, suf) == 0;}intisprefix(char *pre, char *s){ return strncmp(pre, s, strlen(pre)) == 0;}intciisprefix(char *pre, char *s){ return cistrncmp(pre, s, strlen(pre)) == 0;}char*readFile(int fd){ Dir *d; long length; char *s; d = dirfstat(fd); if(d == nil) return nil; length = d->length; free(d); s = binalloc(&parseBin, length + 1, 0); if(s == nil || read(fd, s, length) != length) return nil; s[length] = '\0'; return s;}/* * create the imap tmp file. * it just happens that we don't need multiple temporary files. */intimapTmp(void){ char buf[ERRMAX], name[MboxNameLen]; int tries, fd; snprint(name, sizeof(name), "/mail/box/%s/mbox.tmp.imp", username); for(tries = 0; tries < LockSecs*2; tries++){ fd = create(name, ORDWR|ORCLOSE|OCEXEC, DMEXCL|0600); if(fd >= 0) return fd; errstr(buf, sizeof buf); if(cistrstr(buf, "locked") == nil) break; sleep(500); } return -1;}/* * open a file which might be locked. * if it is, spin until available */intopenLocked(char *dir, char *file, int mode){ char buf[ERRMAX]; int tries, fd; for(tries = 0; tries < LockSecs*2; tries++){ fd = cdOpen(dir, file, mode); if(fd >= 0) return fd; errstr(buf, sizeof buf); if(cistrstr(buf, "locked") == nil) break; sleep(500); } return -1;}intfqid(int fd, Qid *qid){ Dir *d; d = dirfstat(fd); if(d == nil) return -1; *qid = d->qid; free(d); return 0;}ulongmapInt(NamedInt *map, char *name){ int i; for(i = 0; map[i].name != nil; i++) if(cistrcmp(map[i].name, name) == 0) break; return map[i].v;}char*estrdup(char *s){ char *t; t = emalloc(strlen(s) + 1); strcpy(t, s); return t;}void*emalloc(ulong n){ void *p; p = malloc(n); if(p == nil) bye("server out of memory"); return p;}void*ezmalloc(ulong n){ void *p; p = malloc(n); if(p == nil) bye("server out of memory"); memset(p, 0, n); return p;}void*erealloc(void *p, ulong n){ p = realloc(p, n); if(p == nil) bye("server out of memory"); return p;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -