LINUX.ORG.RU

DosBox и создание субдиректорий

 


0

1

Есть одно DOS`овское приложение, бухгалтерский отчет, которое нормально работает в Вин-ИксПи, но отказывается работать в DosBox`е. Суть в том, что эта поделка создает во временной директории кучу поддиректорий и не заботится о создании родительских директорий. Короче, она пытается выполнить:

mkdir C:\TEMP\XXXXXXX.XXX\C\\U90\SCR\
mkdir C:\TEMP\XXXXXXX.XXX\C\\U94\SCR\
...
(XXXXXXX.XXX - случайное число, меняется при каждом запуске)

В винде такое проходит нормально, создаются все директории, указанные в пути. А вот в DosBox`е - нет, нужно создавать кайдую вложенную отдельно.

C:\>mkdir C:\TEMP\XXXXXXX.XXX\C\\UXX\SCR\
Unable to make: C:\TEMP\XXXXXXX.XXX\C\\UXX\SCR\

C:\>mkdir C:\TEMP\XXXXXXX.XXX
C:\>mkdir C:\TEMP\XXXXXXX.XXX\C
C:\>mkdir C:\TEMP\XXXXXXX.XXX\C\\U94
C:\>mkdir C:\TEMP\XXXXXXX.XXX\C\\U94\SCR

Вопрос: Можно ли, не меняя исходников, указать DosBox`у создавать все вложенные директории?

★★★

можно

$ ./run.sh
------------------------
#!/bin/bash

echo "------------------------"
cat run.sh
echo "------------------------"
cat mkdir.c
echo "------------------------"
gcc -shared --PIC mkdir.c -o mkdir.so
echo "------------------------"
LD_PRELOAD=./mkdir.so dosbox

------------------------
#define _GNU_SOURCE

#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include <dlfcn.h>

typedef int (*type_mkdir)(const char *pathname, mode_t mode);
static type_mkdir ptr_mkdir = 0;
void __attribute__((constructor)) my_init(void)
{
  ptr_mkdir = dlsym(RTLD_NEXT, "mkdir");
}

int mkdir(const char *pathname, mode_t mode)
{
  char *ptr, *buf = malloc(strlen(pathname));
  if(buf==0) return -1;

  memcpy(buf,pathname,strlen(pathname));
  if(buf[0]!=0)
    for(ptr=buf+1;*ptr!=0;++ptr)
      if(*ptr=='/')
      {
        *ptr=0;
        if(ptr_mkdir(buf, mode)!=0&&errno!=EEXIST)
          break;
        *ptr='/';
      }
  free(buf);
  return ptr_mkdir(pathname, mode);
}
------------------------
------------------------
DOSBox version 0.74
Copyright 2002-2010 DOSBox Team, published under GNU GPL.
...

anonymous
()
Ответ на: комментарий от anonymous

steemandlinux

dosemu

В нём не работает эта программа^W поделка для бухгалтеров.
Основная оболочка запускается, но потом падает с неожиданными ошибками.

anonymous

можно

Огромное спасибо, основная часть проблемы (создание поддиректорий) решена.

Эта программа^W поделка пытается так-же создавать файлы, не создав к ним пути.
Спасибо за подсказку как это дорабатывать, буду мучать её дальше.

DiMoN ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.