diff options
author | Alexander Naumov <alexander_naumov@opensuse.org> | 2016-11-05 17:54:23 +0100 |
---|---|---|
committer | Alexander Naumov <alexander_naumov@opensuse.org> | 2016-11-05 17:54:23 +0100 |
commit | c8a795edf38b38d46b5dd4c0e9c94bef03365a7f (patch) | |
tree | 8047a0b4b198e7d3c57c7b0764fb19f26ac58103 | |
parent | a82e1bded5b33a16e9ed7d511ae3790ade41851f (diff) | |
download | screen-c8a795edf38b38d46b5dd4c0e9c94bef03365a7f.tar.gz |
Code reformating (fileio.c)
Signed-off-by: Alexander Naumov <alexander_naumov@opensuse.org>
-rw-r--r-- | src/fileio.c | 943 |
1 files changed, 420 insertions, 523 deletions
diff --git a/src/fileio.c b/src/fileio.c index 3df487f..b084edd 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -60,10 +60,7 @@ static char *findrcfile __P((char *)); char *rc_name = ""; int rc_recursion = 0; -static char * -CatExtra(str1, str2) -register char *str1, *str2; -{ +static char * CatExtra(register char *str1, register char *str2) { register char *cp; register int len1, len2, add_colon; @@ -71,96 +68,82 @@ register char *str1, *str2; if (len1 == 0) return str2; add_colon = (str1[len1 - 1] != ':'); - if (str2) - { - len2 = strlen(str2); - if ((cp = realloc(str2, (unsigned) len1 + len2 + add_colon + 1)) == NULL) - Panic(0, "%s", strnomem); - bcopy(cp, cp + len1 + add_colon, len2 + 1); - } - else - { - if ((cp = malloc((unsigned) len1 + add_colon + 1)) == NULL) - Panic(0, "%s", strnomem); - cp[len1 + add_colon] = '\0'; - } + if (str2) { + len2 = strlen(str2); + if ((cp = realloc(str2, (unsigned) len1 + len2 + add_colon + 1)) == NULL) + Panic(0, "%s", strnomem); + bcopy(cp, cp + len1 + add_colon, len2 + 1); + } + else { + if ((cp = malloc((unsigned) len1 + add_colon + 1)) == NULL) + Panic(0, "%s", strnomem); + cp[len1 + add_colon] = '\0'; + } bcopy(str1, cp, len1); if (add_colon) cp[len1] = ':'; - return cp; } -static char * -findrcfile(rcfile) -char *rcfile; -{ +static char *findrcfile(char *rcfile) { char buf[256]; char *p; /* Tilde prefix support courtesy <hesso@pool.math.tu-berlin.de>, * taken from a Debian patch. */ - if (rcfile && *rcfile == '~') - { - static char rcfilename_tilde_exp[MAXPATHLEN+1]; - char *slash_position = strchr(rcfile, '/'); - if (slash_position == rcfile+1) - { - char *home = getenv("HOME"); - if (!home) - { - Msg(0, "%s: source: tilde expansion failed", rc_name); - return NULL; - } - snprintf(rcfilename_tilde_exp, MAXPATHLEN, "%s/%s", home, rcfile+2); - } - else if (slash_position) - { - struct passwd *p; - *slash_position = 0; - p = getpwnam(rcfile+1); - if (!p) - { - Msg(0, "%s: source: tilde expansion failed for user %s", rc_name, rcfile+1); - return NULL; - } - snprintf(rcfilename_tilde_exp, MAXPATHLEN, "%s/%s", p->pw_dir, slash_position+1); - } - else - { - Msg(0, "%s: source: illegal tilde expression.", rc_name); - return NULL; - } - rcfile = rcfilename_tilde_exp; + if (rcfile && *rcfile == '~') { + static char rcfilename_tilde_exp[MAXPATHLEN+1]; + char *slash_position = strchr(rcfile, '/'); + + if (slash_position == rcfile+1) { + char *home = getenv("HOME"); + if (!home) { + Msg(0, "%s: source: tilde expansion failed", rc_name); + return NULL; + } + snprintf(rcfilename_tilde_exp, MAXPATHLEN, "%s/%s", home, rcfile+2); } - - if (rcfile) - { - char *rcend = rindex(rc_name, '/'); - if (*rcfile != '/' && rcend && (rcend - rc_name) + strlen(rcfile) + 2 < sizeof(buf)) - { - strncpy(buf, rc_name, rcend - rc_name + 1); - strcpy(buf + (rcend - rc_name) + 1, rcfile); - if (access(buf, R_OK) == 0) - return SaveStr(buf); - } - debug1("findrcfile: you specified '%s'\n", rcfile); - return SaveStr(rcfile); + else if (slash_position) { + struct passwd *p; + *slash_position = 0; + p = getpwnam(rcfile+1); + if (!p){ + Msg(0, "%s: source: tilde expansion failed for user %s", rc_name, rcfile+1); + return NULL; + } + snprintf(rcfilename_tilde_exp, MAXPATHLEN, "%s/%s", p->pw_dir, slash_position+1); } - debug("findrcfile: you specified nothing...\n"); - if ((p = getenv("SCREENRC")) != NULL && *p != '\0') - { - debug1(" $SCREENRC has: '%s'\n", p); - return SaveStr(p); + else { + Msg(0, "%s: source: illegal tilde expression.", rc_name); + return NULL; } - else - { - debug(" ...nothing in $SCREENRC, defaulting $HOME/.screenrc\n"); - if (strlen(home) > sizeof(buf) - 12) - Panic(0, "Rc: home too large"); - sprintf(buf, "%s/.screenrc", home); - return SaveStr(buf); + rcfile = rcfilename_tilde_exp; + } + + if (rcfile) { + char *rcend = rindex(rc_name, '/'); + if (*rcfile != '/' && rcend && (rcend - rc_name) + strlen(rcfile) + 2 < sizeof(buf)) { + strncpy(buf, rc_name, rcend - rc_name + 1); + strcpy(buf + (rcend - rc_name) + 1, rcfile); + if (access(buf, R_OK) == 0) + return SaveStr(buf); } + debug1("findrcfile: you specified '%s'\n", rcfile); + return SaveStr(rcfile); + } + + debug("findrcfile: you specified nothing...\n"); + if ((p = getenv("SCREENRC")) != NULL && *p != '\0') { + debug1(" $SCREENRC has: '%s'\n", p); + return SaveStr(p); + } + else { + debug(" ...nothing in $SCREENRC, defaulting $HOME/.screenrc\n"); + if (strlen(home) > sizeof(buf) - 12) + Panic(0, "Rc: home too large"); + sprintf(buf, "%s/.screenrc", home); + return SaveStr(buf); + } } /* @@ -168,11 +151,7 @@ char *rcfile; * 1) rcfilename = "/etc/screenrc" * 2) rcfilename = RcFileName */ -int -StartRc(rcfilename, nopanic) -char *rcfilename; -int nopanic; -{ +int StartRc(char *rcfilename, int nopanic) { register int argc, len; register char *p, *cp; char buf[2048]; @@ -189,141 +168,126 @@ int nopanic; extra_incap = CatExtra("xn:f0=\033Op:f1=\033Oq:f2=\033Or:f3=\033Os:f4=\033Ot:f5=\033Ou:f6=\033Ov:f7=\033Ow:f8=\033Ox:f9=\033Oy:f.=\033On:f,=\033Ol:fe=\033OM:f+=\033Ok:f-=\033Om:f*=\033Oj:f/=\033Oo:fq=\033OX", extra_incap); rc_name = findrcfile(rcfilename); + if (rc_name == NULL || (fp = secfopen(rc_name, "r")) == NULL) { + const char *rc_nonnull = rc_name ? rc_name : rcfilename; + if (!rc_recursion && RcFileName && !strcmp(RcFileName, rc_nonnull)) { + /* + * User explicitly gave us that name, + * this is the only case, where we get angry, if we can't read + * the file. + */ + debug3("StartRc: '%s','%s', '%s'\n", RcFileName, rc_name ? rc_name : "(null)", rcfilename); + if (!nopanic) Panic(0, "Unable to open \"%s\".", rc_nonnull); + /* possibly NOTREACHED */ + } - if (rc_name == NULL || (fp = secfopen(rc_name, "r")) == NULL) - { - const char *rc_nonnull = rc_name ? rc_name : rcfilename; - if (!rc_recursion && RcFileName && !strcmp(RcFileName, rc_nonnull)) - { - /* - * User explicitly gave us that name, - * this is the only case, where we get angry, if we can't read - * the file. - */ - debug3("StartRc: '%s','%s', '%s'\n", RcFileName, rc_name ? rc_name : "(null)", rcfilename); - if (!nopanic) Panic(0, "Unable to open \"%s\".", rc_nonnull); - /* possibly NOTREACHED */ - } - debug1("StartRc: '%s' no good. ignored\n", rc_nonnull); - if (rc_name) - Free(rc_name); - rc_name = oldrc_name; - return 1; + debug1("StartRc: '%s' no good. ignored\n", rc_nonnull); + if (rc_name) + Free(rc_name); + rc_name = oldrc_name; + return 1; + } + while (fgets(buf, sizeof buf, fp) != NULL) { + if ((p = rindex(buf, '\n')) != NULL) + *p = '\0'; + + if ((argc = Parse(buf, sizeof buf, args, argl)) == 0) + continue; + + if (strcmp(args[0], "echo") == 0) { + if (!display) + continue; + if (argc < 2 || (argc == 3 && strcmp(args[1], "-n")) || argc > 3) { + Msg(0, "%s: 'echo [-n] \"string\"' expected.", rc_name); + continue; + } + AddStr(args[argc - 1]); + if (argc != 3) { + AddStr("\r\n"); + Flush(0); + } + } + + else if (strcmp(args[0], "sleep") == 0) { + if (!display) + continue; + debug("sleeeeeeep\n"); + if (argc != 2) { + Msg(0, "%s: sleep: one numeric argument expected.", rc_name); + continue; + } + DisplaySleep1000(1000 * atoi(args[1]), 1); } - while (fgets(buf, sizeof buf, fp) != NULL) - { - if ((p = rindex(buf, '\n')) != NULL) - *p = '\0'; - if ((argc = Parse(buf, sizeof buf, args, argl)) == 0) - continue; - if (strcmp(args[0], "echo") == 0) - { - if (!display) - continue; - if (argc < 2 || (argc == 3 && strcmp(args[1], "-n")) || argc > 3) - { - Msg(0, "%s: 'echo [-n] \"string\"' expected.", rc_name); - continue; - } - AddStr(args[argc - 1]); - if (argc != 3) - { - AddStr("\r\n"); - Flush(0); - } - } - else if (strcmp(args[0], "sleep") == 0) - { - if (!display) - continue; - debug("sleeeeeeep\n"); - if (argc != 2) - { - Msg(0, "%s: sleep: one numeric argument expected.", rc_name); - continue; - } - DisplaySleep1000(1000 * atoi(args[1]), 1); - } #ifdef TERMINFO - else if (!strcmp(args[0], "termcapinfo") || !strcmp(args[0], "terminfo")) + else if (!strcmp(args[0], "termcapinfo") || !strcmp(args[0], "terminfo")) { #else - else if (!strcmp(args[0], "termcapinfo") || !strcmp(args[0], "termcap")) + else if (!strcmp(args[0], "termcapinfo") || !strcmp(args[0], "termcap")) { #endif - { - if (!display) - continue; - if (argc < 3 || argc > 4) - { - Msg(0, "%s: %s: incorrect number of arguments.", rc_name, args[0]); - continue; - } - for (p = args[1]; p && *p; p = cp) - { - if ((cp = index(p, '|')) != 0) - *cp++ = '\0'; - len = strlen(p); - if (p[len - 1] == '*') - { - if (!(len - 1) || !strncmp(p, D_termname, len - 1)) - break; - } - else if (!strcmp(p, D_termname)) - break; - } - if (!(p && *p)) - continue; - extra_incap = CatExtra(args[2], extra_incap); - if (argc == 4) - extra_outcap = CatExtra(args[3], extra_outcap); - } - else if (!strcmp(args[0], "source")) - { - if (rc_recursion <= 10) - { - rc_recursion++; - (void)StartRc(args[1], 0); - rc_recursion--; - } - } + if (!display) + continue; + if (argc < 3 || argc > 4) { + Msg(0, "%s: %s: incorrect number of arguments.", rc_name, args[0]); + continue; + } + + for (p = args[1]; p && *p; p = cp) { + if ((cp = index(p, '|')) != 0) + *cp++ = '\0'; + len = strlen(p); + if (p[len - 1] == '*') { + if (!(len - 1) || !strncmp(p, D_termname, len - 1)) + break; + } + else if (!strcmp(p, D_termname)) + break; + } + if (!(p && *p)) + continue; + extra_incap = CatExtra(args[2], extra_incap); + if (argc == 4) + extra_outcap = CatExtra(args[3], extra_outcap); + } + else if (!strcmp(args[0], "source")) { + if (rc_recursion <= 10) { + rc_recursion++; + (void)StartRc(args[1], 0); + rc_recursion--; + } } + } fclose(fp); Free(rc_name); rc_name = oldrc_name; return 0; } -void -FinishRc(rcfilename) -char *rcfilename; -{ +void FinishRc(char *rcfilename) { char buf[2048]; FILE *fp; char *oldrc_name = rc_name; rc_name = findrcfile(rcfilename); - if (rc_name == NULL || (fp = secfopen(rc_name, "r")) == NULL) - { - const char *rc_nonnull = rc_name ? rc_name : rcfilename; - if (rc_recursion) - Msg(errno, "%s: source %s", oldrc_name, rc_nonnull); - else if (RcFileName && !strcmp(RcFileName, rc_nonnull)) - { - /* - * User explicitly gave us that name, - * this is the only case, where we get angry, if we can't read - * the file. - */ - debug3("FinishRc:'%s','%s','%s'\n", RcFileName, rc_name ? rc_name : "(null)", rcfilename); - Panic(0, "Unable to open \"%s\".", rc_nonnull); - /* NOTREACHED */ - } - debug1("FinishRc: '%s' no good. ignored\n", rc_nonnull); - if (rc_name) - Free(rc_name); - rc_name = oldrc_name; - return; + if (rc_name == NULL || (fp = secfopen(rc_name, "r")) == NULL) { + const char *rc_nonnull = rc_name ? rc_name : rcfilename; + if (rc_recursion) + Msg(errno, "%s: source %s", oldrc_name, rc_nonnull); + else if (RcFileName && !strcmp(RcFileName, rc_nonnull)) { + /* + * User explicitly gave us that name, + * this is the only case, where we get angry, if we can't read + * the file. + */ + debug3("FinishRc:'%s','%s','%s'\n", RcFileName, rc_name ? rc_name : "(null)", rcfilename); + Panic(0, "Unable to open \"%s\".", rc_nonnull); + /* NOTREACHED */ } + debug1("FinishRc: '%s' no good. ignored\n", rc_nonnull); + if (rc_name) + Free(rc_name); + rc_name = oldrc_name; + return; + } debug("finishrc is going...\n"); while (fgets(buf, sizeof buf, fp) != NULL) @@ -333,15 +297,11 @@ char *rcfilename; rc_name = oldrc_name; } -void -do_source(rcfilename) -char *rcfilename; -{ - if (rc_recursion > 10) - { - Msg(0, "%s: source: recursion limit reached", rc_name); - return; - } +void do_source(char *rcfilename) { + if (rc_recursion > 10) { + Msg(0, "%s: source: recursion limit reached", rc_name); + return; + } rc_recursion++; FinishRc(rcfilename); rc_recursion--; @@ -353,50 +313,40 @@ char *rcfilename; * The fore window is taken from the display as well as the user. * This is bad when we run detached. */ -void -RcLine(ubuf, ubufl) -char *ubuf; -int ubufl; -{ +void RcLine(char *ubuf, int ubufl) { char *args[MAXARGS]; int argl[MAXARGS]; #ifdef MULTIUSER - extern struct acluser *EffectiveAclUser; /* acl.c */ - extern struct acluser *users; /* acl.c */ + extern struct acluser *EffectiveAclUser; /* acl.c */ + extern struct acluser *users; /* acl.c */ #endif - if (display) - { - fore = D_fore; - flayer = D_forecv->c_layer; - } + if (display) { + fore = D_fore; + flayer = D_forecv->c_layer; + } else flayer = fore ? fore->w_savelayer : 0; if (Parse(ubuf, ubufl, args, argl) <= 0) return; + #ifdef MULTIUSER - if (!display) - { + if (!display) { /* the session owner does it, when there is no display here */ EffectiveAclUser = users; debug("RcLine: WARNING, no display no user! Session owner executes command\n"); - } + } #endif + DoCommand(args, argl); + #ifdef MULTIUSER EffectiveAclUser = 0; #endif } -/* - * needs display for copybuffer access and termcap dumping - */ -void -WriteFile(user, fn, dump) -struct acluser *user; -char *fn; -int dump; -{ +/* needs display for copybuffer access and termcap dumping */ +void WriteFile(struct acluser *user, char *fn, int dump) { /* dump==0: create .termcap, * dump==1: hardcopy, * #ifdef COPY_PASTE @@ -409,6 +359,7 @@ int dump; register FILE *f; char fnbuf[1024]; char *mode = "w"; + #ifdef COPY_PASTE int public = 0; # ifdef HAVE_LSTAT @@ -417,172 +368,155 @@ int dump; # endif #endif - switch (dump) - { + switch (dump) { case DUMP_TERMCAP: - if (fn == 0) - { - i = SockName - SockPath; - if (i > (int)sizeof(fnbuf) - 9) - i = 0; - strncpy(fnbuf, SockPath, i); - strcpy(fnbuf + i, ".termcap"); - fn = fnbuf; - } + if (fn == 0) { + i = SockName - SockPath; + if (i > (int)sizeof(fnbuf) - 9) + i = 0; + strncpy(fnbuf, SockPath, i); + strcpy(fnbuf + i, ".termcap"); + fn = fnbuf; + } break; + case DUMP_HARDCOPY: case DUMP_SCROLLBACK: - if (fn == 0) - { - if (fore == 0) - return; - if (hardcopydir && *hardcopydir && strlen(hardcopydir) < sizeof(fnbuf) - 21) - sprintf(fnbuf, "%s/hardcopy.%d", hardcopydir, fore->w_number); - else - sprintf(fnbuf, "hardcopy.%d", fore->w_number); - fn = fnbuf; - } + if (fn == 0) { + if (fore == 0) + return; + if (hardcopydir && *hardcopydir && strlen(hardcopydir) < sizeof(fnbuf) - 21) + sprintf(fnbuf, "%s/hardcopy.%d", hardcopydir, fore->w_number); + else + sprintf(fnbuf, "hardcopy.%d", fore->w_number); + fn = fnbuf; + } if (hardcopy_append && !access(fn, W_OK)) - mode = "a"; + mode = "a"; break; + #ifdef COPY_PASTE case DUMP_EXCHANGE: - if (fn == 0) - { - strncpy(fnbuf, BufferFile, sizeof(fnbuf) - 1); - fnbuf[sizeof(fnbuf) - 1] = 0; - fn = fnbuf; - } + if (fn == 0) { + strncpy(fnbuf, BufferFile, sizeof(fnbuf) - 1); + fnbuf[sizeof(fnbuf) - 1] = 0; + fn = fnbuf; + } public = !strcmp(fn, DEFAULT_BUFFERFILE); # ifdef HAVE_LSTAT exists = !lstat(fn, &stb); - if (public && exists && (S_ISLNK(stb.st_mode) || stb.st_nlink > 1)) - { - Msg(0, "No write to links, please."); - return; - } + if (public && exists && (S_ISLNK(stb.st_mode) || stb.st_nlink > 1)) { + Msg(0, "No write to links, please."); + return; + } # endif break; #endif - } + } debug2("WriteFile(%d) %s\n", dump, fn); - if (UserContext() > 0) - { - debug("Writefile: usercontext\n"); + if (UserContext() > 0) { + debug("Writefile: usercontext\n"); #ifdef COPY_PASTE - if (dump == DUMP_EXCHANGE && public) - { + if (dump == DUMP_EXCHANGE && public) { # ifdef HAVE_LSTAT - if (exists) - { - if ((fd = open(fn, O_WRONLY, 0666)) >= 0) - { - if (fstat(fd, &stb2) == 0 && stb.st_dev == stb2.st_dev && stb.st_ino == stb2.st_ino) - ftruncate(fd, 0); - else - { - close(fd); - fd = -1; - } - } - } - else - fd = open(fn, O_WRONLY|O_CREAT|O_EXCL, 0666); - f = fd >= 0 ? fdopen(fd, mode) : 0; + if (exists) { + if ((fd = open(fn, O_WRONLY, 0666)) >= 0) { + if (fstat(fd, &stb2) == 0 && stb.st_dev == stb2.st_dev && stb.st_ino == stb2.st_ino) + ftruncate(fd, 0); + else { + close(fd); + fd = -1; + } + } + } + else + fd = open(fn, O_WRONLY|O_CREAT|O_EXCL, 0666); + f = fd >= 0 ? fdopen(fd, mode) : 0; # else - f = fopen(fn, mode); + f = fopen(fn, mode); # endif - } - else + } + else #endif /* COPY_PASTE */ - f = fopen(fn, mode); - if (f == NULL) - { - debug2("WriteFile: fopen(%s,\"%s\") failed\n", fn, mode); - UserReturn(0); - } - else - { - switch (dump) - { - case DUMP_HARDCOPY: - case DUMP_SCROLLBACK: - if (!fore) - break; - if (*mode == 'a') - { - putc('>', f); - for (j = fore->w_width - 2; j > 0; j--) - putc('=', f); - fputs("<\n", f); - } - if (dump == DUMP_SCROLLBACK) - { + f = fopen(fn, mode); + if (f == NULL) { + debug2("WriteFile: fopen(%s,\"%s\") failed\n", fn, mode); + UserReturn(0); + } + else { + switch (dump) { + case DUMP_HARDCOPY: + case DUMP_SCROLLBACK: + if (!fore) + break; + if (*mode == 'a') { + putc('>', f); + for (j = fore->w_width - 2; j > 0; j--) + putc('=', f); + fputs("<\n", f); + } + if (dump == DUMP_SCROLLBACK) { #ifdef COPY_PASTE - for (i = 0; i < fore->w_histheight; i++) - { - p = (char *)(WIN(i)->image); - for (k = fore->w_width - 1; k >= 0 && p[k] == ' '; k--) - ; - for (j = 0; j <= k; j++) - putc(p[j], f); - putc('\n', f); - } + for (i = 0; i < fore->w_histheight; i++) { + p = (char *)(WIN(i)->image); + for (k = fore->w_width - 1; k >= 0 && p[k] == ' '; k--) + ; + for (j = 0; j <= k; j++) + putc(p[j], f); + putc('\n', f); + } #endif - } - for (i = 0; i < fore->w_height; i++) - { - p = (char *)fore->w_mlines[i].image; - for (k = fore->w_width - 1; k >= 0 && p[k] == ' '; k--) - ; - for (j = 0; j <= k; j++) - putc(p[j], f); - putc('\n', f); - } - break; - case DUMP_TERMCAP: - if ((p = index(MakeTermcap(fore->w_aflag), '=')) != NULL) - { - fputs(++p, f); - putc('\n', f); - } + } + for (i = 0; i < fore->w_height; i++) { + p = (char *)fore->w_mlines[i].image; + for (k = fore->w_width - 1; k >= 0 && p[k] == ' '; k--) + ; + for (j = 0; j <= k; j++) + putc(p[j], f); + putc('\n', f); + } + break; + + case DUMP_TERMCAP: + if ((p = index(MakeTermcap(fore->w_aflag), '=')) != NULL) { + fputs(++p, f); + putc('\n', f); + } break; + #ifdef COPY_PASTE - case DUMP_EXCHANGE: - p = user->u_plop.buf; - for (i = user->u_plop.len; i-- > 0; p++) - if (*p == '\r' && (i == 0 || p[1] != '\n')) - putc('\n', f); - else - putc(*p, f); - break; + case DUMP_EXCHANGE: + p = user->u_plop.buf; + for (i = user->u_plop.len; i-- > 0; p++) + if (*p == '\r' && (i == 0 || p[1] != '\n')) + putc('\n', f); + else + putc(*p, f); + break; #endif - } - (void) fclose(f); - UserReturn(1); - } + } + (void) fclose(f); + UserReturn(1); + } } if (UserStatus() <= 0) Msg(0, "Cannot open \"%s\"", fn); - else if (display && !*rc_name) - { - switch (dump) - { - case DUMP_TERMCAP: - Msg(0, "Termcap entry written to \"%s\".", fn); - break; - case DUMP_HARDCOPY: - case DUMP_SCROLLBACK: - Msg(0, "Screen image %s to \"%s\".", - (*mode == 'a') ? "appended" : "written", fn); - break; + else if (display && !*rc_name) { + switch (dump) { + case DUMP_TERMCAP: + Msg(0, "Termcap entry written to \"%s\".", fn); + break; + case DUMP_HARDCOPY: + case DUMP_SCROLLBACK: + Msg(0, "Screen image %s to \"%s\".", (*mode == 'a') ? "appended" : "written", fn); + break; #ifdef COPY_PASTE - case DUMP_EXCHANGE: - Msg(0, "Copybuffer written to \"%s\".", fn); + case DUMP_EXCHANGE: + Msg(0, "Copybuffer written to \"%s\".", fn); #endif - } } + } } #ifdef COPY_PASTE @@ -592,50 +526,44 @@ int dump; * lenp (if nonzero) points to a location, where the buffer size should be * stored. */ -char * -ReadFile(fn, lenp) -char *fn; -int *lenp; -{ +char *ReadFile(char *fn, int *lenp) { int i, l, size; char c, *bp, *buf; struct stat stb; ASSERT(lenp); debug1("ReadFile(%s)\n", fn); - if ((i = secopen(fn, O_RDONLY, 0)) < 0) - { - Msg(errno, "no %s -- no slurp", fn); - return NULL; - } - if (fstat(i, &stb)) - { - Msg(errno, "no good %s -- no slurp", fn); - close(i); - return NULL; - } + + if ((i = secopen(fn, O_RDONLY, 0)) < 0) { + Msg(errno, "no %s -- no slurp", fn); + return NULL; + } + + if (fstat(i, &stb)) { + Msg(errno, "no good %s -- no slurp", fn); + close(i); + return NULL; + } size = stb.st_size; - if ((buf = malloc(size)) == NULL) - { - close(i); - Msg(0, "%s", strnomem); - return NULL; - } + + if ((buf = malloc(size)) == NULL) { + close(i); + Msg(0, "%s", strnomem); + return NULL; + } errno = 0; - if ((l = read(i, buf, size)) != size) - { - if (l < 0) - l = 0; - Msg(errno, "Got only %d bytes from %s", l, fn); - } - else - { - if (read(i, &c, 1) > 0) - Msg(0, "Slurped only %d characters (of %d) into buffer - try again", - l, size); - else - Msg(0, "Slurped %d characters into buffer", l); - } + + if ((l = read(i, buf, size)) != size) { + if (l < 0) + l = 0; + Msg(errno, "Got only %d bytes from %s", l, fn); + } + else { + if (read(i, &c, 1) > 0) + Msg(0, "Slurped only %d characters (of %d) into buffer - try again", l, size); + else + Msg(0, "Slurped %d characters into buffer", l); + } close(i); *lenp = l; for (bp = buf; l-- > 0; bp++) @@ -644,9 +572,7 @@ int *lenp; return buf; } -void -KillBuffers() -{ +void KillBuffers() { if (UserContext() > 0) UserReturn(unlink(BufferFile) ? errno : 0); errno = UserStatus(); @@ -655,15 +581,9 @@ KillBuffers() #endif /* COPY_PASTE */ -/* - * (Almost) secure open and fopen... - */ +/* (Almost) secure open and fopen... */ -FILE * -secfopen(name, mode) -char *name; -char *mode; -{ +FILE *secfopen(char *name, char *mode) { FILE *fi; #ifndef USE_SETEUID int flags, fd; @@ -677,6 +597,7 @@ char *mode; xseteuid(eff_uid); xsetegid(eff_gid); return fi; + #else if (eff_uid == real_uid) return fopen(name, mode); @@ -688,29 +609,22 @@ char *mode; flags |= O_CREAT | O_TRUNC; else if (mode[0] == 'a') flags |= O_CREAT | O_APPEND; - else if (mode[0] != 'r') - { - errno = EINVAL; - return 0; - } + else if (mode[0] != 'r') { + errno = EINVAL; + return 0; + } if ((fd = secopen(name, flags, 0666)) < 0) return 0; - if ((fi = fdopen(fd, mode)) == 0) - { - close(fd); - return 0; - } + if ((fi = fdopen(fd, mode)) == 0) { + close(fd); + return 0; + } return fi; #endif } -int -secopen(name, flags, mode) -char *name; -int flags; -int mode; -{ +int secopen(char *name, int flags, int mode) { int fd; #ifndef USE_SETEUID int q; @@ -729,84 +643,71 @@ int mode; if (eff_uid == real_uid) return open(name, flags, mode); /* Truncation/creation is done in UserContext */ - if ((flags & O_TRUNC) || ((flags & O_CREAT) && access(name, F_OK))) - { - if (UserContext() > 0) - { - if ((fd = open(name, flags, mode)) >= 0) - { - close(fd); - UserReturn(0); - } - if (errno == 0) - errno = EACCES; - UserReturn(errno); - } - if ((q = UserStatus())) - { - if (q > 0) - errno = q; - return -1; - } + if ((flags & O_TRUNC) || ((flags & O_CREAT) && access(name, F_OK))) { + if (UserContext() > 0) { + if ((fd = open(name, flags, mode)) >= 0) { + close(fd); + UserReturn(0); + } + if (errno == 0) + errno = EACCES; + UserReturn(errno); } + if ((q = UserStatus())) { + if (q > 0) + errno = q; + return -1; + } + } if (access(name, F_OK)) return -1; if ((fd = open(name, flags & ~(O_TRUNC | O_CREAT), 0)) < 0) return -1; debug("open successful\n"); - if (fstat(fd, &stb)) - { + if (fstat(fd, &stb)) { + close(fd); + return -1; + } + debug("fstat successful\n"); + if (stb.st_uid != real_uid) { + switch (flags & (O_RDONLY | O_WRONLY | O_RDWR)) { + case O_RDONLY: + q = 0004; + break; + case O_WRONLY: + q = 0002; + break; + default: + q = 0006; + break; + } + if ((stb.st_mode & q) != q) { + debug1("secopen: permission denied (%03o)\n", stb.st_mode & 07777); close(fd); + errno = EACCES; return -1; } - debug("fstat successful\n"); - if (stb.st_uid != real_uid) - { - switch (flags & (O_RDONLY | O_WRONLY | O_RDWR)) - { - case O_RDONLY: - q = 0004; - break; - case O_WRONLY: - q = 0002; - break; - default: - q = 0006; - break; - } - if ((stb.st_mode & q) != q) - { - debug1("secopen: permission denied (%03o)\n", stb.st_mode & 07777); - close(fd); - errno = EACCES; - return -1; - } - } + } debug1("secopen ok - returning %d\n", fd); return fd; #endif } -int -printpipe(p, cmd) -struct win *p; -char *cmd; -{ +int printpipe(struct win *p, char *cmd) { int pi[2]; - if (pipe(pi)) - { - WMsg(p, errno, "printing pipe"); - return -1; - } - switch (fork()) - { + if (pipe(pi)) { + WMsg(p, errno, "printing pipe"); + return -1; + } + switch (fork()) { case -1: WMsg(p, errno, "printing fork"); return -1; case 0: display = p->w_pdisplay; displays = 0; + #ifdef DEBUG if (dfp && dfp != stderr) fclose(dfp); @@ -816,6 +717,7 @@ char *cmd; closeallfiles(0); if (setgid(real_gid) || setuid(real_uid)) Panic(errno, "printpipe setuid"); + #ifdef SIGPIPE signal(SIGPIPE, SIG_DFL); #endif @@ -823,54 +725,49 @@ char *cmd; Panic(errno, "/bin/sh"); default: break; - } + } close(pi[0]); return pi[1]; } -int -readpipe(cmdv) -char **cmdv; -{ +int readpipe(char **cmdv) { int pi[2]; - if (pipe(pi)) - { - Msg(errno, "pipe"); - return -1; - } - switch (fork()) - { - case -1: - Msg(errno, "fork"); - return -1; - case 0: - displays = 0; + if (pipe(pi)) { + Msg(errno, "pipe"); + return -1; + } + + switch (fork()) { + case -1: + Msg(errno, "fork"); + return -1; + case 0: + displays = 0; #ifdef DEBUG - if (dfp && dfp != stderr) - fclose(dfp); + if (dfp && dfp != stderr) + fclose(dfp); #endif + close(1); + if (dup(pi[1]) != 1) { + close(pi[1]); + Panic(0, "dup"); + } + closeallfiles(1); + + if (setgid(real_gid) || setuid(real_uid)) { close(1); - if (dup(pi[1]) != 1) - { - close(pi[1]); - Panic(0, "dup"); - } - closeallfiles(1); - if (setgid(real_gid) || setuid(real_uid)) - { - close(1); - Panic(errno, "setuid/setgid"); - } + Panic(errno, "setuid/setgid"); + } #ifdef SIGPIPE - signal(SIGPIPE, SIG_DFL); + signal(SIGPIPE, SIG_DFL); #endif - execvp(*cmdv, cmdv); - close(1); - Panic(errno, "%s", *cmdv); - default: - break; - } + execvp(*cmdv, cmdv); + close(1); + Panic(errno, "%s", *cmdv); + default: + break; + } close(pi[1]); return pi[0]; } |