+
+int fileExtract (SYSNO *sysno, const char *fname, struct recordGroup *rGroup,
+ int deleteFlag)
+{
+ int i, fd;
+ char gprefix[128];
+ char ext[128];
+ char ext_res[128];
+ const char *file_type;
+ RecType recType;
+
+ if (!rGroup->groupName || !*rGroup->groupName)
+ *gprefix = '\0';
+ else
+ sprintf (gprefix, "%s.", rGroup->groupName);
+
+ logf (LOG_DEBUG, "fileExtract %s", fname);
+
+ /* determine file extension */
+ for (i = strlen(fname); --i >= 0; )
+ if (fname[i] == '/')
+ {
+ strcpy (ext, "");
+ break;
+ }
+ else if (fname[i] == '.')
+ {
+ strcpy (ext, fname+i+1);
+ break;
+ }
+ /* determine file type - depending on extension */
+ sprintf (ext_res, "%sfileExtension.%s", gprefix, ext);
+ if (!(file_type = res_get (common_resource, ext_res)))
+ return 0;
+ if (!(recType = recType_byName (file_type)))
+ return 0;
+
+ /* determine match criteria */
+ if (rGroup->fileMatch)
+ {
+ sprintf (ext_res, "%sfileMatch.%s", gprefix, ext);
+ rGroup->fileMatch = res_get (common_resource, ext_res);
+ if (!rGroup->fileMatch)
+ {
+ sprintf (ext_res, "%sfileMatch", gprefix);
+ rGroup->fileMatch = res_get (common_resource, ext_res);
+ }
+ }
+
+ /* determine database name */
+ if (!rGroup->databaseName)
+ {
+ sprintf (ext_res, "%sdatabase.%s", gprefix, ext);
+ if (!(rGroup->databaseName = res_get (common_resource, ext_res)))
+ {
+ sprintf (ext_res, "%sdatabase", gprefix);
+ rGroup->databaseName = res_get (common_resource, ext_res);
+ }
+ }
+ if (!rGroup->databaseName)
+ rGroup->databaseName = "Default";
+
+ if (rGroup->flagStoreData == -1)
+ {
+ const char *sval;
+ sprintf (ext_res, "%sstoreData.%s", gprefix, ext);
+ if (!(sval = res_get (common_resource, ext_res)))
+ {
+ sprintf (ext_res, "%sstoreData", gprefix);
+ sval = res_get (common_resource, ext_res);
+ }
+ if (sval)
+ rGroup->flagStoreData = atoi (sval);
+ }
+ if (rGroup->flagStoreData == -1)
+ rGroup->flagStoreData = 0;
+
+
+ if (rGroup->flagStoreKeys == -1)
+ {
+ const char *sval;
+
+ sprintf (ext_res, "%sstoreKeys.%s", gprefix, ext);
+ if (!(sval = res_get (common_resource, ext_res)))
+ {
+ sprintf (ext_res, "%sstoreKeys", gprefix);
+ sval = res_get (common_resource, ext_res);
+ }
+ if (sval)
+ rGroup->flagStoreKeys = atoi (sval);
+ }
+ if (rGroup->flagStoreKeys == -1)
+ rGroup->flagStoreKeys = 0;
+
+
+ /* open input file */
+ if ((fd = open (fname, O_RDONLY)) == -1)
+ {
+ logf (LOG_WARN|LOG_ERRNO, "open %s", fname);
+ return 0;
+ }
+ recordExtract (sysno, fname, rGroup, deleteFlag, fd,
+ file_type, recType);
+ close (fd);
+ return 1;
+}
+