Ignore:
Timestamp:
Jun 26, 2020, 7:16:26 PM (5 years ago)
Author:
bird
Message:

kmk: Avoid setting umask just to get it, store the current value in a global variable (g_fUMask). The umask(0777) call in cp.c raced other code (kmk_append) that created files and directories, leaving us with read-only files sometimes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/cp.c

    r3221 r3389  
    6969#include <sys/stat.h>
    7070
     71#include <assert.h>
    7172#include "err.h"
    7273#include <errno.h>
     
    175176volatile sig_atomic_t g_cp_info;
    176177#endif
     178
     179extern mode_t g_fUMask;
    177180
    178181
     
    423426
    424427#ifdef KMK_BUILTIN_STANDALONE
     428mode_t g_fUMask;
    425429int main(int argc, char **argv, char **envp)
    426430{
    427431    KMKBUILTINCTX Ctx = { "kmk_cp", NULL };
     432    umask(g_fUMask = umask(0077));
    428433    return kmk_builtin_cp(argc, argv, envp, &Ctx);
    429434}
     
    445450         * permissions on created directories when not using -p.
    446451         */
    447         mask = ~umask(0777);
    448         umask(~mask);
     452        mask = g_fUMask;
     453        assert(mask == umask(mask));
     454        mask = ~mask;
    449455
    450456        if ((ftsp = fts_open(argv, fts_options, mastercmp)) == NULL)
Note: See TracChangeset for help on using the changeset viewer.