- various improvements in SE drivers

This commit is contained in:
zolliker
2006-08-17 15:39:37 +00:00
parent 928738dbd8
commit ce25823567
19 changed files with 301 additions and 100 deletions

View File

@ -31,6 +31,7 @@ static ParClass arrayObjClass = { "array", sizeof(ArrayObj) };
typedef struct WrtObjContext {
FILE *file;
int pos;
char filename[PATH_MAX];
} WrtObjContext;
@ -38,9 +39,17 @@ typedef struct WrtObjContext {
int WrtObjOpen(WrtObjContext *ctx, char *fileName) {
int iret;
char *slashpos;
/* create a temporary file first */
iret = snprintf(ctx->filename, sizeof(ctx->filename), ".%s", fileName);
slashpos = strrchr(fileName, '/');
if (slashpos == NULL) {
ctx->pos = 0;
} else {
ctx->pos = slashpos - fileName + 1;
}
iret = snprintf(ctx->filename, sizeof(ctx->filename), "%.*s.%s"
, ctx->pos, fileName, fileName + ctx->pos);
if (iret < 0 || iret >= sizeof(ctx->filename)) {
return 0;
}
@ -66,9 +75,13 @@ void WrtObj(WrtObjContext *ctx, char *objectName) {
}
/*-----------------------------------------------------------------------*/
void WrtObjClose(WrtObjContext *ctx) {
char finalName[PATH_MAX];
if (ctx) {
fclose(ctx->file);
rename(ctx->filename, ctx->filename+1);
snprintf(finalName, sizeof finalName, "%.*s%s"
, ctx->pos, ctx->filename, ctx->filename + ctx->pos + 1);
rename(ctx->filename, finalName);
}
}
/*----------------------------------------------------------------------------*/
@ -277,5 +290,5 @@ static int ArrayObjInit(SConnection *con, int argc, char *argv[], int dynamic) {
/*----------------------------------------------------------------------------*/
void ArrayObjStartup(void) {
ParMakeClass(&arrayObjClass, NULL);
MakeDriver("array", ArrayObjInit, 0);
MakeDriver("array", ArrayObjInit, 0, "String Array Object");
}