lexer: Use error helper functions in more situations.
[pspp] / src / language / utilities / permissions.c
index 83fa820c562d3be6473ef70afa49dd95a5b6ecc6..2ea91de1dcbac0ed27ce267fade61e32b8b6c983 100644 (file)
@@ -25,6 +25,8 @@
 #include "data/settings.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
+#include "libpspp/cast.h"
+#include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/misc.h"
 #include "libpspp/str.h"
@@ -74,7 +76,7 @@ cmd_permissions (struct lexer *lexer, struct dataset *ds UNUSED)
     }
   else
     {
-      msg (SE, _("Expecting %s or %s."), "WRITEABLE", "READONLY");
+      lex_error_expecting (lexer, "WRITEABLE", "READONLY", NULL_SENTINEL);
       goto error;
     }
 
@@ -94,20 +96,23 @@ cmd_permissions (struct lexer *lexer, struct dataset *ds UNUSED)
 int
 change_permissions (const char *file_name, enum PER per)
 {
+  char *locale_file_name;
   struct stat buf;
   mode_t mode;
 
   if (settings_get_safer_mode ())
     {
       msg (SE, _("This command not allowed when the SAFER option is set."));
-      return CMD_FAILURE;
+      return 0;
     }
 
 
-  if ( -1 == stat(file_name, &buf) )
+  locale_file_name = utf8_to_filename (file_name);
+  if ( -1 == stat(locale_file_name, &buf) )
     {
       const int errnum = errno;
       msg (SE, _("Cannot stat %s: %s"), file_name, strerror(errnum));
+      free (locale_file_name);
       return 0;
     }
 
@@ -116,13 +121,16 @@ change_permissions (const char *file_name, enum PER per)
   else
     mode = buf.st_mode & ~0222;
 
-  if ( -1 == chmod(file_name, mode))
+  if ( -1 == chmod(locale_file_name, mode))
 
     {
       const int errnum = errno;
       msg (SE, _("Cannot change mode of %s: %s"), file_name, strerror(errnum));
+      free (locale_file_name);
       return 0;
     }
 
+  free (locale_file_name);
+
   return 1;
 }