Commit ff58d063 authored by Andrew Price's avatar Andrew Price
Browse files

Fix up create_folder_file

Use ftruncate instead of writing malloced garbage entries to set the
file size of folders.bb, which dictates the (seemingly arbitrary) 64
folder limit. Also make it return on error instead of exiting.
parent 79336cc6
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -25,7 +25,8 @@ void add_folder(void)
	int folnum = -1;
	char tmp[11];

	if (nofolders()) create_folder_file();
	if (nofolders() && create_folder_file())
		exit(1);
	file=openfolderfile(O_RDWR);
	do{
		yes=get_folder_entry(file, &new);
+12 −13
Original line number Diff line number Diff line
@@ -50,24 +50,23 @@ int nofolders(void)
	return 0;
}

void create_folder_file(void)
int create_folder_file(void)
{
	int file,i;
	struct folder *record;
	int file;
	int ret;

	record=(struct folder *)malloc(sizeof(*record));
	record->status=0;
	file = open(FOLDERFILE, O_WRONLY|O_CREAT, 0600);
	Lock_File(file);
	for (i=0;i<64;i++)
		if (write(file,record,sizeof(*record))<0)
		{
			perror("creating blank folders");
			exit(-1);
	if (file < 0) {
		perror(FOLDERFILE);
		return 1;
	}
	Lock_File(file);
	ret = ftruncate(file, sizeof(struct folder) * 64);
	if (ret != 0)
		perror("Truncating folder file");
	Unlock_File(file);
	close(file);
	free(record);
	return ret;
}

int foldernumber(const char *name)
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ extern const char *folder_types[4];

int openfolderfile(int mode);
int nofolders(void);
void create_folder_file(void);
int create_folder_file(void);
int foldernumber(const char *name);
int get_folder_entry(int file, struct folder *tmp);
int get_folder_number(struct folder *fol, int num);