diff -r c3cc6e44d1a4 -r 3d7a241329e2 thermferm/server.c --- a/thermferm/server.c Tue Jul 01 21:53:03 2014 +0200 +++ b/thermferm/server.c Tue Jul 01 23:14:57 2014 +0200 @@ -168,7 +168,7 @@ */ int cmd_list(char *buf) { - char *cmd, *opt; + char *cmd, *opt, *mypath; units_list *unit; int i; DIR *fd; @@ -186,33 +186,62 @@ } srv_send((char *)"."); } else if (strcmp(opt, (char *)"BUS") == 0) { + /* + * 1-wire bus + */ if ((fd = opendir((char *)"/sys/bus/w1/devices"))) { - srv_send((char *)"212 1-wire bus devices:"); - while ((de = readdir(fd))) { - if (de->d_name[0] != '.') { - if (strncmp(de->d_name, (char *)"w1", 2) == 0) { - srv_send((char *)"%-15s system device", de->d_name); - } else if (strncmp(de->d_name, (char *)"10", 2) == 0) { - srv_send((char *)"%-15s 18S20 digital thermometer", de->d_name); - } else if (strncmp(de->d_name, (char *)"28", 2) == 0) { - srv_send((char *)"%-15s 18B20 digital thermometer", de->d_name); - } else if (strncmp(de->d_name, (char *)"29", 2) == 0) { - srv_send((char *)"%-15s 2408 8-channel addressable switch", de->d_name); - } else if (strncmp(de->d_name, (char *)"3a", 2) == 0) { - srv_send((char *)"%-15s 2413 dual channel addressable switchs", de->d_name); - } else { - srv_send((char *)"%-15s unknown device", de->d_name); - } + srv_send((char *)"212 1-wire bus devices:"); + while ((de = readdir(fd))) { + if (de->d_name[0] != '.') { + if (strncmp(de->d_name, (char *)"w1", 2) == 0) { + srv_send((char *)"%-15s system device", de->d_name); + } else if (strncmp(de->d_name, (char *)"10", 2) == 0) { + srv_send((char *)"%-15s 18S20 digital thermometer", de->d_name); + } else if (strncmp(de->d_name, (char *)"28", 2) == 0) { + srv_send((char *)"%-15s 18B20 digital thermometer", de->d_name); + } else if (strncmp(de->d_name, (char *)"29", 2) == 0) { + srv_send((char *)"%-15s 2408 8-channel addressable switch/LCD", de->d_name); + } else if (strncmp(de->d_name, (char *)"3a", 2) == 0) { + srv_send((char *)"%-15s 2413 dual channel addressable switchs", de->d_name); + } else { + srv_send((char *)"%-15s unknown device", de->d_name); } } - srv_send((char *)"."); + } + srv_send((char *)"."); closedir(fd); } else { srv_send((char *)"503 directory /sys/bus/w1/devices: %s", strerror(errno)); } } else if (strcmp(opt, (char *)"PROFILES") == 0) { - + /* + * User profiles directory + */ + if (getenv((char *)"USER") == NULL) { + mypath = xstrcpy((char *)"/root"); + } else { + mypath = xstrcpy(getenv((char *)"HOME")); + } + mypath = xstrcat(mypath, (char *)"/.thermferm/profiles/"); + mkdirs(mypath, 0755); + if ((fd = opendir(mypath))) { + srv_send((char *)"212 profiles:"); + while ((de = readdir(fd))) { + if (de->d_name[0] != '.') { + srv_send((char *)"%s", de->d_name); + } + } + srv_send((char *)"."); + closedir(fd); + } else { + srv_send((char *)"503 directory %s: %s", mypath, strerror(errno)); + } + free(mypath); + mypath = NULL; } else if (strcmp(opt, (char *)"UNIT") == 0) { + /* + * List configured and selected fermenter unit + */ if (current_unit == -1) { srv_send((char *)"401 No fermenter unit selected"); } else {