aboutsummaryrefslogtreecommitdiff
path: root/miscutils/devfsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils/devfsd.c')
-rw-r--r--miscutils/devfsd.c124
1 files changed, 57 insertions, 67 deletions
diff --git a/miscutils/devfsd.c b/miscutils/devfsd.c
index 968270fff..f39bb7e3f 100644
--- a/miscutils/devfsd.c
+++ b/miscutils/devfsd.c
@@ -391,45 +391,35 @@ static void safe_memcpy( char *dest, const char *src, int len)
391 391
392static unsigned int scan_dev_name_common(const char *d, unsigned int n, int addendum, char *ptr) 392static unsigned int scan_dev_name_common(const char *d, unsigned int n, int addendum, char *ptr)
393{ 393{
394 if( d[n - 4]=='d' && d[n - 3]=='i' && d[n - 2]=='s' && d[n - 1]=='c') 394 if(d[n - 4]=='d' && d[n - 3]=='i' && d[n - 2]=='s' && d[n - 1]=='c')
395 return (2 + addendum); 395 return 2 + addendum;
396 else if( d[n - 2]=='c' && d[n - 1]=='d') 396 if(d[n - 2]=='c' && d[n - 1]=='d')
397 return (3 + addendum); 397 return 3 + addendum;
398 else if(ptr[0]=='p' && ptr[1]=='a' && ptr[2]=='r' && ptr[3]=='t') 398 if(ptr[0]=='p' && ptr[1]=='a' && ptr[2]=='r' && ptr[3]=='t')
399 return (4 + addendum); 399 return 4 + addendum;
400 else if( ptr[n - 2]=='m' && ptr[n - 1]=='t') 400 if(ptr[n - 2]=='m' && ptr[n - 1]=='t')
401 return (5 + addendum); 401 return 5 + addendum;
402 else 402 return 0;
403 return 0;
404} 403}
405 404
406static unsigned int scan_dev_name(const char *d, unsigned int n, char *ptr) 405static unsigned int scan_dev_name(const char *d, unsigned int n, char *ptr)
407{ 406{
408 if(d[0]=='s' && d[1]=='c' && d[2]=='s' && d[3]=='i' && d[4]=='/') 407 if(d[0]=='s' && d[1]=='c' && d[2]=='s' && d[3]=='i' && d[4]=='/') {
409 {
410 if( d[n - 7]=='g' && d[n - 6]=='e' && d[n - 5]=='n' && 408 if( d[n - 7]=='g' && d[n - 6]=='e' && d[n - 5]=='n' &&
411 d[n - 4]=='e' && d[n - 3]=='r' && d[n - 2]=='i' && 409 d[n - 4]=='e' && d[n - 3]=='r' && d[n - 2]=='i' &&
412 d[n - 1]=='c' ) 410 d[n - 1]=='c' )
413 return 1; 411 return 1;
414 return scan_dev_name_common(d, n, 0, ptr); 412 return scan_dev_name_common(d, n, 0, ptr);
415 } 413 }
416 else if(d[0]=='i' && d[1]=='d' && d[2]=='e' && d[3]=='/' && 414 if(d[0]=='i' && d[1]=='d' && d[2]=='e' && d[3]=='/' &&
417 d[4]=='h' && d[5]=='o' && d[6]=='s' && d[7]=='t') 415 d[4]=='h' && d[5]=='o' && d[6]=='s' && d[7]=='t')
418 {
419 return scan_dev_name_common(d, n, 4, ptr); 416 return scan_dev_name_common(d, n, 4, ptr);
420 } 417 if(d[0]=='s' && d[1]=='b' && d[2]=='p' && d[3]=='/')
421 else if(d[0]=='s' && d[1]=='b' && d[2]=='p' && d[3]=='/')
422 {
423 return 10; 418 return 10;
424 } 419 if(d[0]=='v' && d[1]=='c' && d[2]=='c' && d[3]=='/')
425 else if(d[0]=='v' && d[1]=='c' && d[2]=='c' && d[3]=='/')
426 {
427 return 11; 420 return 11;
428 } 421 if(d[0]=='p' && d[1]=='t' && d[2]=='y' && d[3]=='/')
429 else if(d[0]=='p' && d[1]=='t' && d[2]=='y' && d[3]=='/')
430 {
431 return 12; 422 return 12;
432 }
433 return 0; 423 return 0;
434} 424}
435 425
@@ -787,7 +777,7 @@ static int do_servicing (int fd, unsigned long event_mask)
787 777
788 caught_signal = FALSE; 778 caught_signal = FALSE;
789 caught_sighup = FALSE; 779 caught_sighup = FALSE;
790 return (c_sighup); 780 return c_sighup;
791 } 781 }
792 msg_logger_and_die(LOG_ERR, "read error on control file"); 782 msg_logger_and_die(LOG_ERR, "read error on control file");
793} /* End Function do_servicing */ 783} /* End Function do_servicing */
@@ -1132,7 +1122,7 @@ static int copy_inode (const char *destpath, const struct stat *dest_stat,
1132 { 1122 {
1133 if (( source_len = readlink (sourcepath, source_link, STRING_LENGTH - 1) ) < 0 || 1123 if (( source_len = readlink (sourcepath, source_link, STRING_LENGTH - 1) ) < 0 ||
1134 ( dest_len = readlink (destpath , dest_link , STRING_LENGTH - 1) ) < 0 ) 1124 ( dest_len = readlink (destpath , dest_link , STRING_LENGTH - 1) ) < 0 )
1135 return (FALSE); 1125 return FALSE;
1136 source_link[source_len] = '\0'; 1126 source_link[source_len] = '\0';
1137 dest_link[dest_len] = '\0'; 1127 dest_link[dest_len] = '\0';
1138 if ( (source_len != dest_len) || (strcmp (source_link, dest_link) != 0) ) 1128 if ( (source_len != dest_len) || (strcmp (source_link, dest_link) != 0) )
@@ -1140,11 +1130,11 @@ static int copy_inode (const char *destpath, const struct stat *dest_stat,
1140 unlink (destpath); 1130 unlink (destpath);
1141 symlink (source_link, destpath); 1131 symlink (source_link, destpath);
1142 } 1132 }
1143 return (TRUE); 1133 return TRUE;
1144 } /* Else not a symlink */ 1134 } /* Else not a symlink */
1145 chmod (destpath, new_mode & ~S_IFMT); 1135 chmod (destpath, new_mode & ~S_IFMT);
1146 chown (destpath, source_stat->st_uid, source_stat->st_gid); 1136 chown (destpath, source_stat->st_uid, source_stat->st_gid);
1147 return (TRUE); 1137 return TRUE;
1148 } 1138 }
1149 /* Different types: unlink and create */ 1139 /* Different types: unlink and create */
1150 unlink (destpath); 1140 unlink (destpath);
@@ -1165,7 +1155,7 @@ static int copy_inode (const char *destpath, const struct stat *dest_stat,
1165 break; 1155 break;
1166 symlink_val[val] = '\0'; 1156 symlink_val[val] = '\0';
1167 if (symlink (symlink_val, destpath) == 0) 1157 if (symlink (symlink_val, destpath) == 0)
1168 return (TRUE); 1158 return TRUE;
1169 break; 1159 break;
1170 case S_IFREG: 1160 case S_IFREG:
1171 if ( ( fd = open (destpath, O_RDONLY | O_CREAT, new_mode & ~S_IFMT) ) < 0 ) 1161 if ( ( fd = open (destpath, O_RDONLY | O_CREAT, new_mode & ~S_IFMT) ) < 0 )
@@ -1185,10 +1175,10 @@ static int copy_inode (const char *destpath, const struct stat *dest_stat,
1185 break; 1175 break;
1186do_chown: 1176do_chown:
1187 if (chown (destpath, source_stat->st_uid, source_stat->st_gid) == 0) 1177 if (chown (destpath, source_stat->st_uid, source_stat->st_gid) == 0)
1188 return (TRUE); 1178 return TRUE;
1189 /*break;*/ 1179 /*break;*/
1190 } 1180 }
1191 return (FALSE); 1181 return FALSE;
1192} /* End Function copy_inode */ 1182} /* End Function copy_inode */
1193 1183
1194static void free_config (void) 1184static void free_config (void)
@@ -1242,13 +1232,13 @@ static int get_uid_gid (int flag, const char *string)
1242 msg_logger_and_die(LOG_ERR,"%s: flag != UID && flag != GID", __FUNCTION__); 1232 msg_logger_and_die(LOG_ERR,"%s: flag != UID && flag != GID", __FUNCTION__);
1243 1233
1244 if ( isdigit (string[0]) || ( (string[0] == '-') && isdigit (string[1]) ) ) 1234 if ( isdigit (string[0]) || ( (string[0] == '-') && isdigit (string[1]) ) )
1245 return atoi (string); 1235 return atoi(string);
1246 1236
1247 if ( flag == UID && ( pw_ent = getpwnam (string) ) != NULL ) 1237 if ( flag == UID && ( pw_ent = getpwnam (string) ) != NULL )
1248 return (pw_ent->pw_uid); 1238 return pw_ent->pw_uid;
1249 1239
1250 if ( flag == GID && ( grp_ent = getgrnam (string) ) != NULL ) 1240 if ( flag == GID && ( grp_ent = getgrnam (string) ) != NULL )
1251 return (grp_ent->gr_gid); 1241 return grp_ent->gr_gid;
1252 else if(ENABLE_DEVFSD_VERBOSE) 1242 else if(ENABLE_DEVFSD_VERBOSE)
1253 msg="group"; 1243 msg="group";
1254 1244
@@ -1269,7 +1259,7 @@ static mode_t get_mode (const char *string)
1269 debug_msg_logger(LOG_INFO, __FUNCTION__); 1259 debug_msg_logger(LOG_INFO, __FUNCTION__);
1270 1260
1271 if ( isdigit (string[0]) ) 1261 if ( isdigit (string[0]) )
1272 return strtoul (string, NULL, 8); 1262 return strtoul(string, NULL, 8);
1273 if (strlen (string) != 9) 1263 if (strlen (string) != 9)
1274 msg_logger_and_die(LOG_ERR, "bad mode: %s", string); 1264 msg_logger_and_die(LOG_ERR, "bad mode: %s", string);
1275 1265
@@ -1282,7 +1272,7 @@ static mode_t get_mode (const char *string)
1282 i=i/2; 1272 i=i/2;
1283 string++; 1273 string++;
1284 } 1274 }
1285 return (mode); 1275 return mode;
1286} /* End Function get_mode */ 1276} /* End Function get_mode */
1287 1277
1288static void signal_handler (int sig) 1278static void signal_handler (int sig)
@@ -1317,7 +1307,7 @@ static const char *get_variable (const char *variable, void *info)
1317 i=index_in_str_array(field_names, variable); 1307 i=index_in_str_array(field_names, variable);
1318 1308
1319 if ( i > 6 || i < 0 || (i > 1 && gv_info == NULL)) 1309 if ( i > 6 || i < 0 || (i > 1 && gv_info == NULL))
1320 return (NULL); 1310 return NULL;
1321 if( i >= 0 && i <= 3) 1311 if( i >= 0 && i <= 3)
1322 { 1312 {
1323 debug_msg_logger(LOG_INFO, "%s: i=%d %s", __FUNCTION__, i ,field_names[i+7]); 1313 debug_msg_logger(LOG_INFO, "%s: i=%d %s", __FUNCTION__, i ,field_names[i+7]);
@@ -1333,7 +1323,7 @@ static const char *get_variable (const char *variable, void *info)
1333 1323
1334 debug_msg_logger(LOG_INFO, "%s: %s", __FUNCTION__, sbuf); 1324 debug_msg_logger(LOG_INFO, "%s: %s", __FUNCTION__, sbuf);
1335 1325
1336 return (sbuf); 1326 return sbuf;
1337} /* End Function get_variable */ 1327} /* End Function get_variable */
1338 1328
1339static void service(struct stat statbuf, char *path) 1329static void service(struct stat statbuf, char *path)
@@ -1440,7 +1430,7 @@ static int make_dir_tree (const char *path)
1440 if (bb_make_directory( dirname((char *)path), -1, FILEUTILS_RECUR )==-1) 1430 if (bb_make_directory( dirname((char *)path), -1, FILEUTILS_RECUR )==-1)
1441 { 1431 {
1442 debug_msg_logger(LOG_ERR, "%s: %s: %m",__FUNCTION__, path); 1432 debug_msg_logger(LOG_ERR, "%s: %s: %m",__FUNCTION__, path);
1443 return (FALSE); 1433 return FALSE;
1444 } 1434 }
1445 return TRUE; 1435 return TRUE;
1446} /* End Function make_dir_tree */ 1436} /* End Function make_dir_tree */
@@ -1471,9 +1461,9 @@ static int expand_expression(char *output, unsigned int outsize,
1471 debug_msg_logger(LOG_INFO, __FUNCTION__); 1461 debug_msg_logger(LOG_INFO, __FUNCTION__);
1472 1462
1473 if ( !st_expr_expand (temp, STRING_LENGTH, input, get_variable_func, info) ) 1463 if ( !st_expr_expand (temp, STRING_LENGTH, input, get_variable_func, info) )
1474 return (FALSE); 1464 return FALSE;
1475 expand_regexp (output, outsize, temp, devname, ex, numexp); 1465 expand_regexp (output, outsize, temp, devname, ex, numexp);
1476 return (TRUE); 1466 return TRUE;
1477} /* End Function expand_expression */ 1467} /* End Function expand_expression */
1478 1468
1479static void expand_regexp (char *output, size_t outsize, const char *input, 1469static void expand_regexp (char *output, size_t outsize, const char *input,
@@ -1627,9 +1617,9 @@ const char *get_old_name (const char *devname, unsigned int namelen,
1627 if (strncmp (devname, trans->match, len) == 0) 1617 if (strncmp (devname, trans->match, len) == 0)
1628 { 1618 {
1629 if (trans->format == NULL) 1619 if (trans->format == NULL)
1630 return (devname + len); 1620 return devname + len;
1631 sprintf (buffer, trans->format, devname + len); 1621 sprintf (buffer, trans->format, devname + len);
1632 return (buffer); 1622 return buffer;
1633 } 1623 }
1634 } 1624 }
1635 1625
@@ -1689,7 +1679,7 @@ const char *get_old_name (const char *devname, unsigned int namelen,
1689 if(ENABLE_DEBUG && compat_name!=NULL) 1679 if(ENABLE_DEBUG && compat_name!=NULL)
1690 msg_logger(LOG_INFO, "%s: compat_name %s", __FUNCTION__, compat_name); 1680 msg_logger(LOG_INFO, "%s: compat_name %s", __FUNCTION__, compat_name);
1691 1681
1692 return (compat_name); 1682 return compat_name;
1693} /* End Function get_old_name */ 1683} /* End Function get_old_name */
1694 1684
1695static char get_old_ide_name (unsigned int major, unsigned int minor) 1685static char get_old_ide_name (unsigned int major, unsigned int minor)
@@ -1724,7 +1714,7 @@ static char get_old_ide_name (unsigned int major, unsigned int minor)
1724 1714
1725 if (minor > 63) 1715 if (minor > 63)
1726 ++letter; 1716 ++letter;
1727 return (letter); 1717 return letter;
1728} /* End Function get_old_ide_name */ 1718} /* End Function get_old_ide_name */
1729 1719
1730static char *write_old_sd_name (char *buffer, 1720static char *write_old_sd_name (char *buffer,
@@ -1745,7 +1735,7 @@ static char *write_old_sd_name (char *buffer,
1745 if (major == 8) 1735 if (major == 8)
1746 { 1736 {
1747 sprintf (buffer, "sd%c%s", 'a' + (minor >> 4), part); 1737 sprintf (buffer, "sd%c%s", 'a' + (minor >> 4), part);
1748 return (buffer); 1738 return buffer;
1749 } 1739 }
1750 if ( (major > 64) && (major < 72) ) 1740 if ( (major > 64) && (major < 72) )
1751 { 1741 {
@@ -1754,9 +1744,9 @@ static char *write_old_sd_name (char *buffer,
1754 sprintf (buffer, "sd%c%s", 'a' + disc_index, part); 1744 sprintf (buffer, "sd%c%s", 'a' + disc_index, part);
1755 else 1745 else
1756 sprintf (buffer, "sd%c%c%s", 'a' + (disc_index / 26) - 1, 'a' + disc_index % 26,part); 1746 sprintf (buffer, "sd%c%c%s", 'a' + (disc_index / 26) - 1, 'a' + disc_index % 26,part);
1757 return (buffer); 1747 return buffer;
1758 } 1748 }
1759 return (NULL); 1749 return NULL;
1760} /* End Function write_old_sd_name */ 1750} /* End Function write_old_sd_name */
1761 1751
1762 1752
@@ -1799,7 +1789,7 @@ int st_expr_expand (char *output, unsigned int length, const char *input,
1799 /* Variable expansion */ 1789 /* Variable expansion */
1800 input = expand_variable (buffer, length, &out_pos, ++input, get_variable_func, info); 1790 input = expand_variable (buffer, length, &out_pos, ++input, get_variable_func, info);
1801 if (input == NULL) 1791 if (input == NULL)
1802 return (FALSE); 1792 return FALSE;
1803 break; 1793 break;
1804 case '~': 1794 case '~':
1805 /* Home directory expansion */ 1795 /* Home directory expansion */
@@ -1810,7 +1800,7 @@ int st_expr_expand (char *output, unsigned int length, const char *input,
1810 if ( ( env = getenv ("HOME") ) == NULL ) 1800 if ( ( env = getenv ("HOME") ) == NULL )
1811 { 1801 {
1812 msg_logger(LOG_INFO, bb_msg_variable_not_found, "HOME"); 1802 msg_logger(LOG_INFO, bb_msg_variable_not_found, "HOME");
1813 return (FALSE); 1803 return FALSE;
1814 } 1804 }
1815 len = strlen (env); 1805 len = strlen (env);
1816 if (len + out_pos >= length) 1806 if (len + out_pos >= length)
@@ -1830,7 +1820,7 @@ int st_expr_expand (char *output, unsigned int length, const char *input,
1830 if ( ( pwent = getpwnam (tmp) ) == NULL ) 1820 if ( ( pwent = getpwnam (tmp) ) == NULL )
1831 { 1821 {
1832 msg_logger(LOG_INFO, "no pwent for: %s", tmp); 1822 msg_logger(LOG_INFO, "no pwent for: %s", tmp);
1833 return (FALSE); 1823 return FALSE;
1834 } 1824 }
1835 len = strlen (pwent->pw_dir); 1825 len = strlen (pwent->pw_dir);
1836 if (len + out_pos >= length) 1826 if (len + out_pos >= length)
@@ -1847,16 +1837,16 @@ int st_expr_expand (char *output, unsigned int length, const char *input,
1847 if (ch == '\0') 1837 if (ch == '\0')
1848 { 1838 {
1849 memcpy (output, buffer, out_pos); 1839 memcpy (output, buffer, out_pos);
1850 return (TRUE); 1840 return TRUE;
1851 } 1841 }
1852 break; 1842 break;
1853 /* esac */ 1843 /* esac */
1854 } 1844 }
1855 } 1845 }
1856 return (FALSE); 1846 return FALSE;
1857st_expr_expand_out: 1847st_expr_expand_out:
1858 msg_logger(LOG_INFO, bb_msg_small_buffer); 1848 msg_logger(LOG_INFO, bb_msg_small_buffer);
1859 return (FALSE); 1849 return FALSE;
1860} /* End Function st_expr_expand */ 1850} /* End Function st_expr_expand */
1861 1851
1862 1852
@@ -1899,7 +1889,7 @@ static const char *expand_variable (char *buffer, unsigned int length,
1899 1889
1900 memcpy (buffer + *out_pos, tmp, len + 1); 1890 memcpy (buffer + *out_pos, tmp, len + 1);
1901 out_pos += len; 1891 out_pos += len;
1902 return (input); 1892 return input;
1903 } 1893 }
1904 /* Ordinary variable expansion, possibly in braces */ 1894 /* Ordinary variable expansion, possibly in braces */
1905 if (ch != '{') 1895 if (ch != '{')
@@ -1916,7 +1906,7 @@ static const char *expand_variable (char *buffer, unsigned int length,
1916 if ( ( env = get_variable_v2 (tmp, func, info) ) == NULL ) 1906 if ( ( env = get_variable_v2 (tmp, func, info) ) == NULL )
1917 { 1907 {
1918 msg_logger(LOG_INFO, bb_msg_variable_not_found, tmp); 1908 msg_logger(LOG_INFO, bb_msg_variable_not_found, tmp);
1919 return (NULL); 1909 return NULL;
1920 } 1910 }
1921 len = strlen (env); 1911 len = strlen (env);
1922 if (len + *out_pos >= length) 1912 if (len + *out_pos >= length)
@@ -1924,7 +1914,7 @@ static const char *expand_variable (char *buffer, unsigned int length,
1924 1914
1925 memcpy (buffer + *out_pos, env, len + 1); 1915 memcpy (buffer + *out_pos, env, len + 1);
1926 *out_pos += len; 1916 *out_pos += len;
1927 return (input); 1917 return input;
1928 } 1918 }
1929 /* Variable in braces: check for ':' tricks */ 1919 /* Variable in braces: check for ':' tricks */
1930 ch = *++input; 1920 ch = *++input;
@@ -1940,13 +1930,13 @@ static const char *expand_variable (char *buffer, unsigned int length,
1940 safe_memcpy (tmp, input, len); 1930 safe_memcpy (tmp, input, len);
1941 ptr = expand_variable (buffer, length, out_pos, tmp, func, info ); 1931 ptr = expand_variable (buffer, length, out_pos, tmp, func, info );
1942 if (ptr == NULL) 1932 if (ptr == NULL)
1943 return (NULL); 1933 return NULL;
1944 return (input + len); 1934 return input + len;
1945 } 1935 }
1946 if (ch != ':' || ptr[1] != '-' ) 1936 if (ch != ':' || ptr[1] != '-' )
1947 { 1937 {
1948 msg_logger(LOG_INFO, "illegal char in var name"); 1938 msg_logger(LOG_INFO, "illegal char in var name");
1949 return (NULL); 1939 return NULL;
1950 } 1940 }
1951 /* It's that handy "${var:-word}" expression. Check if var is defined */ 1941 /* It's that handy "${var:-word}" expression. Check if var is defined */
1952 len = ptr - input; 1942 len = ptr - input;
@@ -1971,7 +1961,7 @@ static const char *expand_variable (char *buffer, unsigned int length,
1971 break; 1961 break;
1972 case '\0': 1962 case '\0':
1973 msg_logger(LOG_INFO,"\"}\" not found in: %s", input); 1963 msg_logger(LOG_INFO,"\"}\" not found in: %s", input);
1974 return (NULL); 1964 return NULL;
1975 default: 1965 default:
1976 break; 1966 break;
1977 } 1967 }
@@ -1989,7 +1979,7 @@ static const char *expand_variable (char *buffer, unsigned int length,
1989 1979
1990 memcpy (buffer + *out_pos, env, len + 1); 1980 memcpy (buffer + *out_pos, env, len + 1);
1991 *out_pos += len; 1981 *out_pos += len;
1992 return (input); 1982 return input;
1993 } 1983 }
1994 /* Environment variable was not found, so process word. Advance input 1984 /* Environment variable was not found, so process word. Advance input
1995 pointer to start of word in "${var:-word}" */ 1985 pointer to start of word in "${var:-word}" */
@@ -2001,17 +1991,17 @@ static const char *expand_variable (char *buffer, unsigned int length,
2001 safe_memcpy (tmp, input, len); 1991 safe_memcpy (tmp, input, len);
2002 input = ptr; 1992 input = ptr;
2003 if ( !st_expr_expand (tmp, STRING_LENGTH, tmp, func, info ) ) 1993 if ( !st_expr_expand (tmp, STRING_LENGTH, tmp, func, info ) )
2004 return (NULL); 1994 return NULL;
2005 len = strlen (tmp); 1995 len = strlen (tmp);
2006 if (len + *out_pos >= length) 1996 if (len + *out_pos >= length)
2007 goto expand_variable_out; 1997 goto expand_variable_out;
2008 1998
2009 memcpy (buffer + *out_pos, tmp, len + 1); 1999 memcpy (buffer + *out_pos, tmp, len + 1);
2010 *out_pos += len; 2000 *out_pos += len;
2011 return (input); 2001 return input;
2012expand_variable_out: 2002expand_variable_out:
2013 msg_logger(LOG_INFO, bb_msg_small_buffer); 2003 msg_logger(LOG_INFO, bb_msg_small_buffer);
2014 return (NULL); 2004 return NULL;
2015} /* End Function expand_variable */ 2005} /* End Function expand_variable */
2016 2006
2017 2007
@@ -2034,9 +2024,9 @@ static const char *get_variable_v2 (const char *variable,
2034 { 2024 {
2035 value = (*func) (variable, info); 2025 value = (*func) (variable, info);
2036 if (value != NULL) 2026 if (value != NULL)
2037 return (value); 2027 return value;
2038 } 2028 }
2039 return getenv (variable); 2029 return getenv(variable);
2040} /* End Function get_variable */ 2030} /* End Function get_variable */
2041 2031
2042/* END OF CODE */ 2032/* END OF CODE */