[Xcb-commit] xcb-demo xcbxvinfo.c,1.2,1.3

Jeremy Kolb xcb-commit at lists.freedesktop.org
Thu Jan 12 07:23:05 PST 2006


Update of /cvs/xcb/xcb-demo
In directory gabe:/tmp/cvs-serv3007

Modified Files:
	xcbxvinfo.c 
Log Message:
Added ExtractSting().  Used to turn strings in a reply to a c string.  This makes xcbxvinfo work like xvinfo.  The outputs are now identical.


Index: xcbxvinfo.c
===================================================================
RCS file: /cvs/xcb/xcb-demo/xcbxvinfo.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- xcbxvinfo.c	31 Dec 2005 00:44:36 -0000	1.2
+++ xcbxvinfo.c	12 Jan 2006 15:23:02 -0000	1.3
@@ -22,20 +22,33 @@
 
 static int nstrcmp(char *b, int n, char *s) {
     while (n > 0) {
-	if (*s == '\0')
-	    return 1;
-	if (*b - *s != 0)
-	    return *b - *s;
-	b++, s++, --n;
+        if (*s == '\0')
+            return 1;
+        if (*b - *s != 0)
+            return *b - *s;
+        b++, s++, --n;
     }
     return -(*s != '\0');
 }
 
+/* 
+ * Copies a string s of size n and returns it with a NULL appended.
+ * String returned is allocated with malloc and should be freed later.
+ */
+static char *ExtractString(char *s, int n) {
+    char *str;
+    str = (char *)malloc(sizeof(char) * (n+1));
+    strncpy(str, s, n); 
+    str[n] = '\0';
+    return str;
+}
+
 int main(int argc, char *argv[])
 {
     XCBConnection *c;
     int scrn;
     char *display_name = NULL;
+    char *name = NULL;
     XCBWINDOW root_window = {0};
     XCBSCREEN *screen;
     XCBXvQueryExtensionRep *query_ext;
@@ -97,10 +110,12 @@
         for (j = 0; j < adaptors_rep->num_adaptors; j++)
         {
             ainfo = adaptors_iter.data;
-            fprintf(stdout, "  Adaptor #%i: \"%s\"\n", j, XCBXvAdaptorInfoName(ainfo));
+            name = ExtractString(XCBXvAdaptorInfoName(ainfo), XCBXvAdaptorInfoNameLength(ainfo));
+            fprintf(stdout, "  Adaptor #%i: \"%s\"\n", j, name);
             fprintf(stdout, "    number of ports: %i\n", ainfo->num_ports);
             fprintf(stdout, "    port base: %li\n", ainfo->base_id.xid);
             fprintf(stdout, "    operations supported: ");
+            free(name);
 
             switch(ainfo->type & (XCBXvTypeInputMask | XCBXvTypeOutputMask)) {
                 case XCBXvTypeInputMask:
@@ -129,7 +144,7 @@
             for (k=0; k < ainfo->num_formats; k++, format++)
                 fprintf(stdout, "      depth %i, visualID 0x%2lx\n",
                         format->depth, format->visual.id);
-            
+
             attr_rep = XCBXvQueryPortAttributesReply(c,
                     XCBXvQueryPortAttributes(c, ainfo->base_id), NULL);
             nattr = attr_rep->num_attributes;
@@ -153,7 +168,7 @@
                         XCBInternAtomRep *atom_rep;
 
                         fprintf(stdout, "              client gettable attribute");
-                        
+
                         atom_rep = XCBInternAtomReply(c,
                                 XCBInternAtom(c,
                                     1, 
@@ -162,12 +177,12 @@
                                     XCBXvAttributeInfoName(attribute)),
                                 NULL);
                         the_atom = atom_rep->atom;
-                        
+
                         if (the_atom.xid != 0) {
                             XCBXvGetPortAttributeRep *pattr_rep =
                                 XCBXvGetPortAttributeReply(c,
-                                    XCBXvGetPortAttribute(c, ainfo->base_id, the_atom),
-                                    NULL);
+                                        XCBXvGetPortAttribute(c, ainfo->base_id, the_atom),
+                                        NULL);
                             if (pattr_rep) fprintf(stdout, " (current value is %li)", pattr_rep->value);
                             free(pattr_rep);
                         }
@@ -187,16 +202,16 @@
             XCBXvEncodingInfoIter encoding_iter = XCBXvQueryEncodingsInfoIter(qencodings_rep);
             XCBXvEncodingInfo *encoding;
 
+            int ImageEncodings = 0;
             if (nencode) {
-                int ImageEncodings = 0;
                 int n;
                 for (n = 0; n < nencode; n++) {
                     encoding = encoding_iter.data;
-                    if (!nstrcmp(XCBXvEncodingInfoName(encoding),
-				 XCBXvEncodingInfoNameLength(encoding),
-				 "XV_IMAGE"))
+                    name = ExtractString(XCBXvEncodingInfoName(encoding), XCBXvEncodingInfoNameLength(encoding));
+                    if (!nstrcmp(name, strlen(name), "XV_IMAGE"))
                         ImageEncodings++;
                     XCBXvEncodingInfoNext(&encoding_iter);
+                    free(name);
                 }
 
                 if(nencode - ImageEncodings) {
@@ -206,124 +221,119 @@
                     encoding_iter = XCBXvQueryEncodingsInfoIter(qencodings_rep);
                     for(n = 0; n < nencode; n++) {
                         encoding = encoding_iter.data;
-                        if(nstrcmp(XCBXvEncodingInfoName(encoding),
-				   XCBXvEncodingInfoNameLength(encoding),
-				   "XV_IMAGE")) {
-                            if (j == adaptors_rep->num_adaptors - 1) {
-                                printf("hi\n");
-                            }
+                        name = ExtractString(XCBXvEncodingInfoName(encoding), XCBXvEncodingInfoNameLength(encoding));
+                        if(nstrcmp(name, strlen(name), "XV_IMAGE")) {
                             fprintf(stdout,
-				    "      encoding ID #%li: \"%*s\"\n",
+                                    "      encoding ID #%li: \"%*s\"\n",
                                     encoding->encoding.xid,
-                                    XCBXvEncodingInfoNameLength(encoding),
-                                    XCBXvEncodingInfoName(encoding));
+                                    strlen(name),
+                                    name);
                             fprintf(stdout, "        size: %i x %i\n",
                                     encoding->width,
                                     encoding->height);
                             fprintf(stdout, "        rate: %f\n",
                                     (float)encoding->rate.numerator/
                                     (float)encoding->rate.denominator);
+                            free(name);
                         }
                         XCBXvEncodingInfoNext(&encoding_iter);
                     }
+                }
 
-                    if(ImageEncodings && (ainfo->type & XCBXvTypeImageMask)) {
-                        char imageName[5] = {0, 0, 0, 0, 0};
-                        encoding_iter = XCBXvQueryEncodingsInfoIter(qencodings_rep);
-                        for(n = 0; n < nencode; n++) {
-                            encoding = encoding_iter.data;
-                            if(!nstrcmp(XCBXvEncodingInfoName(encoding),
-					XCBXvEncodingInfoNameLength(encoding),
-					"XV_IMAGE")) {
-                                fprintf(stdout, 
-                                        "    maximum XvImage size: %i x %i\n",	
-                                        encoding->width, encoding->height);
-                                break;
-                            }
+                if(ImageEncodings && (ainfo->type & XCBXvTypeImageMask)) {
+                    char imageName[5] = {0, 0, 0, 0, 0};
+                    encoding_iter = XCBXvQueryEncodingsInfoIter(qencodings_rep);
+                    for(n = 0; n < nencode; n++) {
+                        encoding = encoding_iter.data;
+                        name = ExtractString(XCBXvEncodingInfoName(encoding), XCBXvEncodingInfoNameLength(encoding));
+                        if(!nstrcmp(name, strlen(name), "XV_IMAGE")) {
+                            fprintf(stdout, 
+                                    "    maximum XvImage size: %i x %i\n",	
+                                    encoding->width, encoding->height);
+                            break;
                         }
-                        XCBXvListImageFormatsRep *formats_rep;
-                        formats_rep = XCBXvListImageFormatsReply(c,
-                                XCBXvListImageFormats(c, ainfo->base_id),
-                                NULL);
+                        free(name);
+                    }
+                    XCBXvListImageFormatsRep *formats_rep;
+                    formats_rep = XCBXvListImageFormatsReply(c,
+                            XCBXvListImageFormats(c, ainfo->base_id),
+                            NULL);
 
-                        int numImages = formats_rep->num_formats;
-                        XCBXvImageFormatInfo *format;
-                        XCBXvImageFormatInfoIter formats_iter = XCBXvListImageFormatsFormatIter(formats_rep);
-                        fprintf(stdout, "    Number of image formats: %i\n",
-                                numImages);
+                    int numImages = formats_rep->num_formats;
+                    XCBXvImageFormatInfo *format;
+                    XCBXvImageFormatInfoIter formats_iter = XCBXvListImageFormatsFormatIter(formats_rep);
+                    fprintf(stdout, "    Number of image formats: %i\n",
+                            numImages);
 
-                        for(n = 0; n < numImages; n++) {
-                            format = formats_iter.data;
-                            memcpy(imageName, &(format->id), 4);
-                            fprintf(stdout, "      id: 0x%lx", format->id);
-                            if(isprint(imageName[0]) && isprint(imageName[1]) &&
-                                    isprint(imageName[2]) && isprint(imageName[3])) 
-                            {
-                                fprintf(stdout, " (%s)\n", imageName);
-                            } else {
-                                fprintf(stdout, "\n");
-                            }
-                            fprintf(stdout, "        guid: ");
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[0]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[1]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[2]);
-                            fprintf(stdout, "%02x-", (unsigned char) 
-                                    format->guid[3]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[4]);
-                            fprintf(stdout, "%02x-", (unsigned char) 
-                                    format->guid[5]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[6]);
-                            fprintf(stdout, "%02x-", (unsigned char) 
-                                    format->guid[7]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[8]);
-                            fprintf(stdout, "%02x-", (unsigned char) 
-                                    format->guid[9]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[10]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[11]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[12]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[13]);
-                            fprintf(stdout, "%02x", (unsigned char) 
-                                    format->guid[14]);
-                            fprintf(stdout, "%02x\n", (unsigned char) 
-                                    format->guid[15]);
+                    for(n = 0; n < numImages; n++) {
+                        format = formats_iter.data;
+                        memcpy(imageName, &(format->id), 4);
+                        fprintf(stdout, "      id: 0x%lx", format->id);
+                        if(isprint(imageName[0]) && isprint(imageName[1]) &&
+                                isprint(imageName[2]) && isprint(imageName[3])) 
+                        {
+                            fprintf(stdout, " (%s)\n", imageName);
+                        } else {
+                            fprintf(stdout, "\n");
+                        }
+                        fprintf(stdout, "        guid: ");
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[0]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[1]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[2]);
+                        fprintf(stdout, "%02x-", (unsigned char) 
+                                format->guid[3]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[4]);
+                        fprintf(stdout, "%02x-", (unsigned char) 
+                                format->guid[5]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[6]);
+                        fprintf(stdout, "%02x-", (unsigned char) 
+                                format->guid[7]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[8]);
+                        fprintf(stdout, "%02x-", (unsigned char) 
+                                format->guid[9]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[10]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[11]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[12]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[13]);
+                        fprintf(stdout, "%02x", (unsigned char) 
+                                format->guid[14]);
+                        fprintf(stdout, "%02x\n", (unsigned char) 
+                                format->guid[15]);
 
-                            fprintf(stdout, "        bits per pixel: %i\n",
-                                    format->bpp);
-                            fprintf(stdout, "        number of planes: %i\n",
-                                    format->num_planes);
-                            fprintf(stdout, "        type: %s (%s)\n", 
-                                    (format->type == XCBXvImageFormatInfoTypeRGB) ? "RGB" : "YUV",
-                                    (format->format == XCBXvImageFormatInfoFormatPacked) ? "packed" : "planar");
+                        fprintf(stdout, "        bits per pixel: %i\n",
+                                format->bpp);
+                        fprintf(stdout, "        number of planes: %i\n",
+                                format->num_planes);
+                        fprintf(stdout, "        type: %s (%s)\n", 
+                                (format->type == XCBXvImageFormatInfoTypeRGB) ? "RGB" : "YUV",
+                                (format->format == XCBXvImageFormatInfoFormatPacked) ? "packed" : "planar");
 
-                            if(format->type == XCBXvImageFormatInfoTypeRGB) {
-                                fprintf(stdout, "        depth: %i\n", 
-                                        format->depth);
+                        if(format->type == XCBXvImageFormatInfoTypeRGB) {
+                            fprintf(stdout, "        depth: %i\n", 
+                                    format->depth);
 
-                                fprintf(stdout, "        red, green, blue masks: " 
-                                        "0x%lx, 0x%lx, 0x%lx\n", 
-                                        format->red_mask,
-                                        format->green_mask,
-                                        format->blue_mask);
-                            } else {
+                            fprintf(stdout, "        red, green, blue masks: " 
+                                    "0x%lx, 0x%lx, 0x%lx\n", 
+                                    format->red_mask,
+                                    format->green_mask,
+                                    format->blue_mask);
+                        } else {
 
-                            }
-                            XCBXvImageFormatInfoNext(&formats_iter);
                         }
-                        free(formats_rep);
+                        XCBXvImageFormatInfoNext(&formats_iter);
                     }
-
+                    free(formats_rep);
                 }
-
             }
             free(qencodings_rep);
             XCBXvAdaptorInfoNext(&adaptors_iter);



More information about the xcb-commit mailing list