Main Page | Modules | Data Structures | File List | Data Fields | Related Pages

DevFS
[System]


Functions

ssize_t di_system_devfs_map_from (const char *path, char *ret, size_t len)
ssize_t di_mapdevfs (const char *path, char *ret, size_t len) __attribute__((deprecated))

Function Documentation

ssize_t di_mapdevfs const char *  path,
char *  ret,
size_t  len
 

Deprecated:
Alias of di_system_devfs_map_from

ssize_t di_system_devfs_map_from const char *  path,
char *  ret,
size_t  len
 

Maps a devfs path to the corresponding standard dev path

Parameters:
path an existing device
ret device
len len of ret

00042 { 00043 static struct entry 00044 { 00045 unsigned char major; 00046 unsigned char minor; 00047 char *name; 00048 enum { ENTRY_TYPE_ONE, ENTRY_TYPE_NUMBER, ENTRY_TYPE_DISC, ENTRY_TYPE_DISC_ARRAY } type; 00049 unsigned char entry_first; 00050 unsigned char entry_disc_minor_shift; 00051 enum { FORMAT_DEFAULT, FORMAT_NOCONTROLLER } format; 00052 } 00053 entries[] = 00054 { 00055 /* 00056 bmajor minor name type entry_first 00057 entry_disc_minor_shift 00058 format 00059 */ 00060 { 2, 0, "fd", ENTRY_TYPE_NUMBER, 0, 0, FORMAT_DEFAULT }, 00061 { 3, 0, "hd", ENTRY_TYPE_DISC, 0, 6, FORMAT_DEFAULT }, 00062 { 4, 64, "ttyS", ENTRY_TYPE_NUMBER, 0, 0, FORMAT_DEFAULT }, 00063 { 4, 0, "tty", ENTRY_TYPE_NUMBER, 0, 0, FORMAT_DEFAULT }, 00064 { 8, 0, "sd", ENTRY_TYPE_DISC, 0, 4, FORMAT_DEFAULT }, 00065 { 9, 0, "md", ENTRY_TYPE_NUMBER, 0, 0, FORMAT_DEFAULT }, 00066 { 11, 0, "scd", ENTRY_TYPE_NUMBER, 0, 0, FORMAT_DEFAULT }, 00067 { 22, 0, "hd", ENTRY_TYPE_DISC, 2, 6, FORMAT_DEFAULT }, 00068 { 33, 0, "hd", ENTRY_TYPE_DISC, 4, 6, FORMAT_DEFAULT }, 00069 { 34, 0, "hd", ENTRY_TYPE_DISC, 6, 6, FORMAT_DEFAULT }, 00070 { 48, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 0, 3, FORMAT_DEFAULT }, 00071 { 49, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 1, 3, FORMAT_DEFAULT }, 00072 { 50, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 2, 3, FORMAT_DEFAULT }, 00073 { 51, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 3, 3, FORMAT_DEFAULT }, 00074 { 52, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 4, 3, FORMAT_DEFAULT }, 00075 { 53, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 5, 3, FORMAT_DEFAULT }, 00076 { 54, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 6, 3, FORMAT_DEFAULT }, 00077 { 55, 0, "rd", ENTRY_TYPE_DISC_ARRAY, 7, 3, FORMAT_DEFAULT }, 00078 { 56, 0, "hd", ENTRY_TYPE_DISC, 8, 6, FORMAT_DEFAULT }, 00079 { 57, 0, "hd", ENTRY_TYPE_DISC, 10, 6, FORMAT_DEFAULT }, 00080 { 65, 0, "sd", ENTRY_TYPE_DISC, 16, 4, FORMAT_DEFAULT }, 00081 { 66, 0, "sd", ENTRY_TYPE_DISC, 32, 4, FORMAT_DEFAULT }, 00082 { 67, 0, "sd", ENTRY_TYPE_DISC, 48, 4, FORMAT_DEFAULT }, 00083 { 68, 0, "sd", ENTRY_TYPE_DISC, 64, 4, FORMAT_DEFAULT }, 00084 { 69, 0, "sd", ENTRY_TYPE_DISC, 80, 4, FORMAT_DEFAULT }, 00085 { 70, 0, "sd", ENTRY_TYPE_DISC, 96, 4, FORMAT_DEFAULT }, 00086 { 71, 0, "sd", ENTRY_TYPE_DISC, 112, 4, FORMAT_DEFAULT }, 00087 { 72, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 0, 4, FORMAT_DEFAULT }, 00088 { 73, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 1, 4, FORMAT_DEFAULT }, 00089 { 74, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 2, 4, FORMAT_DEFAULT }, 00090 { 75, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 3, 4, FORMAT_DEFAULT }, 00091 { 76, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 4, 4, FORMAT_DEFAULT }, 00092 { 77, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 5, 4, FORMAT_DEFAULT }, 00093 { 78, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 6, 4, FORMAT_DEFAULT }, 00094 { 79, 0, "ida", ENTRY_TYPE_DISC_ARRAY, 7, 4, FORMAT_DEFAULT }, 00095 { 88, 0, "hd", ENTRY_TYPE_DISC, 12, 6, FORMAT_DEFAULT }, 00096 { 89, 0, "hd", ENTRY_TYPE_DISC, 14, 6, FORMAT_DEFAULT }, 00097 { 90, 0, "hd", ENTRY_TYPE_DISC, 16, 6, FORMAT_DEFAULT }, 00098 { 91, 0, "hd", ENTRY_TYPE_DISC, 18, 6, FORMAT_DEFAULT }, 00099 { 94, 0, "dasd", ENTRY_TYPE_DISC, 0, 2, FORMAT_DEFAULT }, 00100 { 104, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 0, 4, FORMAT_DEFAULT }, 00101 { 105, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 1, 4, FORMAT_DEFAULT }, 00102 { 106, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 2, 4, FORMAT_DEFAULT }, 00103 { 107, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 3, 4, FORMAT_DEFAULT }, 00104 { 108, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 4, 4, FORMAT_DEFAULT }, 00105 { 109, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 5, 4, FORMAT_DEFAULT }, 00106 { 110, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 6, 4, FORMAT_DEFAULT }, 00107 { 111, 0, "cciss", ENTRY_TYPE_DISC_ARRAY, 7, 4, FORMAT_DEFAULT }, 00108 { 114, 0, "ataraid", ENTRY_TYPE_DISC_ARRAY, 0, 4, FORMAT_NOCONTROLLER }, 00109 { 0, 0, NULL, ENTRY_TYPE_ONE, 0, 0, FORMAT_DEFAULT }, 00110 }; 00111 00112 struct stat s; 00113 struct entry *e; 00114 00115 ssize_t ret = 0; 00116 00117 unsigned int disc; 00118 unsigned int part; 00119 00120 if (!strcmp ("none", path)) 00121 return snprintf (buf, n, "%s", path); 00122 00123 if (stat (path,&s) == -1) 00124 return 0; 00125 00126 e = entries; 00127 while (e->name != NULL) { 00128 if (major (s.st_rdev) == e->major && 00129 ((e->type == ENTRY_TYPE_ONE && minor (s.st_rdev) == e->minor) || 00130 (e->type != ENTRY_TYPE_ONE && minor (s.st_rdev) >= e->minor))) { 00131 break; 00132 } 00133 e++; 00134 } 00135 if (!e->name) { 00136 #ifdef TEST 00137 fprintf(stderr, "(unknown device)\n"); 00138 #endif 00139 /* Pass unknown devices on without changes. */ 00140 return snprintf (buf, n, "%s", path); 00141 } 00142 00143 strcat (buf, "/dev/"); 00144 00145 switch (e->type) 00146 { 00147 case ENTRY_TYPE_ONE: 00148 ret = di_snprintfcat (buf, n, "%s", e->name); 00149 break; 00150 00151 case ENTRY_TYPE_NUMBER: 00152 disc = minor (s.st_rdev) - e->minor + e->entry_first; 00153 00154 ret = di_snprintfcat (buf, n, "%s%d", e->name, disc); 00155 break; 00156 00157 case ENTRY_TYPE_DISC: 00158 case ENTRY_TYPE_DISC_ARRAY: 00159 disc = (minor (s.st_rdev) >> e->entry_disc_minor_shift); 00160 part = (minor (s.st_rdev) & ((1 << e->entry_disc_minor_shift) - 1)); 00161 00162 switch (e->type) 00163 { 00164 case ENTRY_TYPE_DISC: 00165 disc += e->entry_first; 00166 00167 if (disc + 'a' > 'z') 00168 { 00169 disc -= 26; 00170 ret = di_snprintfcat (buf, n, "%s%c%c", e->name, 'a' + disc / 26, 'a' + disc % 26); 00171 } 00172 else 00173 ret = di_snprintfcat (buf, n, "%s%c", e->name, 'a' + disc); 00174 00175 if (part) 00176 ret = di_snprintfcat (buf, n, "%d", part); 00177 00178 break; 00179 case ENTRY_TYPE_DISC_ARRAY: 00180 if (e->format == FORMAT_DEFAULT) 00181 ret = di_snprintfcat (buf, n, "%s/c%dd%d", e->name, e->entry_first, disc); 00182 else if (e->format == FORMAT_NOCONTROLLER) 00183 ret = di_snprintfcat (buf, n, "%s/d%d", e->name, disc); 00184 00185 if (part) 00186 ret = di_snprintfcat (buf, n, "p%d", part); 00187 00188 break; 00189 default: 00190 break; 00191 } 00192 break; 00193 }; 00194 00195 return ret; 00196 }


Generated on Tue Jun 15 13:13:55 2004 for libdebian-installer by doxygen 1.3.7