Mercurial > dwindows
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; |