Skip to content

Commit

Permalink
Volume creation changes. No longer dependent on dd system command. Do…
Browse files Browse the repository at this point in the history
…es not overwrite existing files. Rudimentary file size checks.
  • Loading branch information
schinkelg committed May 2, 2022
1 parent 425dac6 commit 81ccbfa
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions BasiliskII/src/Unix/prefs_editor_gtk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <gtk/gtk.h>
#include <stdlib.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
Expand Down Expand Up @@ -572,15 +573,22 @@ static void add_volume_ok(GtkWidget *button, file_req_assoc *assoc)
static void create_volume_ok(GtkWidget *button, file_req_assoc *assoc)
{
gchar *file = (gchar *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(assoc->req));

const gchar *str = gtk_entry_get_text(GTK_ENTRY(assoc->entry));
int size = atoi(str);

char cmd[1024];
sprintf(cmd, "dd if=/dev/zero \"of=%s\" bs=1024k count=%d", file, size);
int ret = system(cmd);
if (ret == 0)
int disk_size = atoi(str);
if (disk_size < 1 || disk_size > 2000) {
printf("Disk size needs to be between 1 and 2000 MB.\n");
gtk_widget_destroy(GTK_WIDGET(assoc->req));
delete assoc;
return;
}
int fd = open(file, O_CREAT | O_WRONLY | O_EXCL, S_IRUSR | S_IWUSR);
if (fd < 0 && errno == EEXIST) {
printf("File already exists, refusing to overwrite file.\n");
} else {
ftruncate(fd, disk_size * 1024 * 1024);
gtk_clist_append(GTK_CLIST(volume_list), &file);
}
close(fd);
gtk_widget_destroy(GTK_WIDGET(assoc->req));
delete assoc;
}
Expand Down

0 comments on commit 81ccbfa

Please sign in to comment.