]> andersk Git - moira.git/blob - lib/nfsparttype.c
use abstraction barriers (init script) for restarting named
[moira.git] / lib / nfsparttype.c
1 /* $Id$
2  *
3  * Deal with NFS partition types
4  *
5  * Copyright (C) 1987-1998 by the Massachusetts Institute of Technology
6  * For copying and distribution information, please see the file
7  * <mit-copyright.h>.
8  *
9  */
10
11 #include <mit-copyright.h>
12 #include <moira.h>
13
14 #include <stdio.h>
15 #include <stdlib.h>
16 #include <string.h>
17
18 RCSID("$Header$");
19
20 struct pair {
21   int type;
22   char *name;
23 };
24
25 /*
26  * Table of fs type names.
27  */
28
29 static struct pair fs_names[] = {
30   { MR_FS_STUDENT, "Student" },
31   { MR_FS_FACULTY, "Faculty" },
32   { MR_FS_STAFF, "Staff" },
33   { MR_FS_MISC, "Other" },
34   { MR_FS_GROUPQUOTA, "GroupQuota" },
35   /* Insert new entries before the 0,0 pair */
36   { 0, 0 },
37 };
38
39 /*
40  * Given a numeric string containing a filesystem status value, return
41  * a string indicating what allocation type it is.
42  */
43 char *format_filesys_type(char *fs_status)
44 {
45   char buf[BUFSIZ];
46   struct pair *pp;
47
48   int n_names = 0;
49   int stat = atoi(fs_status);
50
51   buf[0] = '\0';
52
53   for (pp = fs_names; pp->type; pp++)
54     {
55       if (stat & pp->type)
56         {
57           if (n_names)
58             strcat(buf, ", ");
59           strcat(buf, pp->name);
60           n_names++;
61           stat &= ~pp->type;
62         }
63     }
64   if (stat)
65     {
66       char buf1[100];
67
68       if (n_names)
69         strcat(buf, ", ");
70       sprintf(buf1, "Unknown bits 0x%x", stat);
71       strcat(buf, buf1);
72     }
73   if (!n_names)
74     strcpy(buf, "none");
75   return strdup(buf);
76 }
77
78 /*
79  * Given a string describing a filesystem allocation type, return the
80  * numeric value.
81  */
82 char *parse_filesys_type(char *fs_type_name)
83 {
84   struct pair *pp;
85   char *cp = fs_type_name;
86   char temp[BUFSIZ];
87   int flags = 0;
88
89   do
90     {
91       /* Copy next component of type to temp */
92       char *t = strchr(cp, ',');
93       if (t)
94         {
95           memcpy(temp, cp, t - cp);
96           temp[t - cp] = '\0';
97           cp = t + 1; /* one after the comma */
98         }
99       else
100         {
101           strcpy(temp, cp);
102           cp = NULL;
103         }
104
105       t = strtrim(temp);        /* nuke leading and trailing whitespace */
106
107       for (pp = fs_names; pp->type; pp++)
108         {
109           if (!strcasecmp(pp->name, t))
110             {
111               flags |= pp->type;
112               break;
113             }
114         }
115     }
116   while (cp);
117   sprintf(temp, "%d", flags);
118   return strdup(temp);
119 }
This page took 0.046828 seconds and 5 git commands to generate.