readaddrs.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 98 行
C
98 行
#include <u.h>#include <libc.h>#include "dat.h"void*emalloc(int size){ void *a; a = mallocz(size, 1); if(a == nil) sysfatal("%r"); return a;}char*estrdup(char *s){ s = strdup(s); if(s == nil) sysfatal("%r"); return s;}/* * like tokenize but obey "" quoting */inttokenize822(char *str, char **args, int max){ int na; int intok = 0, inquote = 0; if(max <= 0) return 0; for(na=0; ;str++) switch(*str) { case ' ': case '\t': if(inquote) goto Default; /* fall through */ case '\n': *str = 0; if(!intok) continue; intok = 0; if(na < max) continue; /* fall through */ case 0: return na; case '"': inquote ^= 1; /* fall through */ Default: default: if(intok) continue; args[na++] = str; intok = 1; }}Addr*readaddrs(char *file, Addr *a){ int fd; int i, n; char buf[8*1024]; char *f[128]; Addr **l; Addr *first; /* add to end */ first = a; for(l = &first; *l != nil; l = &(*l)->next) ; /* read in the addresses */ fd = open(file, OREAD); if(fd < 0) return first; n = read(fd, buf, sizeof(buf)-1); close(fd); if(n <= 0) return first; buf[n] = 0; n = tokenize822(buf, f, nelem(f)); for(i = 0; i < n; i++){ *l = a = emalloc(sizeof *a); l = &a->next; a->val = estrdup(f[i]); } return first;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?