std::string& CRKey::EncodeJson( std::string &s, int tabs ) { tabstr( s, tabs ); s += "{\r\n"; int n = 0; LPREGVALUE prv = NULL; while ( ( prv = (LPREGVALUE)GetNext( prv ) ) != NULL ) { // Separator if ( n++ ) s += ",\r\n"; tabstr( s, tabs + 1 ); // Key s += "\""; s += EncodeJsonStr( prv->cpkey ); s += "\": "; // Value s += "\""; if ( prv->type == REG_BINARY ) s += EncodeJsonStr( std::string( (const char *)prv->data, prv->size ) ); else s += EncodeJsonStr( GetSz( prv ) ); s += "\""; } // end while s += "\r\n"; tabstr( s, tabs ); s += "}"; return s; }
std::string& CReg::EncodeJson( std::string &s, int tabs, int array ) { tabstr( s, tabs ); s += array ? "[\r\n" : "{\r\n"; LPREGKEY prk = NULL; while ( NULL != ( prk = (LPREGKEY)GetNext( prk ) ) ) { int nt = tabs + 1; if ( !array ) { tabstr( s, nt++ ); // Key s += "\""; s += json_escape( prk->cpkey ); s += "\":\r\n"; } // end if // Encode this block prk->key->EncodeJson( s, nt ); // Next? if ( prk->pNext ) s += ","; s += "\r\n"; } // end while tabstr( s, tabs ); s += array ? "]\r\n" : "}\r\n"; return s; }
QString Ttystr::name(int devnr) { if(devnr == 0) return QString("-"); if(!tab) { // see if we can use /etc/psdevtab (from the procps suite) struct stat sb; int fd = open("/etc/psdevtab", O_RDONLY); if(fd < 0 || fstat(fd, &sb) < 0 || sb.st_size != DEVTABSIZE || (tab = (char *)mmap(0, DEVTABSIZE, PROT_READ, MAP_SHARED, fd, 0)) == (caddr_t)-1 || close(fd) < 0) { // no psdevtab, and we don't fix it here (run ps as root to do it) // scan /dev instead (takes time, but only do it once) read_devs(); } } char *ts = tabstr(devnr); QString s("?"); if(ts && ts[0] != '\0') { char buf[DEVNAMELEN + 1]; strncpy(buf, ts, DEVNAMELEN); buf[DEVNAMELEN] = '\0'; char *p = strpbrk(buf, "yu"); // prefixes "tty" or "cu" if(p) { s = "xx"; s[0] = p[1]; s[1] = p[2]; // copy two chars } } return s; }
// scan /dev for tty names void Ttystr::read_devs() { tab = (char *)calloc(DEVTABSIZE, 1); DIR *d = opendir("/dev"); struct dirent *e; struct stat sb; char name[80] = "/dev/"; while((e = readdir(d)) != 0) { strncpy(name + 5, e->d_name, sizeof(name) - 6); if(lstat(name, &sb) >= 0 && S_ISCHR(sb.st_mode)) { char *s = tabstr(sb.st_rdev); if(s) strncpy(s, e->d_name, DEVNAMELEN); } } closedir(d); }