static int domove(char *nam, MoveFunc movefn, char *p, char *q, int flags) { struct stat st; char *pbuf, *qbuf; pbuf = ztrdup(unmeta(p)); qbuf = unmeta(q); if(flags & MV_NODIRS) { errno = EISDIR; if(lstat(pbuf, &st) || S_ISDIR(st.st_mode)) { zwarnnam(nam, "%s: %e", p, errno); zsfree(pbuf); return 1; } } if(!lstat(qbuf, &st)) { int doit = flags & MV_FORCE; if(S_ISDIR(st.st_mode)) { zwarnnam(nam, "%s: cannot overwrite directory", q); zsfree(pbuf); return 1; } else if(flags & MV_INTERACTIVE) { nicezputs(nam, stderr); fputs(": replace `", stderr); nicezputs(q, stderr); fputs("'? ", stderr); fflush(stderr); if(!ask()) { zsfree(pbuf); return 0; } doit = 1; } else if((flags & MV_ASKNW) && !S_ISLNK(st.st_mode) && access(qbuf, W_OK)) { nicezputs(nam, stderr); fputs(": replace `", stderr); nicezputs(q, stderr); fprintf(stderr, "', overriding mode %04o? ", mode_to_octal(st.st_mode)); fflush(stderr); if(!ask()) { zsfree(pbuf); return 0; } doit = 1; } if(doit && !(flags & MV_ATOMIC)) unlink(qbuf); } if(movefn(pbuf, qbuf)) { zwarnnam(nam, "%s: %e", p, errno); zsfree(pbuf); return 1; } zsfree(pbuf); return 0; }
void printaliasnode(HashNode hn, int printflags) { Alias a = (Alias) hn; if (printflags & PRINT_NAMEONLY) { zputs(a->nam, stdout); putchar('\n'); return; } if (printflags & PRINT_WHENCE_SIMPLE) { zputs(a->text, stdout); putchar('\n'); return; } if (printflags & PRINT_WHENCE_CSH) { nicezputs(a->nam, stdout); if (a->flags & ALIAS_GLOBAL) printf(": globally aliased to "); else printf(": aliased to "); nicezputs(a->text, stdout); putchar('\n'); return; } if (printflags & PRINT_WHENCE_VERBOSE) { nicezputs(a->nam, stdout); if (a->flags & ALIAS_GLOBAL) printf(" is a global alias for "); else printf(" is an alias for "); nicezputs(a->text, stdout); putchar('\n'); return; } if (printflags & PRINT_LIST) { printf("alias "); if (a->flags & ALIAS_GLOBAL) printf("-g "); /* If an alias begins with `-', then we must output `-- ' * * first, so that it is not interpreted as an option. */ if(a->nam[0] == '-') printf("-- "); } quotedzputs(a->nam, stdout); putchar('='); quotedzputs(a->text, stdout); putchar('\n'); }
void printcmdnamnode(HashNode hn, int printflags) { Cmdnam cn = (Cmdnam) hn; if ((printflags & PRINT_WHENCE_CSH) || (printflags & PRINT_WHENCE_SIMPLE)) { if (cn->flags & HASHED) { zputs(cn->u.cmd, stdout); putchar('\n'); } else { zputs(*(cn->u.name), stdout); putchar('/'); zputs(cn->nam, stdout); putchar('\n'); } return; } if (printflags & PRINT_WHENCE_VERBOSE) { if (cn->flags & HASHED) { nicezputs(cn->nam, stdout); printf(" is hashed to "); nicezputs(cn->u.cmd, stdout); putchar('\n'); } else { nicezputs(cn->nam, stdout); printf(" is "); nicezputs(*(cn->u.name), stdout); putchar('/'); nicezputs(cn->nam, stdout); putchar('\n'); } return; } if (cn->flags & HASHED) { quotedzputs(cn->nam, stdout); putchar('='); quotedzputs(cn->u.cmd, stdout); putchar('\n'); } else { quotedzputs(cn->nam, stdout); putchar('='); quotedzputs(*(cn->u.name), stdout); putchar('/'); quotedzputs(cn->nam, stdout); putchar('\n'); } }
static int rm_leaf(char *arg, char *rp, struct stat const *sp, void *magic) { struct rmmagic *rmm = magic; struct stat st; if(!rmm->opt_unlinkdir || !rmm->opt_force) { if(!sp) { if(!lstat(rp, &st)) sp = &st; } if(sp) { if(!rmm->opt_unlinkdir && S_ISDIR(sp->st_mode)) { if(rmm->opt_force) return 0; zwarnnam(rmm->nam, "%s: %e", arg, EISDIR); return 1; } if(rmm->opt_interact) { nicezputs(rmm->nam, stderr); fputs(": remove `", stderr); nicezputs(arg, stderr); fputs("'? ", stderr); fflush(stderr); if(!ask()) return 0; } else if(!rmm->opt_force && !S_ISLNK(sp->st_mode) && access(rp, W_OK)) { nicezputs(rmm->nam, stderr); fputs(": remove `", stderr); nicezputs(arg, stderr); fprintf(stderr, "', overriding mode %04o? ", mode_to_octal(sp->st_mode)); fflush(stderr); if(!ask()) return 0; } } } if(unlink(rp) && !rmm->opt_force) { zwarnnam(rmm->nam, "%s: %e", arg, errno); return 1; } return 0; }
static void printshfuncnode(HashNode hn, int printflags) { Shfunc f = (Shfunc) hn; char *t = 0; if ((printflags & PRINT_NAMEONLY) || ((printflags & PRINT_WHENCE_SIMPLE) && !(printflags & PRINT_WHENCE_FUNCDEF))) { zputs(f->nam, stdout); putchar('\n'); return; } if ((printflags & (PRINT_WHENCE_VERBOSE|PRINT_WHENCE_WORD)) && !(printflags & PRINT_WHENCE_FUNCDEF)) { nicezputs(f->nam, stdout); printf((printflags & PRINT_WHENCE_WORD) ? ": function\n" : " is a shell function\n"); return; } quotedzputs(f->nam, stdout); if (f->funcdef || f->flags & PM_UNDEFINED) { printf(" () {\n\t"); if (f->flags & PM_UNDEFINED) printf("%c undefined\n\t", hashchar); else t = getpermtext(f->funcdef, NULL); if (f->flags & PM_TAGGED) printf("%c traced\n\t", hashchar); if (!t) { char *fopt = "Utkz"; int flgs[] = { PM_UNALIASED, PM_TAGGED, PM_KSHSTORED, PM_ZSHSTORED, 0 }; int fl;; zputs("builtin autoload -X", stdout); for (fl=0;fopt[fl];fl++) if (f->flags & flgs[fl]) putchar(fopt[fl]); } else { zputs(t, stdout); zsfree(t); if (f->funcdef->flags & EF_RUN) { printf("\n\t"); quotedzputs(f->nam, stdout); printf(" \"$@\""); } } printf("\n}\n"); } else { printf(" () { }\n"); } }
static int rm_dirpost(char *arg, char *rp, UNUSED(struct stat const *sp), void *magic) { struct rmmagic *rmm = magic; if(rmm->opt_interact) { nicezputs(rmm->nam, stderr); fputs(": remove `", stderr); nicezputs(arg, stderr); fputs("'? ", stderr); fflush(stderr); if(!ask()) return 0; } if(rmdir(rp) && !rmm->opt_force) { zwarnnam(rmm->nam, "%s: %e", arg, errno); return 1; } return 0; }
void printshfuncnode(HashNode hn, int printflags) { Shfunc f = (Shfunc) hn; char *t; if ((printflags & PRINT_NAMEONLY) || ((printflags & PRINT_WHENCE_SIMPLE) && !(printflags & PRINT_WHENCE_FUNCDEF))) { zputs(f->nam, stdout); putchar('\n'); return; } if ((printflags & PRINT_WHENCE_VERBOSE) && !(printflags & PRINT_WHENCE_FUNCDEF)) { nicezputs(f->nam, stdout); printf(" is a shell function\n"); return; } if (f->flags & PM_UNDEFINED) printf("undefined "); if (f->flags & PM_TAGGED) printf("traced "); if (!f->funcdef) { nicezputs(f->nam, stdout); printf(" () { }\n"); return; } t = getpermtext((void *) dupstruct((void *) f->funcdef)); quotedzputs(f->nam, stdout); printf(" () {\n\t"); zputs(t, stdout); printf("\n}\n"); zsfree(t); }
static void printcmdnamnode(HashNode hn, int printflags) { Cmdnam cn = (Cmdnam) hn; if (printflags & PRINT_WHENCE_WORD) { printf("%s: %s\n", cn->nam, (cn->flags & HASHED) ? "hashed" : "command"); return; } if ((printflags & PRINT_WHENCE_CSH) || (printflags & PRINT_WHENCE_SIMPLE)) { if (cn->flags & HASHED) { zputs(cn->u.cmd, stdout); putchar('\n'); } else { zputs(*(cn->u.name), stdout); putchar('/'); zputs(cn->nam, stdout); putchar('\n'); } return; } if (printflags & PRINT_WHENCE_VERBOSE) { if (cn->flags & HASHED) { nicezputs(cn->nam, stdout); printf(" is hashed to "); nicezputs(cn->u.cmd, stdout); putchar('\n'); } else { nicezputs(cn->nam, stdout); printf(" is "); nicezputs(*(cn->u.name), stdout); putchar('/'); nicezputs(cn->nam, stdout); putchar('\n'); } return; } if (printflags & PRINT_LIST) { printf("hash "); if(cn->nam[0] == '-') printf("-- "); } if (cn->flags & HASHED) { quotedzputs(cn->nam, stdout); putchar('='); quotedzputs(cn->u.cmd, stdout); putchar('\n'); } else { quotedzputs(cn->nam, stdout); putchar('='); quotedzputs(*(cn->u.name), stdout); putchar('/'); quotedzputs(cn->nam, stdout); putchar('\n'); } }
static void printshfuncnode(HashNode hn, int printflags) { Shfunc f = (Shfunc) hn; char *t = 0; if ((printflags & PRINT_NAMEONLY) || ((printflags & PRINT_WHENCE_SIMPLE) && !(printflags & PRINT_WHENCE_FUNCDEF))) { zputs(f->node.nam, stdout); putchar('\n'); return; } if ((printflags & (PRINT_WHENCE_VERBOSE|PRINT_WHENCE_WORD)) && !(printflags & PRINT_WHENCE_FUNCDEF)) { nicezputs(f->node.nam, stdout); printf((printflags & PRINT_WHENCE_WORD) ? ": function" : (f->node.flags & PM_UNDEFINED) ? " is an autoload shell function" : " is a shell function"); if (f->filename && (printflags & PRINT_WHENCE_VERBOSE) && strcmp(f->filename, f->node.nam) != 0) { printf(" from "); quotedzputs(f->filename, stdout); } putchar('\n'); return; } quotedzputs(f->node.nam, stdout); if (f->funcdef || f->node.flags & PM_UNDEFINED) { printf(" () {\n"); zoutputtab(stdout); if (f->node.flags & PM_UNDEFINED) { printf("%c undefined\n", hashchar); zoutputtab(stdout); } else t = getpermtext(f->funcdef, NULL, 1); if (f->node.flags & (PM_TAGGED|PM_TAGGED_LOCAL)) { printf("%c traced\n", hashchar); zoutputtab(stdout); } if (!t) { char *fopt = "UtTkz"; int flgs[] = { PM_UNALIASED, PM_TAGGED, PM_TAGGED_LOCAL, PM_KSHSTORED, PM_ZSHSTORED, 0 }; int fl;; zputs("builtin autoload -X", stdout); for (fl=0;fopt[fl];fl++) if (f->node.flags & flgs[fl]) putchar(fopt[fl]); } else { zputs(t, stdout); zsfree(t); if (f->funcdef->flags & EF_RUN) { printf("\n"); zoutputtab(stdout); quotedzputs(f->node.nam, stdout); printf(" \"$@\""); } } printf("\n}"); } else { printf(" () { }"); } if (f->redir) { t = getpermtext(f->redir, NULL, 1); if (t) { zputs(t, stdout); zsfree(t); } } putchar('\n'); }