X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Futilities%2Fpermissions.c;h=771eb72832dd1de27304976879eb931cb29350e5;hb=fedd5a603d218f4f77f1a5d67676a9d0de489bc4;hp=904ba95b270e2a7de6c5a22e729f64b8b3247cf1;hpb=7635ce0697c163bd9c80adb8b382df7a9aa97f42;p=pspp diff --git a/src/language/utilities/permissions.c b/src/language/utilities/permissions.c index 904ba95b27..771eb72832 100644 --- a/src/language/utilities/permissions.c +++ b/src/language/utilities/permissions.c @@ -51,31 +51,32 @@ cmd_permissions (struct lexer *lexer, struct dataset *ds UNUSED) lex_match (lexer, T_EQUALS); str = lex_tokcstr (lexer); - fn = strdup (str); + if (str) + fn = strdup (str); - if (!lex_force_match (lexer, T_STRING)) + if (!lex_force_match (lexer, T_STRING) || str == NULL) goto error; lex_match (lexer, T_SLASH); - if ( ! lex_match_id (lexer, "PERMISSIONS")) + if (! lex_match_id (lexer, "PERMISSIONS")) goto error; lex_match (lexer, T_EQUALS); - if ( lex_match_id (lexer, "READONLY")) + if (lex_match_id (lexer, "READONLY")) { if (! change_permissions (fn, PER_RO)) goto error; } else if (lex_match_id (lexer, "WRITEABLE")) { - if (! change_permissions (fn, PER_RW )) + if (! change_permissions (fn, PER_RW)) goto error; } else { - lex_error_expecting (lexer, "WRITEABLE", "READONLY", NULL_SENTINEL); + lex_error_expecting (lexer, "WRITEABLE", "READONLY"); goto error; } @@ -106,7 +107,7 @@ change_permissions (const char *file_name, enum PER per) } locale_file_name = utf8_to_filename (file_name); - if ( -1 == stat(locale_file_name, &buf) ) + if (-1 == stat(locale_file_name, &buf)) { const int errnum = errno; msg (SE, _("Cannot stat %s: %s"), file_name, strerror(errnum)); @@ -114,12 +115,12 @@ change_permissions (const char *file_name, enum PER per) return 0; } - if ( per == PER_RW ) + if (per == PER_RW) mode = buf.st_mode | 0200; else mode = buf.st_mode & ~0222; - if ( -1 == chmod(locale_file_name, mode)) + if (-1 == chmod(locale_file_name, mode)) { const int errnum = errno;