const char* script, const size_t size, const char* args[], char** output) {
char path[PATH_MAX];
const char** argv = NULL;
+ FILE* f = NULL;
int r;
const char* root = pakfire_get_path(jail->pakfire);
// Write the scriptlet to disk
- r = pakfire_path_join(path, root, "pakfire-script.XXXXXX");
+ r = pakfire_path_join(path, root, PAKFIRE_TMP_DIR "/pakfire-script.XXXXXX");
if (r)
goto ERROR;
- // Open a temporary file
- int fd = mkstemp(path);
- if (fd < 0) {
- ERROR(jail->pakfire, "Could not open a temporary file: %m\n");
- r = 1;
+ // Create a temporary file
+ f = pakfire_mktemp(path, 0700);
+ if (!f) {
+ ERROR(jail->pakfire, "Could not create temporary file: %m\n");
goto ERROR;
}
DEBUG(jail->pakfire, "Writing script to %s:\n%.*s\n", path, (int)size, script);
// Write data
- ssize_t bytes_written = write(fd, script, size);
- if (bytes_written < (ssize_t)size) {
+ r = fprintf(f, "%s", script);
+ if (r < 0) {
ERROR(jail->pakfire, "Could not write script to file %s: %m\n", path);
- r = 1;
- goto ERROR;
- }
-
- // Make the script executable
- r = fchmod(fd, S_IRUSR|S_IWUSR|S_IXUSR);
- if (r) {
- ERROR(jail->pakfire, "Could not set executable permissions on %s: %m\n", path);
goto ERROR;
}
// Close file
- r = close(fd);
+ r = fclose(f);
if (r) {
ERROR(jail->pakfire, "Could not close script file %s: %m\n", path);
- r = 1;
goto ERROR;
}
+ f = NULL;
+
// Count how many arguments were passed
unsigned int argc = 1;
if (args) {
ERROR:
if (argv)
free(argv);
+ if (f)
+ fclose(f);
// Remove script from disk
if (*path)