Fix unportable pid_t parsing in sh(1).

This commit is contained in:
Jonas 'Sortie' Termansen 2013-12-28 21:50:02 +01:00
parent 7bc8ccd46f
commit a66bb2900a
1 changed files with 5 additions and 5 deletions

View File

@ -578,7 +578,7 @@ int run_string(int argc, char* argv[], const char* str, bool exit_on_error)
{ {
// TODO: Implement fmemopen and open_memstream. // TODO: Implement fmemopen and open_memstream.
char unique_ish[64]; char unique_ish[64];
snprintf(unique_ish, sizeof(unique_ish), "/tmp/shinput.%i", getpid()); snprintf(unique_ish, sizeof(unique_ish), "/tmp/shinput.%ji", (intmax_t) getpid());
FILE* fp = fopen(unique_ish, "w"); FILE* fp = fopen(unique_ish, "w");
if ( !fp ) { error(0, errno, "write-open: %s", unique_ish); return 1; } if ( !fp ) { error(0, errno, "write-open: %s", unique_ish); return 1; }
if ( fputs(str, fp) == EOF ) { fclose(fp); error(0, errno, "write: %s", unique_ish); return 1; } if ( fputs(str, fp) == EOF ) { fclose(fp); error(0, errno, "write: %s", unique_ish); return 1; }
@ -611,10 +611,10 @@ int main(int argc, char* argv[])
argv[i] = argv[i+1]; argv[i] = argv[i+1];
argv[argc] = NULL; argv[argc] = NULL;
} }
char pidstr[32]; char pidstr[3 * sizeof(pid_t)];
char ppidstr[32]; char ppidstr[3 * sizeof(pid_t)];
sprintf(pidstr, "%i", getpid()); sprintf(pidstr, "%ji", (intmax_t) getpid());
sprintf(ppidstr, "%i", getppid()); sprintf(ppidstr, "%ji", (intmax_t) getppid());
setenv("SHELL", argv[0], 1); setenv("SHELL", argv[0], 1);
setenv("$", pidstr, 1); setenv("$", pidstr, 1);
setenv("PPID", ppidstr, 1); setenv("PPID", ppidstr, 1);