git: 9front

Download patch

ref: 0849e9659d7290c69f8afa233a3e31959967db76
parent: 6fbb39a4cda53115b183cde8383fbd7a2400ff38
author: cinap_lenrek <cinap_lenrek@localhost>
date: Tue May 3 10:54:19 EDT 2011

proto: add regex support for skip=

--- a/sys/lib/sysconfig/proto/cdproto
+++ b/sys/lib/sysconfig/proto/cdproto
@@ -86,6 +86,7 @@
 	include
 		+
 	lib d775
+		skip=\.(pyo|pyc)$
 		+
 	log
 	man
@@ -107,6 +108,7 @@
 		8
 			*
 	src
+		skip=\.[ao]?[12578vqki]?$
 		+
 tmp	d555
 usr	d775
--- a/sys/src/libdisk/proto.c
+++ b/sys/src/libdisk/proto.c
@@ -4,6 +4,7 @@
 #include <auth.h>
 #include <fcall.h>
 #include <disk.h>
+#include <regexp.h>
 
 enum {
 	LEN	= 8*1024,
@@ -32,7 +33,7 @@
 typedef struct Opt Opt;
 struct Opt {
 	int level;
-	char *skip;
+	Reprog *skip;
 	char *uid;
 	char *gid;
 	Opt *prev;
@@ -187,9 +188,13 @@
 	child = *me;
 	while((n = dirread(fd, &d)) > 0){
 		for(i = 0; i < n; i++){
-			if(mkaux->opt && mkaux->opt->skip)
-				if(strstr(d[i].name, mkaux->opt->skip))
+			if(mkaux->opt && mkaux->opt->skip){
+				Resub m[8];
+
+				memset(m, 0, sizeof(m));
+				if(regexec(mkaux->opt->skip, d[i].name, m, nelem(m)))
 					continue;
+			}
 			child.new = mkpath(mkaux, me->new, d[i].name);
 			if(me->old)
 				child.old = mkpath(mkaux, me->old, d[i].name);
@@ -330,8 +335,6 @@
 			longjmp(mkaux->jmp, 1);
 		if(mkaux->opt){
 			*o = *mkaux->opt;
-			if(o->skip)
-				o->skip = estrdup(mkaux, o->skip);
 			if(o->uid)
 				o->uid = estrdup(mkaux, o->uid);
 			if(o->gid)
@@ -344,8 +347,7 @@
 	} else if(mkaux->indent < o->level)
 		return;
 	if(strcmp(key, "skip") == 0){
-		free(o->skip); 
-		o->skip = *val ? estrdup(mkaux, val) : nil;
+		o->skip = regcomp(val);
 	} else if(strcmp(key, "uid") == 0){
 		free(o->uid); 
 		o->uid = *val ? estrdup(mkaux, val) : nil;
@@ -364,7 +366,6 @@
 		if(o->level <= mkaux->indent)
 			break;
 		mkaux->opt = o->prev;
-		free(o->skip);
 		free(o->uid);
 		free(o->gid);
 		free(o);
--