View | Details | Raw Unified | Return to bug 161837
Collapse All | Expand All

(-)libdisk.h (-3 lines)
Lines 17-25 Link Here
17
/* You can define a particular architecture here if you are debugging. */
17
/* You can define a particular architecture here if you are debugging. */
18
/* #define P_DEBUG p_sparc64 */
18
/* #define P_DEBUG p_sparc64 */
19
19
20
#define MAX_NO_DISKS	32
21
/* Max # of disks Disk_Names() will return */
22
23
#define MAX_SEC_SIZE    2048  /* maximum sector size that is supported */
20
#define MAX_SEC_SIZE    2048  /* maximum sector size that is supported */
24
#define MIN_SEC_SIZE	512   /* the sector size to end sensing at */
21
#define MIN_SEC_SIZE	512   /* the sector size to end sensing at */
25
22
(-)disk.c (-16 / +22 lines)
Lines 190-196 Link Here
190
char **
190
char **
191
Disk_Names()
191
Disk_Names()
192
{
192
{
193
	int disk_cnt;
193
	int i, disk_cnt;
194
	char **disks;
194
	char **disks;
195
	int error;
195
	int error;
196
	size_t listsize;
196
	size_t listsize;
Lines 205-234 Link Here
205
	if (listsize == 0)
205
	if (listsize == 0)
206
		return (NULL);
206
		return (NULL);
207
207
208
	disks = malloc(sizeof *disks * (1 + MAX_NO_DISKS));
208
	disk1 = disklist = (char *)calloc(listsize + 1, sizeof *disklist);
209
	if (disks == NULL)
209
	if (disklist == NULL)
210
		return NULL;
210
		return NULL;
211
	disk1 = disklist = (char *)malloc(listsize + 1);
211
212
	if (disklist == NULL) {
213
		free(disks);
214
		return NULL;
215
	}
216
	memset(disks,0,sizeof *disks * (1 + MAX_NO_DISKS));
217
	memset(disklist, 0, listsize + 1);
218
	error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0);
212
	error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0);
219
	if (error || disklist[0] == 0) {
213
	if (error || disklist[0] == 0) {
220
		free(disklist);
214
		free(disklist);
221
		free(disks);
222
		return NULL;
215
		return NULL;
223
	}
216
	}
224
	for (disk_cnt = 0; disk_cnt < MAX_NO_DISKS; disk_cnt++) {
217
218
	disk_cnt = 1;
219
	for (i = 0; i < listsize; ++i) {
220
		if (disklist[i] == ' ')
221
			disk_cnt++;
222
	}
223
224
	disks = calloc(disk_cnt + 1, sizeof *disks);
225
	if (disks == NULL) {
226
		free(disklist);
227
		return NULL;
228
	}
229
230
	for (i = 0; i < disk_cnt; ++i) {
225
		disk2 = strsep(&disk1, " ");
231
		disk2 = strsep(&disk1, " ");
226
		if (disk2 == NULL)
232
		if (disk2 == NULL)
227
			break;
233
			break;
228
		disks[disk_cnt] = strdup(disk2);
234
		disks[i] = strdup(disk2);
229
		if (disks[disk_cnt] == NULL) {
235
		if (disks[i] == NULL) {
230
			for (disk_cnt--; disk_cnt >= 0; disk_cnt--)
236
			for (i--; i >= 0; i--)
231
				free(disks[disk_cnt]);
237
				free(disks[i]);
232
			free(disklist);
238
			free(disklist);
233
			free(disks);
239
			free(disks);
234
			return (NULL);
240
			return (NULL);

Return to bug 161837