static int Exists(void *obj, const AG_Dbt *key) { AG_DbMySQL *db = obj; char *ks, *q; ks = EncodeKey(key); Asprintf(&q, AG_GetStringP(db,"get-cmd"), ks); Free(ks); if (mysql_query(db->my, q) != 0) { AG_SetError("Get: %s", mysql_error(db->my)); return (-1); } Free(q); return (mysql_field_count(db->my) > 0) ? 1 : 0; }
static int Open(void *obj, const char *path, Uint flags) { char dbName[128]; AG_DbMySQL *db = obj; MYSQL *my; unsigned long myFlags = CLIENT_REMEMBER_OPTIONS; char *s; Uint i; my_bool b = 1; if ((my = mysql_init(NULL)) == NULL) { AG_SetError("mysql_init failed"); return (-1); } if (path != NULL) { Strlcpy(dbName, path, sizeof(dbName)); } else { AG_GetString(db, "database", dbName, sizeof(dbName)); } if (AG_GetInt(db,"compress") == 1) { myFlags |= CLIENT_COMPRESS; } if (AG_GetInt(db,"local-files") == 1) { myFlags |= CLIENT_LOCAL_FILES; } if (AG_GetInt(db,"ssl") == 1) { myFlags |= CLIENT_SSL; } if (AG_GetUint(db,"ssl-verify-cert") == 1) { mysql_options(my, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &b); } if (AG_GetUint(db,"secure-auth") == 1) { mysql_options(my, MYSQL_SECURE_AUTH, &b); } if ((s = AG_GetStringP(db,"init-cmd")) != NULL) { mysql_options(my, MYSQL_INIT_COMMAND, s); } if ((s = AG_GetStringP(db,"cnf-file")) != NULL) { mysql_options(my, MYSQL_READ_DEFAULT_FILE, s); } if ((s = AG_GetStringP(db,"cnf-group")) != NULL) { mysql_options(my, MYSQL_READ_DEFAULT_GROUP, s); } if ((s = AG_GetStringP(db,"protocol")) != NULL) { switch (tolower(s[0])) { case 't': i = MYSQL_PROTOCOL_TCP; break; case 's': i = MYSQL_PROTOCOL_SOCKET; break; case 'p': i = MYSQL_PROTOCOL_PIPE; break; case 'm': i = MYSQL_PROTOCOL_MEMORY; break; default: i = MYSQL_PROTOCOL_DEFAULT; break; } mysql_options(my, MYSQL_OPT_PROTOCOL, (const char *)&i); } if ((i = AG_GetUint(db,"read-timeout")) != 0) { mysql_options(my, MYSQL_OPT_READ_TIMEOUT, (const char *)&i); } if ((i = AG_GetUint(db,"write-timeout")) != 0) { mysql_options(my, MYSQL_OPT_WRITE_TIMEOUT, (const char *)&i); } if (AG_GetUint(db,"reconnect") == 1) { mysql_options(my, MYSQL_OPT_RECONNECT, (const char *)&b); } if ((s = AG_GetStringP(db,"charset")) != NULL) { mysql_options(my, MYSQL_SET_CHARSET_NAME, s); } if ((s = AG_GetStringP(db,"charset-dir")) != NULL) { mysql_options(my, MYSQL_SET_CHARSET_DIR, s); } db->my = mysql_real_connect(my, AG_GetStringP(my,"host"), AG_GetStringP(my,"user"), AG_GetStringP(my,"pass"), dbName, AG_GetInt(my,"port"), AG_GetStringP(my,"unix-socket"), myFlags); if (db->my == NULL) { AG_SetError("MySQL: %s", mysql_error(my)); mysql_close(my); return (-1); } return (0); }
static int SDLGL_OpenVideo(void *obj, Uint w, Uint h, int depth, Uint flags) { char buf[256]; AG_Driver *drv = obj; AG_DriverSw *dsw = obj; AG_DriverSDLGL *sgl = obj; Uint32 sFlags = SDL_OPENGL; int newDepth; /* Set the requested display options. */ if (flags & AG_VIDEO_RESIZABLE) { sFlags |= SDL_RESIZABLE; } if (flags & AG_VIDEO_ANYFORMAT) { sFlags |= SDL_ANYFORMAT; } if (flags & AG_VIDEO_HWPALETTE) { sFlags |= SDL_HWPALETTE; } if (flags & AG_VIDEO_DOUBLEBUF) { sFlags |= SDL_DOUBLEBUF; } if (flags & AG_VIDEO_FULLSCREEN) { sFlags |= SDL_FULLSCREEN; } if (flags & AG_VIDEO_NOFRAME) { sFlags |= SDL_NOFRAME; } if (flags & AG_VIDEO_OVERLAY) dsw->flags |= AG_DRIVER_SW_OVERLAY; if (flags & AG_VIDEO_BGPOPUPMENU) dsw->flags |= AG_DRIVER_SW_BGPOPUP; /* Apply the output capture settings. */ if (AG_Defined(drv, "out")) { char *ext; AG_GetString(drv, "out", buf, sizeof(buf)); if ((ext = strrchr(buf, '.')) != NULL && ext[1] != '\0') { if (Strcasecmp(&ext[1], "jpeg") == 0 || Strcasecmp(&ext[1], "jpg") == 0) { sgl->outMode = AG_SDLGL_OUT_JPEG; if ((sgl->outPath = TryStrdup(buf)) == NULL) return (-1); } else if (Strcasecmp(&ext[1], "png") == 0) { sgl->outMode = AG_SDLGL_OUT_PNG; if ((sgl->outPath = TryStrdup(buf)) == NULL) return (-1); } else { AG_SetError("Invalid out= argument: `%s'", buf); return (-1); } if (AG_Defined(drv, "outFirst")) { AG_GetString(drv, "outFirst", buf, sizeof(buf)); sgl->outFrame = atoi(buf); } else { sgl->outFrame = 0; } if (AG_Defined(drv, "outLast")) { AG_GetString(drv, "outLast", buf, sizeof(buf)); sgl->outLast = atoi(buf); } } } /* Set the video mode. Force hardware palette in 8bpp. */ AG_SDL_GetPrefDisplaySettings(drv, &w, &h, &depth); Verbose(_("SDLGL: Setting mode %ux%u (%d bpp)\n"), w, h, depth); newDepth = SDL_VideoModeOK(w, h, depth, sFlags); if (newDepth == 8) { Verbose(_("Enabling hardware palette")); sFlags |= SDL_HWPALETTE; } if ((sgl->s = SDL_SetVideoMode((int)w, (int)h, newDepth, sFlags)) == NULL) { AG_SetError("Setting %dx%dx%d mode: %s", w, h, newDepth, SDL_GetError()); return (-1); } SDL_EnableUNICODE(1); if ((drv->videoFmt = AG_SDL_GetPixelFormat(sgl->s)) == NULL) { goto fail; } dsw->w = sgl->s->w; dsw->h = sgl->s->h; dsw->depth = (Uint)drv->videoFmt->BitsPerPixel; Verbose(_("SDLGL: New display (%dbpp)\n"), (int)drv->videoFmt->BitsPerPixel); /* Create the cursors. */ if (AG_SDL_InitDefaultCursor(sgl) == -1 || AG_InitStockCursors(drv) == -1) goto fail; /* Set background color. */ dsw->bgColor = AG_ColorFromString(AG_GetStringP(drv,"bgColor"), NULL); /* Initialize our OpenGL context and viewport. */ if (AG_GL_InitContext(sgl, &sgl->gl) == -1) { goto fail; } AG_GL_SetViewport(&sgl->gl, AG_RECT(0, 0, dsw->w, dsw->h)); if (!(dsw->flags & AG_DRIVER_SW_OVERLAY)) ClearBackground(dsw); /* Initialize the output capture buffer. */ Free(sgl->outBuf); if ((sgl->outBuf = AG_TryMalloc(dsw->w*dsw->h*4)) == NULL) { AG_Verbose("Out of memory for buffer; disabling capture\n"); sgl->outMode = AG_SDLGL_OUT_NONE; } if (flags & AG_VIDEO_FULLSCREEN) { if (SDL_WM_ToggleFullScreen(sgl->s)) dsw->flags |= AG_DRIVER_SW_FULLSCREEN; } return (0); fail: if (drv->videoFmt) { AG_PixelFormatFree(drv->videoFmt); drv->videoFmt = NULL; } return (-1); }