251 | 251 |
dasd_information2_t dasd_info;
|
252 | 252 |
|
253 | 253 |
memset(&dasd_info, 0, sizeof(dasd_info));
|
254 | |
devname = g_strdup_printf ("/dev/%s", dasd);
|
255 | |
|
|
254 |
|
|
255 |
/* complete the device name */
|
|
256 |
if (g_str_has_prefix (dasd, "/dev/")) {
|
|
257 |
devname = g_strdup (dasd);
|
|
258 |
}
|
|
259 |
else {
|
|
260 |
devname = g_strdup_printf ("/dev/%s", dasd);
|
|
261 |
}
|
|
262 |
|
|
263 |
/* open the device */
|
256 | 264 |
if ((f = open(devname, O_RDONLY)) == -1) {
|
257 | 265 |
g_set_error (error, BD_S390_ERROR, BD_S390_ERROR_DEVICE,
|
258 | 266 |
"Unable to open device %s", devname);
|
|
262 | 270 |
|
263 | 271 |
g_free (devname);
|
264 | 272 |
|
|
273 |
/* check if this is a block device */
|
265 | 274 |
if (ioctl(f, BLKSSZGET, &blksize) != 0) {
|
266 | 275 |
close(f);
|
267 | 276 |
return FALSE;
|
268 | 277 |
}
|
269 | 278 |
|
|
279 |
/* get some info about DASD */
|
270 | 280 |
if (ioctl(f, BIODASDINFO2, &dasd_info) != 0) {
|
271 | 281 |
close(f);
|
272 | 282 |
return FALSE;
|
|
286 | 296 |
else {
|
287 | 297 |
return TRUE;
|
288 | 298 |
}
|
|
299 |
}
|
|
300 |
|
|
301 |
/**
|
|
302 |
* bd_s390_dasd_is_fba:
|
|
303 |
* @dasd: dasd to check, whether it is FBA
|
|
304 |
* @error: (out): place to store error (if any)
|
|
305 |
*
|
|
306 |
* Returns: whether a dasd is FBA
|
|
307 |
*/
|
|
308 |
gboolean bd_s390_dasd_is_fba (const gchar *dasd, GError **error) {
|
|
309 |
gchar *devname = NULL;
|
|
310 |
gint f = 0;
|
|
311 |
gint blksize = 0;
|
|
312 |
dasd_information2_t dasd_info;
|
|
313 |
|
|
314 |
memset(&dasd_info, 0, sizeof(dasd_info));
|
|
315 |
|
|
316 |
/* complete the device name */
|
|
317 |
if (g_str_has_prefix (dasd, "/dev/")) {
|
|
318 |
devname = g_strdup (dasd);
|
|
319 |
}
|
|
320 |
else {
|
|
321 |
devname = g_strdup_printf ("/dev/%s", dasd);
|
|
322 |
}
|
|
323 |
|
|
324 |
/* open the device */
|
|
325 |
if ((f = open(devname, O_RDONLY)) == -1) {
|
|
326 |
g_set_error (error, BD_S390_ERROR, BD_S390_ERROR_DEVICE,
|
|
327 |
"Unable to open device %s", devname);
|
|
328 |
g_free (devname);
|
|
329 |
return FALSE;
|
|
330 |
}
|
|
331 |
|
|
332 |
g_free (devname);
|
|
333 |
|
|
334 |
/* check if this is a block device */
|
|
335 |
if (ioctl(f, BLKSSZGET, &blksize) != 0) {
|
|
336 |
close(f);
|
|
337 |
return FALSE;
|
|
338 |
}
|
|
339 |
|
|
340 |
/* get some info about DASD */
|
|
341 |
if (ioctl(f, BIODASDINFO2, &dasd_info) != 0) {
|
|
342 |
close(f);
|
|
343 |
return FALSE;
|
|
344 |
}
|
|
345 |
|
|
346 |
close(f);
|
|
347 |
|
|
348 |
/* check if we're on an FBA DASD */
|
|
349 |
return strncmp(dasd_info.type, "FBA", 3) == 0;
|
289 | 350 |
}
|
290 | 351 |
|
291 | 352 |
/**
|