Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
// 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);
}