@@ -21,7 +21,7 @@ static FILE *dagger_fopen(struct dagger *d, int gen, const char *action,
2121 return NULL ;
2222 }
2323
24- if (systemf ( "mkdir -p " PATH_ACTION_ , d -> path , gen , action , node ))
24+ if (fmkpath ( 0755 , PATH_ACTION_ , d -> path , gen , action , node ))
2525 return NULL ;
2626
2727 if (asprintf (& path , PATH_ACTION_ "/%02u-%s" , d -> path , gen , action , node , prio , script ) == -1 )
@@ -117,7 +117,7 @@ int dagger_add_dep(const struct dagger *d, const char *depender, const char *dep
117117
118118int dagger_add_node (struct dagger * d , const char * node )
119119{
120- return systemf ( "mkdir -p %s/%d/dag/%s" , d -> path , d -> next , node );
120+ return fmkpath ( 0755 , " %s/%d/dag/%s" , d -> path , d -> next , node );
121121}
122122
123123int dagger_abandon (struct dagger * d )
@@ -192,13 +192,12 @@ int dagger_is_bootstrap(struct dagger *d)
192192
193193int dagger_claim (struct dagger * d , const char * path )
194194{
195- int err ;
195+ char lnk [ strlen ( path ) + 32 ] ;
196196
197197 memset (d , 0 , sizeof (* d ));
198198
199- err = systemf ("mkdir -p %s" , path );
200- if (err )
201- return err ;
199+ if (mkpath (path , 0755 ))
200+ return -1 ;
202201
203202 d -> next_fp = fopenf ("wx" , "%s/next" , path );
204203 if (!d -> next_fp ) {
@@ -209,23 +208,22 @@ int dagger_claim(struct dagger *d, const char *path)
209208 if (readdf (& d -> current , "%s/current" , path )) {
210209 d -> current = -1 ;
211210 } else {
212- err = systemf ( "mkdir -p %s/%d/action/exit"
213- " && "
214- "ln -sf ../../top-down-order %s/%d/action/exit/order" ,
215- path , d -> current , path , d -> current );
216- if (err )
217- return err ;
211+ if ( fmkpath ( 0755 , " %s/%d/action/exit", path , d -> current ))
212+ return -1 ;
213+ snprintf ( lnk , sizeof ( lnk ), " %s/%d/action/exit/order" , path , d -> current );
214+ erase ( lnk );
215+ if (symlink ( "../../top-down-order" , lnk ) )
216+ return -1 ;
218217 }
219218
220219 d -> next = d -> current + 1 ;
221- err = systemf ("mkdir -p %s/%d/action/init"
222- " && "
223- "mkdir -p %s/%d/skip"
224- " && "
225- "ln -s ../../bottom-up-order %s/%d/action/init/order" ,
226- path , d -> next , path , d -> next , path , d -> next );
227- if (err )
228- return err ;
220+ if (fmkpath (0755 , "%s/%d/action/init" , path , d -> next ))
221+ return -1 ;
222+ if (fmkpath (0755 , "%s/%d/skip" , path , d -> next ))
223+ return -1 ;
224+ snprintf (lnk , sizeof (lnk ), "%s/%d/action/init/order" , path , d -> next );
225+ if (symlink ("../../bottom-up-order" , lnk ) && errno != EEXIST )
226+ return -1 ;
229227
230228 strlcpy (d -> path , path , sizeof (d -> path ));
231229 return 0 ;
0 commit comments