comparison compat.c @ 42:eb003f77538c

Added the filesystem functions for Solaris.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 23 Oct 2001 18:38:34 +0000
parents 360bc6a5f1c9
children 997e9ed670ef
comparison
equal deleted inserted replaced
41:af0a78aa0d45 42:eb003f77538c
8 #ifdef __UNIX__ 8 #ifdef __UNIX__
9 #ifdef __FreeBSD__ 9 #ifdef __FreeBSD__
10 #include <sys/param.h> 10 #include <sys/param.h>
11 #include <sys/ucred.h> 11 #include <sys/ucred.h>
12 #include <sys/mount.h> 12 #include <sys/mount.h>
13 #elif defined(__sun__)
14 #include <sys/mnttab.h>
15 #include <sys/param.h>
16 #include <sys/mount.h>
17 #include <sys/statfs.h>
13 #else 18 #else
14 #include <mntent.h> 19 #include <mntent.h>
15 #include <sys/vfs.h> 20 #include <sys/vfs.h>
16 #endif 21 #endif
17 #endif 22 #endif
22 #ifdef __sun__ 27 #ifdef __sun__
23 /* usleep() isn't threadsafe on Solaris */ 28 /* usleep() isn't threadsafe on Solaris */
24 struct timespec req; 29 struct timespec req;
25 30
26 req.tv_sec = 0; 31 req.tv_sec = 0;
27 req.tv_nsec = period * 1000000; 32 req.tv_nsec = period * 10000000;
28 33
29 nanosleep(&req, NULL); 34 nanosleep(&req, NULL);
30 #else 35 #else
31 usleep(period * 1000); 36 usleep(period * 1000);
32 #endif 37 #endif
251 { 256 {
252 if(index == drive) 257 if(index == drive)
253 return (fsp->f_bsize * fsp->f_bavail) / 1024; 258 return (fsp->f_bsize * fsp->f_bavail) / 1024;
254 } 259 }
255 return 0; 260 return 0;
261 #elif defined(__sun__)
262 FILE *fp = fopen("/etc/mnttab", "r");
263 struct mnttab mnt;
264 struct statfs sfs;
265 int index = 1;
266
267 if(fp)
268 {
269 while((getmntent(fp, &mnt) == 0))
270 {
271 if(index == drive)
272 {
273 long long size = 0;
274
275 if(mnt.mnt_mountp)
276 {
277 statfs(mnt.mnt_mountp, &sfs, sizeof(struct statfs), 0);
278 size = sfs.f_bsize * (sfs.f_bfree / 1024);
279 }
280 fclose(fp);
281 return size;
282 }
283 index++;
284 }
285 fclose(fp);
286 }
287 return 0;
256 #else 288 #else
257 FILE *fp = setmntent(MOUNTED, "r"); 289 FILE *fp = setmntent(MOUNTED, "r");
258 struct mntent *mnt; 290 struct mntent *mnt;
259 struct statfs sfs; 291 struct statfs sfs;
260 int index = 1; 292 int index = 1;
332 { 364 {
333 if(index == drive) 365 if(index == drive)
334 return (fsp->f_bsize * fsp->f_blocks) / 1024; 366 return (fsp->f_bsize * fsp->f_blocks) / 1024;
335 } 367 }
336 return 0; 368 return 0;
369 #elif defined(__sun__)
370 FILE *fp = fopen("/etc/mnttab", "r");
371 struct mnttab mnt;
372 struct statfs sfs;
373 int index = 1;
374
375 if(fp)
376 {
377 while(getmntent(fp, &mnt) == 0)
378 {
379 if(index == drive)
380 {
381 long long size = 0;
382
383 if(mnt.mnt_mountp)
384 {
385 statfs(mnt.mnt_mountp, &sfs, sizeof(struct statfs), 0);
386 size = sfs.f_bsize * (sfs.f_blocks / 1024);
387 }
388 fclose(fp);
389 return size;
390 }
391 index++;
392 }
393 fclose(fp);
394 }
395 return 0;
337 #else 396 #else
338 FILE *fp = setmntent(MOUNTED, "r"); 397 FILE *fp = setmntent(MOUNTED, "r");
339 struct mntent *mnt; 398 struct mntent *mnt;
340 struct statfs sfs; 399 struct statfs sfs;
341 int index = 1; 400 int index = 1;
398 { 457 {
399 if(index == drive && fsp->f_blocks) 458 if(index == drive && fsp->f_blocks)
400 return 1; 459 return 1;
401 } 460 }
402 return 0; 461 return 0;
462 #elif defined(__sun__)
463 FILE *fp = fopen("/etc/mnttab", "r");
464 struct mnttab mnt;
465 struct statfs sfs;
466 int index = 1;
467
468 if(fp)
469 {
470 while(getmntent(fp, &mnt) == 0)
471 {
472 if(index == drive)
473 {
474 fclose(fp);
475 if(mnt.mnt_mountp)
476 {
477 statfs(mnt.mnt_mountp, &sfs, sizeof(struct statfs), 0);
478 if(sfs.f_blocks)
479 return 1;
480 }
481 return 0;
482 }
483 index++;
484 }
485 fclose(fp);
486 }
403 #else 487 #else
404 FILE *fp = setmntent(MOUNTED, "r"); 488 FILE *fp = setmntent(MOUNTED, "r");
405 struct mntent *mnt; 489 struct mntent *mnt;
406 struct statfs sfs; 490 struct statfs sfs;
407 int index = 1; 491 int index = 1;
442 526
443 for (; entries-- > 0; fsp++) 527 for (; entries-- > 0; fsp++)
444 { 528 {
445 if(index == drive) 529 if(index == drive)
446 strncpy(buf, fsp->f_mntonname, len); 530 strncpy(buf, fsp->f_mntonname, len);
531 }
532 #elif defined(__sun__)
533 FILE *fp = fopen("/etc/mnttab", "r");
534 struct mnttab mnt;
535 int index = 1;
536
537 strncpy(buf, "Unknown", len);
538
539 if(fp)
540 {
541 while(getmntent(fp, &mnt) == 0)
542 {
543 if(index == drive && mnt.mnt_mountp)
544 strncpy(buf, mnt.mnt_mountp, len);
545 index++;
546 }
547 fclose(fp);
447 } 548 }
448 #else 549 #else
449 FILE *fp = setmntent(MOUNTED, "r"); 550 FILE *fp = setmntent(MOUNTED, "r");
450 struct mntent *mnt; 551 struct mntent *mnt;
451 int index = 1; 552 int index = 1;